-------------------------- # 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 ### VEKTOREN ### # 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 = runif(1000,min=-1,max=1) # 1000 auf dem Intervall [-1,1] # gleichverteilte Zufallszahlen x plot(x) plot(x,ylim=c(-2,2)) hist(x) hist(x,xlim=c(-2,2)) # 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. Kann man insbesondere fuer # Stochastik I + II und Oekonometrie gut brauchen. ### 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", analog mit cbind, "columnbind" 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 = runif(n*n,min=-1,max=1) # n^2 Zufallszahlen x mat = matrix(x,nrow=n,ncol=n) # nxn Zufallsmatrix mat eigen(mat) res = eigen(mat) # structural information: mode(res) str(res) class(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. res[[1]] res$values res[[2]] res$vectors n = 1000 # redo above (-> quite fast calculation) and then: plot(res$values) # die Eigenwerte sind komplex, offensichtlich kann R # mit komplexen Zahlen rechnen: die komplexe Zahl i # kann man in R durch die Zeichenkette 1i darstellen, # dafuer sind sowohl die Grundrechenarten wie auch # diverse Funktionen wie e^z und sin(z) definiert. # 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 rm(z) # loescht z z z = exp(1i*5*pi/4) z Re(z) Im(z) abs(z) Abs(z) # R ist case-sensitive arg(z) Arg(z) Arg(z)/pi # -3/4 pi, ist zwischen -pi und pi rm(z) z = 0.5 + sqrt(3)/2 * 1i z Re(z) Im(z) abs(z) Arg(z) Arg(z)/pi # pi/3 = 60 Grad