# --------------------------------------------------------------------------- # Allgemeines: # # Zeilen, die mit '#' beginnen sind Kommentarzeilen und werden von # R ignoriert. # # Vergewissern Sie sich, dass Sie sich in Ihrem Areitsverzeichnis stehen: getwd() # Sie koennen das Arbeitsverzeichnis mittels 'setwd' einstellen. # Dabei ist zu beachten, dass anstatt der in DOS ueblichen # Rueckwaerts-Schraegstrichen (back slash) '\' die normalen Schraegstriche '/' # (wie in URLs von Webseiten) verwendet werden: # setwd("C:/meinarbeitsverzeichnis") # Zu allen Befehlen gibt es mittels '?' oder 'help()' eine Online-Hilfe: ?getwd help(getwd) # --------------------------------------------------------------------------- # Beispiel 1: # Die Datei "elec.dat" enthaelt Meta-Daten rechts neben der Zahlenreihe. # Man kann sich die Datei innerhalb von R anschauen: file.show("elect.dat") # Einlesen der Daten (als sogenanntes Datenframe): dat.df <- read.table("elec.dat",fill=TRUE) # 'fill=TRUE' bewirkt, das in Zeilen mit weniger Spalten, die fehlenden # Spalten mit Leerzeichen aufgefuellt werden. # Die fuer uns interessante erste Spalte auslesen dat <- dat.df[,1] # Zeitreihen-Objekt erzeugen: dat.ts <- ts(dat,start=c(1956,1),freq=12) # Zeitreihenplot erstellen (optional mit Beschriftung): plot.ts(dat.ts,xlab="Jahr",ylab="GWh",main="Monatliche Stromproduktion in Australien") # --------------------------------------------------------------------------- # Beispiel 3: # Daten einlesen (die erste Zeile soll als Variablenname interpretiert werden): nelplos <- read.table("nelplosser.dat",header=TRUE) # wir koennten jetzt die Daten z.B. mit 'nelplos$lwages' ansprechen. # einfacher geht es mit attach(nelplos) # die notwendigen Daten werden delogarithmiert: nominalloehne <- exp(lwages) realloehne <- exp(lre_wage) vpi <- exp(lcpi) # Vergleich (Aufgabe b) realloehne - nominalloehne / vpi # die Daten aus nelplos werden jetzt wieder "unsichtbar" # (koennen aber nach wie vor mittels (z.B.) 'nelplos$lwages' gelesen werden detach(nelplos) # --------------------------------------------------------------------------- # Beispiel 4: pkw <- read.table("PKWat.dat",skip=2,header=TRUE) attach(pkw) diff(bestand,1) detach(pkw) # --------------------------------------------------------------------------- # Beispiel 6: schwingung <- sin((0:36)*1/18*2*pi) plot(ts(schwingung,freq=12,start=0)) dat <- sin((0:3)*12 *1/18*2*pi) plot(ts(dat,freq=1,start=0)) # zusammen: plot(ts(schwingung,freq=12,start=0)) lines(ts(dat,freq=1,start=0)) # --------------------------------------------------------------------------- # Beispiel 7: # kuenstliche Zeitreihe der Laenge 50 mit E(Z_t) = 0.01*t und V(Z_t)=1 z <- ts((1:50)*0.01 + 1*rnorm(50)) plot(z) # Analog mit 0.01, 0.1, 0.5, 1, 2, 5 und 10 statt '1' in '1*norm(50)'. # Sie koennen auch laengere Zeitreihen erzeugen # --------------------------------------------------------------------------- # Beispiel 8: elec.df <- read.table("elec.dat",fill=TRUE) elec <- elec.df[,1] hist(elec) # --------------------------------------------------------------------------- # Beispiel 9: beer.df <- read.table("beer2.dat",fill=TRUE) beer <- ts(beer.df,start=c(1991,1),freq=12) lag.plot(beer,set.lags=1) lag.plot(beer,set.lags=12) # --------------------------------------------------------------------------- # Beispiel 11: # Die Datei sp500.dat enthalt Meta-Daten am Dateianfang, die den Zeitraum # der Zeitreihe angeben: file.show("sp500.dat") # Einlesen der Daten (die Meta-Daten werden mittels `skip' uebersprungen: dat.df <- read.table("sp500.dat",header=TRUE,skip=4) # Zeitreihen-Objekt erzeugen: fscom <- ts(dat.df$fscom, start=1967,freq=12) # Differenz der um 12 Monate verschobenen logarithmierten Daten: fscom.diff <- log(fscom)-log(lag(fscom,12)) # Korrelogramm (der Laenge 99): acf(fscom.diff,99) # --------------------------------------------------------------------------- # Beispiel 12: wn <- rnorm(100) plot(wn) acf(wn) # --------------------------------------------------------------------------- # Beispiel 16: # Daten einlesen (die erste Zeile soll als Variablenname interpretiert werden): nelplos <- read.table("nelplosser.dat",header=TRUE) # wir koennten jetzt die Daten z.B. mit 'nelplos$lsp500' ansprechen. # einfacher geht es mit attach(nelplos) # die notwendigen Daten werden delogarithmiert: dat <- exp(lsp500) # Anzahl der Daten dat.len <- length(dat) # 2x4 MA wt <- c(1,2,2,2,1)/8 dat.ma2x4 <- rep(NA,dat.len) for(i in 3:(dat.len-2)) { dat.ma2x4[i] <- weighted.mean(dat[(i-2):(i+2)],wt) } # 2x12 MA wt <- c(1,rep(2,11),1)/24 dat.ma2x12 <- rep(NA,dat.len) for(i in 7:(dat.len-6)) { dat.ma2x12[i] <- weighted.mean(dat[(i-6):(i+6)],wt) } # die Daten aus nelplos werden jetzt wieder "unsichtbar" # (koennen aber nach wie vor mittels (z.B.) 'nelplos$lsp500' gelesen werden detach(nelplos) # --------------------------------------------------------------------------- # Beispiel 17: beer.df <- read.table("beer2.dat",fill=TRUE) beer <- ts(beer.df,start=c(1991,1),freq=12) # Saisonbereininung beer.decomp <- decompose(beer, type = "additive") # Trend-Zyklus Komponente beer.trend <- beer.decomp$trend # Sainsonbereinigte Komponente beer.bereinigt <- beer.decomp$trend + beer.decomp$random # Saisonbereinigte Komponente graphisch darstellen plot(beer.bereinigt) # Trend-Zyklus Komponente ebenfalls im gleichen Plot anzeigen lines(beer.trend) # --------------------------------------------------------------------------- # Beispiel 18: # Einlesen der Daten (als sogenanntes Datenframe): dat.df <- read.table("elec.dat",fill=TRUE) # 'fill=TRUE' bewirkt, das in Zeilen mit weniger Spalten, die fehlenden # Spalten mit Leerzeichen aufgefuellt werden. # Die fuer uns interessante erste Spalte auslesen dat <- dat.df[,1] # Zeitreihen-Objekt erzeugen: dat.ts <- ts(dat,start=c(1956,1),freq=12) # Saisonbereininung dat.decomp <- decompose(dat.ts, type = "multiplicative") # Trend-Zyklus Komponente dat.trend <- dat.decomp$trend # Sainsonbereinigte Komponente dat.bereinigt <- dat.decomp$trend + dat.decomp$random # Saisonbereinigte Komponente graphisch darstellen plot(dat.bereinigt) # Trend-Zyklus Komponente ebenfalls im gleichen Plot anzeigen lines(dat.trend) # --------------------------------------------------------------------------- # Beispiel 19: # Die Datei sp500.dat enthalt Meta-Daten am Dateianfang, die den Zeitraum # der Zeitreihe angeben: file.show("sp500.dat") # Einlesen der Daten (die Meta-Daten werden mittels `skip' uebersprungen: dat.df <- read.table("sp500.dat",header=TRUE,skip=4) # Zeitreihen-Objekt erzeugen: fscom <- ts(dat.df$fscom, start=1967,freq=12) # Glaetten mittels SES, alpha = 0.2 geglaettet <- HoltWinters(fscom, seasonal = "multiplicative", alpha=0.2, beta=0, gamma=0) # Glaetten mittels SES, alpha = 0.9 geglaettet <- HoltWinters(fscom, seasonal = "multiplicative", alpha=0.9, beta=0, gamma=0) # Glaetten mittels SES, optimales alpha geglaettet <- HoltWinters(fscom, seasonal = "multiplicative", beta=0, gamma=0) # --------------------------------------------------------------------------- # Beispiel 20 # Glaetten mittels additiven Verfahren von Holt # (a) beer2: beer.df <- read.table("beer2.dat",fill=TRUE) beer <- ts(beer.df,start=c(1991,1),freq=12) geglaettet <- HoltWinters(beer, seasonal = "additive", gamma=0) # (b) SP500: dat.df <- read.table("sp500.dat",header=TRUE,skip=4) fscom <- ts(dat.df$fscom, start=1967,freq=12) geglaettet <- HoltWinters(fscom, seasonal = "additive", gamma=0) # (c) elec: dat.df <- read.table("elec.dat",fill=TRUE) dat <- dat.df[,1] elec <- ts(dat,start=c(1956,1),freq=12) geglaettet <- HoltWinters(elec, seasonal = "additive", gamma=0) # --------------------------------------------------------------------------- # Beispiel 21 # Glaetten mittels multiplikativen Verfahren von Holt # (a) beer2: beer.df <- read.table("beer2.dat",fill=TRUE) beer <- ts(beer.df,start=c(1991,1),freq=12) geglaettet <- HoltWinters(beer, seasonal = "multiplicative", gamma=0) # (b) SP500: dat.df <- read.table("sp500.dat",header=TRUE,skip=4) fscom <- ts(dat.df$fscom, start=1967,freq=12) geglaettet <- HoltWinters(fscom, seasonal = "multiplicative", gamma=0) # (c) elec: dat.df <- read.table("elec.dat",fill=TRUE) dat <- dat.df[,1] elec <- ts(dat,start=c(1956,1),freq=12) geglaettet <- HoltWinters(elec, seasonal = "multiplicative", gamma=0) # --------------------------------------------------------------------------- # Beispiel 22 # Glaetten mittels multiplikativen Verfahren von Holt-Winters # (a) beer2: beer.df <- read.table("beer2.dat",fill=TRUE) beer <- ts(beer.df,start=c(1991,1),freq=12) geglaettet <- HoltWinters(beer, seasonal = "multiplicative") # (b) SP500: dat.df <- read.table("sp500.dat",header=TRUE,skip=4) fscom <- ts(dat.df$fscom, start=1967,freq=12) geglaettet <- HoltWinters(fscom, seasonal = "multiplicative") # (c) elec: dat.df <- read.table("elec.dat",fill=TRUE) dat <- dat.df[,1] elec <- ts(dat,start=c(1956,1),freq=12) geglaettet <- HoltWinters(elec, seasonal = "multiplicative") # --------------------------------------------------------------------------- # Beispiel 24 # Prognose mittels multiplikativen Verfahren von Holt-Winters # (a) beer2: beer.df <- read.table("beer2.dat",fill=TRUE) beer <- ts(beer.df,start=c(1991,1),freq=12) geglaettet <- HoltWinters(beer, seasonal = "multiplicative") prog <- predict(geglaettet,n.ahead=12) # (b) SP500: dat.df <- read.table("sp500.dat",header=TRUE,skip=4) fscom <- ts(dat.df$fscom, start=1967,freq=12) geglaettet <- HoltWinters(fscom, seasonal = "multiplicative") prog <- predict(geglaettet,n.ahead=12) # (c) elec: dat.df <- read.table("elec.dat",fill=TRUE) dat <- dat.df[,1] elec <- ts(dat,start=c(1956,1),freq=12) geglaettet <- HoltWinters(elec, seasonal = "multiplicative") prog <- predict(geglaettet,n.ahead=12) # ---------------------------------------------------------------------------