konto usunięte

Temat: prognozowanie - zadanie

Witam,
Mam olbrzymią prośbę czy ktoś mógłby mi pomóc w zadaniu z szeregów czasowych.

Treść zadania:
Dla podanego szeregu czasowego:
1. zidentyfikować trend i określić jego wielkość (tworząc np. model liniowy)
2. opracować model ARIMA i określić prognozę na jeden sezon:
- zmniejszyć liczbę danych o jeden sezon,
- opracować i zweryfikować model (np. istotność parametrów, normalność reszt),
- porównać prognozę ze znanymi wartościami rzeczywistymi,

szereg czasowy dla tego zadania w pliku csv:
https://docs.google.com/file/d/0B2JoCZTMk2s-a0JmcGgwV1N...

Na początek umieściłem plik tam w folderze z "r" i chciałem wyrysować punkty na wykresie wpisałem jako skrypt:

gs<-read.csv("czekolada_2_2.csv")
print(gs)
mode(gs)
plot(gs)


i wyrzucił mi:

Błąd w plot.window(...) : potrzeba skończonych wartości 'ylim'
Dodatkowo: Komunikaty ostrzegawcze:
1: In min(x) : brak argumentów w min; zwracanie wartości Inf
2: In max(x) : brak argumentów w max; zwracanie wartości -Inf


Jak w pliku z danymi wyrzuciłem nagłówki to pojawiła mi się wykres, ale cały czarny więc coś jest nie tak...
Proszę bardzo o pomoc bo z r miałem całe 2 zajęcia na których robiliśmy zupełnie coś innego.Mateusz Skiba edytował(a) ten post dnia 05.01.13 o godzinie 22:07
Maciej B.

Maciej B. Doktorant

Temat: prognozowanie - zadanie

Najpierw trochę podstaw:

a) zmień nazwy zmiennych bo mają spacje i są z dziwnymi znakami
b) musisz zmienić zmienną określającą czas na jakąś bardziej sensowną no i tam też masz krzaczki
c) jeżeli będziesz miał jakąś sezonowość to dobrze byłoby utworzyć zmienne 0-1 określające np. miesiące

Zapoznaj się z pakietem xts to szeregów czasowych.

A poza tym to nauka R (i innych języków programowania) jest jak nauka języka obcego - trzeba samemu siedzieć, czytać, pisać i "mówić" aby się go nauczyć. :)

Poniżej kod, który możesz wykorzystać żeby iść dalej, później trend, sprawdzenie sezonowości a później musisz sprawdzić stacjonarność itp.


### wczytuję dane ##
dane<-read.table('D:/_kody/czekolada_2_2.csv',header=T,sep=';')
### pierwszy wiersz nie jest potrzebny
dane<-dane[-1,]
### zmieniam nazwy zmiennych na bardziej sensowne
names(dane)<-c('Okres','Sprzedaz')
### sprawdzam klasy zmiennych
lapply(dane,class)
### zmieniam klasę zmiennej Sprzedaż
dane$Sprzedaz<-as.numeric(as.character(dane$Sprzedaz))
### zmieniam klasę zmiennej Okres
dane$Okres<-as.character(dane$Okres)
### wyciągam rok
dane$rok<-substr(dane$Okres,nchar(dane$Okres)-1,nchar(dane$Okres))
### wyciągam miesiąc przy założeniu, że pierwszy to styczeń, w innym przypadku musiałbyś zmienić
dane$mies<-as.numeric(unlist(lapply(table(dane$rok),seq.int)))
### dychotomizuję zmienną miesiac
for (i in 1:12){
dane[,i+5]<-ifelse(dane$mies==i,1,0)
}
names(dane)[6:17]<-paste('mies',1:12,sep='')

### rysuję wykres
plot(dane$Sprzedaz,type='l')


P.S. Podstawa to dobrze przygotować dane a później można śmigać ale to jak mówiłem, podejdź do tego jak do nauki języka, jak go nie będziesz używał to nie nauczysz się.

P.S. 2 Resztę możesz wykonać w pakiecie forecast Maciej B. edytował(a) ten post dnia 06.01.13 o godzinie 14:22

konto usunięte

Temat: prognozowanie - zadanie

Dzięki za wstęp, ale jest to dla mnie troszkę zbyt skomplikowane, chciałem to troszkę skrócić, wiesz nazyw osi nie muszą być również jakieś super piękne więc pomijam zmianę nazwy na "okres" i "sprzedaz".

### wczytuję dane ##
gs<-read.csv('czekolada_2_2.csv',header=T,sep=';')
### pierwszy wiersz nie jest potrzebny
gs<-gs[-1,]
print(gs)
### rysuję wykres
plot(gs, type='1')

Niestety nie mam wykresu, tylko pojawiają mi się jakieś dziwne pasy...

W instrukcji z labolatorium potem mam że trend należałoby wpisać:

g.lm1 <- lm(g~t)
t <- seq(from=1957, to=1995, length.out=length(gs[,2]))
plot(gs[,2], type="l")
lines(g.lm1$fit, col=2, lwd=2)
summary(g.lm1)


tyle że nim będę mógł tego spróbować muszę mieć wykres...

z góry dzięki za pomoc
Maciej B.

Maciej B. Doktorant

Temat: prognozowanie - zadanie

Pojawiają się pasy bo Twoja zmienna nie jest typu numeric a factor (czyt. tekstowego).

konto usunięte

Temat: prognozowanie - zadanie

OK super, to wiele wyjaśnia troszkę to przekształciłem na swoje potrzeby i kod wygląda tak:
# wczytuję dane 
gs<-read.csv('czekolada_2_2.csv',header=T,sep=';')
gs<-gs[-1,]
names(gs)<-c('Okres','Sprzedaz')
lapply(gs,class)
gs$Sprzedaz<-as.numeric(as.character(gs$Sprzedaz))
gs$Okres<-as.character(gs$Okres)
plot(gs$Sprzedaz,type='l')

wyrysowało mi również wykres, teraz trend i tu robi się problem bo podstawiając skrypt jaki mam w instrukcji ni jak nie chce to wykreślić trendu...


g.lm1 <- lm(g~t)
#to zapewne lata w jakich się odbywa więc podstawiłem te z danych
t <- seq(from=1957, to=1995, length.out=length(gs[,2]))
plot(gs[,2], type="l")
lines(g.lm1$fit, col=2, lwd=2)
summary(g.lm1)
Maciej B.

Maciej B. Doktorant

Temat: prognozowanie - zadanie

Wg tego co wkleiłeś, najpierw robisz regresję, a później definiujesz zmienną t, którą wykorzystujesz do tworzenia modelu.

konto usunięte

Temat: prognozowanie - zadanie

Maciej B.:
Wg tego co wkleiłeś, najpierw robisz regresję, a później definiujesz zmienną t, którą wykorzystujesz do tworzenia modelu.

Troszkę to stuningowałem:

g<-gs
g<-t
g.lm1 <- lm(g~t)
t <- seq(from=1957, to=1995, length.out=length(gs[,2]))
plot(gs[,2], type="l")
lines(g.lm1$fit, col=2, lwd=2)
summary(g.lm1)


tyle że wybija jakiś błąd i ni jak nie chce wyznaczyć tej linii trendu. Prosiłbym o jakąś pomoc bo i tak nie wiem jak to dalej ugryźć..Mateusz Skiba edytował(a) ten post dnia 07.01.13 o godzinie 10:57

Następna dyskusja:

Zadanie z R




Wyślij zaproszenie do