-------------------------- # Kurzeinfuehrung in R # -------------------------- # In R gibt es im wesentlichen 4 verschiedene # Datentypen: Vektoren, Matrizen, Tabellen oder # data frames und Listen. Zahlen sind Vektoren # der Laenge 1: x = 7.7 y = 8.8 x+y # Fuer das Anlegen von Vektoren gibt es im wesent- # lichen 3 Befehle, c(), seq() und rep(): v1 = c(2.22,-4.56,29) # "c" fuer "concatenate" v1 v2 = seq(from=10,to=30,by=2) v2 v3 = seq(from=0,to=2*pi,length=100) v3 plot(sin(v3)) # R rechnet immer element-weise plot(sin(v3),type="l") points(cos(v3)) # addiert Punkte zu einem bestehendem plot lines(cos(v3),col="red") # dasselbe wie points, nur in linienform ?plot # Hilfe-Seiten v4 = rep(2,10) v4 v5 = rep(c(77,33),4) v5 # fuer Vektoren mit Schrittweite 1 (oder -1): v6 = 1:10 v6 v7 = 10:30 # hat immer Schrittweite 1 (oder -1) v7 v8 = 4:(-4) v8 v8[1] v8[2] v8[7:9] v8[7:11] # viele Funktionen geben automatisch Vekoren zurueck: x = rnorm(10000) # 10000 normalverteilte Zufallszahlen x plot(x) hist(x) hist(x,prob=TRUE) curve(dnorm(x),col="red",add=TRUE) # # R ist sehr performant und hat viele Funktionalitaeten # fuer das Rechnen mit Zufallszahlen; das Kapitel 5 in # RSkript_UniGiessen bietet auf 3 Seiten eine sehr nuetz- # liche und kompakte Uebersicht. # # Matrizen: x = 1:20 x mat1 = matrix(x,nrow=4,ncol=5) mat1 mat2 = matrix(x,nrow=5,ncol=4) mat2 mat3 = matrix(x,nrow=5,ncol=4,byrow=TRUE) mat3 mat3[2,4] mat3[4:5,2] mat3[4:5,2:3] # R rechnet typischerweise immer element-weise: x x^2 x+0.33 1/x mat3 mat3^2 # das ist nicht Matrix-Multiplikation mat3+0.77 1/mat3 # das ist nicht Matrix-Inverse # Matrix-Multiplikation: mat4 = mat1 %*% mat2 mat4 det(mat4) # nicht invertierbar v1=c(1,1,1) v2=c(1,2,3) v3=c(1,4,9) mat5 = rbind(v1,v2,v3) # "rowbind" mat5 det(mat5) mat5inv = solve(mat5) # das ist Matrix-Inverse mat5inv # check: mat5 %*% mat5inv zapsmall(mat5 %*% mat5inv) # Eigenwerte und Eigenvektoren einer Matrix: n = 5 # we repeat this for n=1000 x = rnorm(n*n) # n^2 Zufallszahlen x mat = matrix(x,nrow=n,ncol=n) # nxn Zufallsmatrix mat eigen(mat) res = eigen(mat) str(res) names(res) # das Resultat von eigen(mat) ist eine Liste mit 2 Elementen, # res[[1]]=res$values ist vom Typ vector und res[[2]]=res$vectors # ist vom Typ Matrix. # Listen sind im wesentlichen dazu da, um Objekte mit unterschied- # lichen Datentypen in einem Objekt zusammenfassen zu koennen. # So ist der Rueckgabewert von R-Funktionen haeufig vom Typ Liste, # damit verschieden Arten von Information in einem Objekt zurueck- # gegeben werden koennen. Der Rueckgabewert der Funktion lm(), # die eine lineare Regression durchfuehrt, ist etwa eine Liste # mit 13 Elementen. Beispiele dazu weiter unten. res[[1]] res$values res[[2]] res$vectors n = 1000 # redo above (-> quite fast calculation) and then: plot(res$values) # Vermutung: die Eigenwerte sind gleichverteilt in # einem Kreis mit Radius sqrt(n): phi = seq( from=0 , to=2*pi , length=500 ) z = sqrt(n) * exp( 1i * phi ) lines( z , col="red" ) # addiert Punkte zu einem bestehen Plot # im Linien-Format # Offensichtlich kann R mit komplexen Zahlen rechnen: z rm(z) z z = 0.5 + sqrt(3)/2 *1i z Re(z) Im(z) im(z) # R ist case-sensitive abs(z) arg(z) Arg(z) # R ist case-sensitive Arg(z)/pi # 60 Grad # Neben Vektoren, Matrizen und Listen gibt es noch den Datentyp # Tabelle oder data frame. Wenn man Daten aus einem externen file # einliest, werden sie typischerweise als data frame angelegt. # Das werden wir uns spaeter anschauen, wenn wir uns genauer mit # dem lm()-Befehl befassen, das ist der Befehl, der in R eine # lineare Regression durchfuehrt. Fuer diese Oekonometrie-Vorlesung # ist das so ziemlich der wichtigste Befehl. "lm" steht dabei # fuer "linear model" und das meint, dass die Regressions-Parameter, # typischerweise werden sie mit beta bezeichnet, linear in das # Modell eingehen (die Regressoren koennen dabei beliebige nicht- # lineare Funktionen der zugrunde liegenden Daten sein).