# Iniciación a la Programación con R 1. Operaciones con matrices en R. a<-matrix(1:6,2,3) # nrow(matriz) número de filas de la matriz. # ncol(matriz) número de columnas de la matriz. nrow(a) ncol(a) # diag() crea matrices diagonales o extrae los elementos de la diagonal de una matriz diag(3) diag(c(3,5,7)) diag(a) # t(matriz) matriz traspuesta t(a) # %*% proporciona el producto de matrices b<-matrix(1:4,2) b%*%a x<-c(1,2) x%*%b b%*%x x%*%b%*%x # crossprod(matriz,vector) proporciona t(matriz)%*%vector crossprod(a,x) # crossprod(matriz) proporciona t(matriz)%*%matriz crossprod(a) # solve(matriz,vector) si A es una matriz cuadrada de rango completo y x un vector # solve(A,x) proporciona la solución z del sistema Az=x solve(b,x) # solve(matriz) proporciona la inversa de la matriz solve(b) # Solución de las ecuaciones normales para un modelo lineal de rango completo # y=xbeta+eps solve(crossprod(x),crossprod(x,y)) # eigen(matriz) proporciona autovalores y autovectores de la matriz # eigen(matriz)$vectors proporciona los autovectores de la matriz # eigen(x)$values proporciona los autovalores de la matriz eigen(b) 2. Funciones de control en R # Bucles for(i in vector){sentencias ejecutables} while(condición){sentencias ejecutables} # Condicionamiento if(condición) {sentencias ejecutables} else {sentencias ejecutables} 3. Un primer programa en R. # Vamos a crear un programa que nos resuelva el problema de la estimación puntual # y por intervalos en un Modelo Lineal de rango completo: #En primer lugar hemos de decidir qué argumentos nos son imprescindibles. Parece que #tanto la matriz x como el vector y son necesarios. est.rc<-function(x,y){ #Intentemos trasladar al programa la notación que hemos seguido en teoría: n<-length(y) p<-ncol(x) #y otra que nos puede venir bien s<-solve(crossprod(x)) #calculemos el estimador de beta beta<-s%*%t(x)%*%y #los valores ajustados y los residuos y.ajus<-x%*%beta resid<-y-y.ajus #ahora calculemos el estimador de sigma cuadrado sigma2<-crossprod(resid)/(n-p) #y mediante una orden repetitiva estimemos los errores de las componentes de beta vari<-numeric() for(i in 1:p){vari<-c(vari,sigma2*s[i,i])} #la salida será una tabla con los estimadores de las componentes de beta y #sus errores junto con el estimador de sigma cuadrado salida1<-cbind(beta,vari) #ponemos nombres a las filas y las columnas rownames(salida1)<-paste(rep("beta",p),(1:p),sep="") colnames(salida1)<-c("estim.","error") #e imprimimos en pantalla print(salida1,quote=F) #ahora la varianza cat("\n","la estimación de sigma cuadrado es", sigma2,"\n") #no nos olvidemos de cerrar la llave de arriba } # Crea una función que nos permita obtener intervalos de confianza para la # varianza común a las observaciones y para las coordenadas del vector de # parámetros beta, en un modelo lineal normal de rango completo.