###### ESERCITAZIONE 2 ## ### grafica: curve,lines,hist,plot,par # funzioni matematiche curve(1+x^2,from=-2,to=3) #y=1+x^2 #curve(y,from=-2,to=3) #non valido: necessita di una espressione in x!! curve(3+2*x,add=TRUE,col="blue") curve(5-3*x^2+6*x,add=T,lty=2,col=2) #lty,col in plot.default (graphical parameters) par(mfrow=c(2,2)) #mfcol curve(log,0,10,col=4) #log=expressione (funzioni in x preesistenti) title("Logaritmo naturale") curve(exp,-2,2,col=3) title("Esponenziale") curve(sin,-2*pi,2*pi,col=6) #pi=pi greco title("Seno") abline(h=0,v=0) #horizontal line curve(2*x+3) #from=0, to=1 default title("Retta") abline(3,1.5,col="red") # pseudo-random vectors n<-1000 x<-rnorm(n) #N(0,1) hist(x,freq=F,xlab="x",ylab="probability density",border=3) curve(dnorm(x),add=T,col=4) abline(v=0) #vertical line integrate(dnorm,-1,1) abline(v=-1,lty=2,col="red") abline(v=1,lty=2,col="red") n=100 par(mfcol=c(2,2)) x<-rnorm(n) plot(x,type="p",xlab="sample size",ylab="x",main="pseudo-random numbers \nfrom N(0,1)") abline(h=0,col=2) abline(h=mean(x),col=6) curve(dnorm(x),-6,6) abline(v=0,col=2) abline(v=mean(x),col=6) title("probability density of N(0,1)") x<-rnorm(n,2,3) #N(2,3) plot(x,type="p",xlab="sample size",ylab="x",main="pseudo-random numbers \nfrom N(2,3)") abline(h=0) abline(h=2,col=2) abline(h=mean(x),col=6) curve(dnorm(x,2,3),-4,8) abline(v=0) abline(v=2,col=2) abline(v=mean(x),col=6) title("probability density of N(2,3)") ### arrays and matrices x<-1:5 x dim(x)<-c(1,5) #assegnare dimensione a vettori x dim(x) y<-1:12 dim(y)<-c(3,4) y t(y) #trasposta x1<-array(x,c(1,5)) #nota:assegna ad un oggetto x1 un numero di dimensioni anche >2 y1<-array(y,c(3,4)) #ad esempio x1<-array(x,c(1,5,3)); x1[,,1] is.array(x1) #è anche is.matrix dim(x1) x2<-matrix(x,nrow=1,ncol=5) x1==x2 y2<-matrix(y,3,4) y2 y3<-matrix(y,3,4,byrow=T) y3 is.matrix(y2) dim(y2) x2[1,2] #estrazione elemento in posizione 1,2 x2[,2] #estrazione seconda colonna (n.b. stesso elemento precedente!) y2[2,] #estrazione seconda riga y3[2,2] #estrazione elemento in posizione 2,2 y3[2,2:3] #estrazione elementi in pos. 2,2 e 2,3 (vettore) y3[1,c(2,4)] #estrazione elementi in pos. 1,2 e 1,4 (vettore) y3[1:2,1:2] #sottomatrice di elementi contigui y3[c(1,3),c(2,4)] #sottomatrice di elementi non contigui #estrazione elementi in pos. 1,2; 1,4; 3,2; 3,4 # operazioni su matrici X<-matrix(1:4,c(2,2),byrow=T) #matrici quadrate 2x2 Y<-matrix(5:8,c(2,2),byrow=T) Z<-X+Y #stessa dimensione! Z1<-X-Y Z2<-X*Y #prodotto elemento per elemento Z2a<-X*Y #Z2a, Z2b identici (prodotto algebrico) Z2b<-Y*X Z3<-X/Y #divisione elemento per elemento Z3a<-X*(1/Y) #Z3a, Z3b identici (divisione algebrica) Z3b<-(1/Y)*X #inverse di ciascun elemento! #PRODOTTO MATRICIALE: riga x colonna x<-matrix(1:4,c(1,4)) #1x4 y<-matrix(5:12,c(4,2)) #4x2 z2<-x%*%y #1x2; n°colonne 1°matrice = n°righe 2°matrice 1*5+2*6+3*7+4*8 #1°elemento di z2 1*9+2*10+3*11+4*12 #2°elemento di z2 Z2c<-X%*%Y #entrambi prodotti possibili Z2d<-Y%*%X #ma Z2a diverso da Z2b! #INVERSA DI UNA MATRICE #X^-1*X=X*X^-1=I con X matrice quadrata #solve(a,b) Solve a System of Equations a %*% x = b #n° eq. lineari = n° incognite x!! #a matrice quadrata di coefficienti dei sistemi lineari #x matrice di incognite #b termini noti (o matrice identità) Z4<-solve(X)%*%Y #X^-1*Y a=X; b=I Z5<-Y%*%solve(X) #Y*X^-1 xty<-rbind(x,t(y)) #condizione: stesso n°colonne txy<-cbind(t(x),y) #condizione: stesso n°righe n=10 I<-diag(n) #matrice identità n-dimensionale diagX<-diag(X) #estrae gli elementi diagonali di X matrice quadrata y1<-1:5 diagy<-diag(y1) #matrice diagonale rowsum<-apply(y,MARGIN=1,FUN=sum) #applica la funzione sum alla matrice/array #MARGIN=1 righe; MARGIN=2 colonne colmean<-apply(y,MARGIN=2,FUN=mean) #medie x colonna ### lists, dataframes # liste x<-c(3,-1,4,7,2) y<-c("sofia","luca","marco") z<-matrix(rnorm(9),3,3) lista<-list(x,y,z) #mette insieme oggetti di varia natura mode(lista) #"list" length(lista) #n° oggetti nella lista str(lista) #struttura di una lista lista lista[[2]] lista[[3]][2,3] lista2<-list(vector=x,names=y,matrix=z) #[[1]]=vector,etc.: oggetti nominati!! lista2$names lista2$matrix[2,3] # data.frame (per dettagli vedi ?data.frame) #data frame: collezione bidimensionale di elementi di varia natura #condivide molte delle proprietà di liste e matrici x<-1:12 y<-rnorm(12) xy<-cbind(x,y) rownames(xy)<-letters[1:12] #nomi righe = lettere alfabeto is.matrix(xy) #TRUE xy[1,1] #no xy[a,x]!! mesi<-month.name data<-data.frame(xy,mesi,row.names=letters[1:12]) #solo per colonna data data$mesi data$x data$y data$x;data$y #estrazione consecutiva di dati con ";" ### import data data<-read.csv("name.csv",sep=";") attach(data)