Apuntes R PDF
Apuntes R PDF
Apuntes R PDF
Crditos: Estos apuntes se basan en una traduccin de parte de un documento facilitado por Pablo E. Verde, del AMS y otros documentos sobre SPLUS o R de dominio pblico.
Inicio de R
R es un programa de 32 bits y precisa Windows 95 o superior para funcionar. Existen versiones para Linux, pero no para Windows 3 o DOS. Existen dos versiones de R para windows. Rgui.exe emplea un entorno grfico con ventanas y Rterm.exe, que es ms rpido pero no dispone de grficos y se ejecuta en una ventana de DOS bajo windows. En teste curso usaremos Rgui.exe . Al arrancar Rgui aparece un entorno con una barra horizontal superior que contiene mens y botones y una ventana de comandos con el smbolo > que nos invita a escribir.
Expresiones y Objetos
R se usa escribiendo expresiones en la ventana de comandos tras el smbolo >. Una expresin es algo que R es capaz de evaluar. Ejemplos: > 3 + 7*4 [1] 31 esto es un vector de longitud 1, es decir de 1 elemento. R es un lenguaje que emplea funciones que operan sobre objetos para generar otros objetos. Los argumentos de una funcin siempre deben incluirse entre parntesis, y si se desea ejecutar una funcin sin argumentos, los parntesis siguen siendo obligatorios, por eso siempre que nos refiramos a una funcin la nombraremos con los parntesis. Por ejemplo, para finalizar la sesin de R se puede emplear la funcin q(): > q() Se pueden combinar varios elementos en un vector mediante la funcin c() > c(1,2,3) [1] 1 2 3 Otra funcin til para crear vectores es seq(), que genera una secuencia de nmeros: seq(1,10) [1] 1 2 3 4 > seq(4,10,2) [1] 4 6 8 10 5 6 7 8 9 10
Para generar secuencias simples tambin se puede usar el operador : 1:10 [1] 1 2 3 4 5 6 7 8 9 10
A pesar de que cada operacin que se realiza en R resulta en un objeto, stos no se guardan a no ser que se les asigne un nombre. Una vez nombrados, un objeto se guarda permanentemente hasta que no se borre explcitamente. El operador de asignacin es <-. Por ejemplo, la siguiente expresin crea un vector de 4 elementos y lo asigna al objeto x > x<-c(4,3,2,1) > x
[1] 4 3 2 1 Una vez se dispone de un objeto nominado, se puede emplear en expresiones: > x*10 [1] 40 30 20 10 > mean(x) [1] 2.5 > var(x) [1] 1.666667 Si aparece un mensaje de error, casi siempre se debe a sintaxis incorrecta: > 3 x Error: syntax error Para ver que objetos se han creado se emplea la funcin ls(). Para borrar objetos se usa rm(). Por ejemplo: > ls() [1] "x" > rm(x)
Maysculas y minsculas
R diferencia minsculas y maysculas en todos sus objetos, argumentos, nombres, funciones etc. Hay que tener mucho cuidado con los nombres que se emplea.
Ayuda Online
Existen dos sistemas de ayuda en R. Una basada en archivos de R y otra basada en archivos hipertexto html, que se leen con un navegador de internet. Para pedir ayuda sobre un tema especfico se puede emplear el men de ayuda o bien las siguientes instrucciones: > help(rnorm) > ?rnorm
Funciones
Una funcin es una expresin de R que devuelve un valor tras realizar operaciones sobre uno a ms argumentos. Ejemplo: > rnorm(5) [1] -0.02040495 -1.01193289 0.91630813 -1.38298488 -0.46955270 > rnorm(5,mean=10, sd=1000) [1] -793.5893 912.6408 -1145.8699 114.9803 240.2155 Para asignar el resultado de una funcin a un objeto permanente debe emplearse el operador de asignacin: x<-rnorm(5,mean=10,sd=1000) > x [1] 2405.68112 92.49998
-14.88167
762.56178 -1097.84235
Operadores
Un operador es una funcin que como mximo acepta dos argumentos. Por ejemplo, las operaciones aritmticas tpicas se representan con los operadores +, -, *, y /. Algunos ejemplos: > 4+4 [1] 8 > 3*50 [1] 150 > (5.7-9)/5 [1] -0.66 > 2^3 [1] 8 Los operadores lgicos se emplean para comparaciones y expresiones lgicas. El igual de comparacin emplea dos signos igual == para diferenciarlo del igual de asignacin de argumentos a funciones. == (igual), != (diferente) >, <, >=, <= | (o), & (y) Ejemplos de uso: > 24==(6*4) [1] TRUE > 7>7 [1] FALSE > 7>=7
Expresiones
Una expresin es cualquier combinacin de funciones, operadores y objetos de datos: >3 * runif(10) [1] 2.7368648 2.7806944 0.3488282 1.0469554 1.5058319 2.5762746 1.1441339 0.0203806 [9] 0.4741212 2.5809784 > 3* runif(5) [1] 1.4249556 2.7961005 2.3872305 0.7703814 1.9126908 > 5* c(3,4)-1 [1] 14 19 > c(2*runif(5),4*rnorm(5,mean=10,sd=1)) [1] 1.3105429 1.4122571 0.7469029 0.1724914 0.5172468 42.2367480 50.7732304 [8] 44.3738271 40.3949496 36.3289406
Jerarqua de precedencia
Al igual que la mayora de lenguajes de programacin, las operaciones se evalan primero en los parntesis ms internos y despus los ms externos. Por ejemplo: x<-5 > 1:(x-1) [1] 1 2 3 4 > 1:x-1 [1] 0 1 2 3 4 Si no se emplean parntesis, la precedencia es: funciones especiales > productos | divisin > suma | resta
Objetos de datos en R
Existen siete tipos bsicos de objetos: vector, matrix, array, list, factor, time series, y data frame. Todos se crean mediante generalizacin del ms sencillo: el vector.
numeric
En notacin cientfica (forma exponencial), que representa nmeros como potencias de 10. Por ejemplo, 100 se representa como 1e2 en notacin cientfica y 0.002 es 2e-3. El valor Inf, que representa el infinito, se puede asignar a objetos o puede ser el resultado de operaciones como dividir por cero: >c(5/0, -2.1/0) [1] Inf -Inf
complex
Nmeros complejos, similar a los numricos, excepto por la componente imaginaria. Se especifican como a+bi, donde a es la parte real y b es la imaginaria. Ejemplos: 2-3i y 4.2+5.4i.
character NA
Cualquier texto incluido entre comillas ( ) es un valor de tipo carcter. Por ejemplo: Estudio 1, Hospital Comarcal NA es el cdigo para valores perdidos en R para datos logical, numeric y complex. Son las inciales del ingls Not Available. Puede emplearse como un valor ms es operaciones: > c(5,NA,3.9) [1] 5.0 NA 3.9 NA tambin representa No numrico y es el resultado de operaciones no determinadas como 0/0. No hay cdigo de valor perdido para datos de tipo carcter, pero suele emplearse una cadena vaca . NULL representa el valor nulo, y es til para que una funcin no devuelva ningn valor o para establecer que un argumento no se pasa a una funcin. Por ejemplo, si se piden los nombre de los valores de un vector, y stos no existen, se a devuelve NULL: > names(1:4) NULL
NULL
Conversin de tipos
Algunos tipos de objetos slo permiten datos del mismo tipo, y si se intentan combinar se convierten al tipo ms general. Por ejemplo: > c(T,F,F) [1] TRUE FALSE FALSE > c(T,F,F,1,6) [1] 1 0 0 1 6 > c(T,F,F,1,6,6+2i) [1] 1+0i 0+0i 0+0i 1+0i 6+0i 6+2i > c(T,F,F,1,6,6+2i,"Azul") [1] "TRUE" "FALSE" "FALSE" "1" Las mismas conversiones ocurren en clculos: T+1 [1] 2 > 3*T+1 [1] 4
"6"
"6+2i"
"Azul"
> numb.leters<-letters > length(numb.leters) [1] 26 > mode(numb.leters) [1] "character" > numb.leters[1:5] [1] "a" "b" "c" "d" "e" > names(numb.leters[1:5]) NULL > numb.leters [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" [21] "u" "v" "w" "x" "y" "z" > names(numb.leters)<-1:26 > numb.leters 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" 22 23 24 25 26 "v" "w" "x" "y" "z" >
Matrices
Para crear una matriz a partir de un vector existente se puede emplear la funcin dim(), que asigna el nmero de filas y de columnas. Por ejemplo: > mat<-rep(1:4,rep(3,4)) > mat [1] 1 1 1 2 2 2 3 3 3 4 4 4 > dim(mat)<- c(3,4) > mat [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 1 2 3 4 [3,] 1 2 3 4
Para combinar vectores (y matrices) para formar matrices se pueden emplear las funciones cbind() y rbind(). La funcin cbind() une columnas y la rbind() une filas: rbind(c(234,234,123,34),c(23,344,112,12)) [,1] [,2] [,3] [,4] [1,] 234 234 123 34 [2,] 23 344 112 12 cbind(c(234,234,123,34),c(23,344,112,12)) [,1] [,2] [1,] 234 23 [2,] 234 344 [3,] 123 112 [4,] 34 12 Tambin se puede usar la funcin matrix() para crear matrices: > matrix(1:12,ncol=3,byrow=T) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 [4,] 10 11 12 > matrix(1:12,ncol=3) [,1] [,2] [,3] [1,] 1 5 9 [2,] 2 6 10 [3,] 3 7 11 [4,] 4 8 12
Para comprobar la dimensin de una matriz tambin se emplea la funcin dim(): mat [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 1 2 3 4 [3,] 1 2 3 4 > dim(mat) [1] 3 4
A las matrices se les puede etiquetar las filas y las columnas con la funcin dimnames(). Los nombres deben suministrarse como una lista: dimnames(mat)<-list(paste("row",letters[1:3]),paste("col",LETTERS[1:4])) > mat col A col B col C col D row a 1 2 3 4 row b 1 2 3 4 row c 1 2 3 4 Para suprimir las etiquetas, se asigna el valor NULL al elemento corespondiente de la lista:
dimnames(mat)<-list(NULL,paste("col",LETTERS[1:4])) > mat col A col B col C col D [1,] 1 2 3 4 [2,] 1 2 3 4 [3,] 1 2 3 4 Para extraer elementos de una matriz se emplean ndices entre corchetes con las posiciones de filas y columnas: mat col A col B col [1,] 1 2 [2,] 1 2 [3,] 1 2 > mat[1,2] col B 2 > mat[c(1,3),c(3,4)] col C col D [1,] 3 4 [2,] 3 4 C col D 3 4 3 4 3 4
> mat[-c(1,3),c(3,4)] col C col D 3 4 > mat[-c(1,3),mat[3,]>2] col C col D 3 4 > mat[-c(1,3),mat[3,]= =2] col B 2 > mat[-c(1,3),mat[3,]!=2] col A col C col D 1 3 4 > mat[,c("col A", "col D")] col A col D [1,] 1 4 [2,] 1 4 [3,] 1 4 > mat[1,] col A col B col C col D 1 2 3 4 La misma tcnica sirve para extraer valores de otros tipos de objeto.
Arrays
Los Arrays generalizan las matrices extendiendo el atributo dim a ms de 2 dimensiones. Se crean con la funcin array(), similar a la funcin matrix(). Si no se suministran datos, se crea el array lleno de valores NA. Cuando se pasan valores para crear un array, la primera dimensin cambia la ms rpida, la segunda despus y as sucesivamente. myarray<-array(c(1:8,11:18,111:118),dim=c(2,4,3)) > myarray , , 1 [,1] [,2] [,3] [,4] [1,] 1 3 5 7
[2,]
, , 2 [,1] [,2] [,3] [,4] [1,] 11 13 15 17 [2,] 12 14 16 18 , , 3 [,1] [,2] [,3] [,4] [1,] 111 113 115 117 [2,] 112 114 116 118
Listas
Hasta ahora, todos los objetos descritos slo permitan elementos del mismo tipo (mode). El objeto list permite combinar elementos de diferente tipo, y que cada elemento de la lista conserve su tipo original, sin conversiones. Las listas son un tipo de objetos muy general. Se componen de elementos que pueden ser de diverso tipo. Muchas funciones de R devuelven listas. Para crear una lista se emplea la funcin list(). Cada argumento es un elemento de la lista. Para nombrar los elementos se emplea la forma nombre=componente: mylist<-list(NUMbers=1:10, COLORS=c("black","brown","green"), sublist=list(logicalval=logical(4),Description="list data example")) > mylist $NUMbers: [1] 1 2 3 4 5 6 7 8 9 10 $COLORS: [1] "black" "brown" "green" $sublist: $sublist$logicalval: [1] F F F F $sublist$Description: [1] "list data example" Para acceder a un elemento de una lista se puede emplear su nombre precedido de un $: > mylist$COLORS [1] "black" "brown" "green" > mylist$sublist$Description [1] "list data example" De manera ms general (y la nica posible si los componentes no tienen nombre) , se pueden emplear ndices entre doble corchetes [[]]. Para referirse a los elementos dentro de un componente se emplean corchetes simples: > mylist$COLOR [1] "black" "brown" "green" > mylist[[2]] [1] "black" "brown" "green" > mylist[[2]][c(2,3)]
[1] "brown" "green" > mylist[[3]] $logicalval: [1] F F F F $Description: [1] "list data example"
length(mylist) [1] 3 > mode(mylist) [1] "list" > names(mylist) [1] "NUMbers" "COLORS" "sublist" > names(mylist)<-c("NUM","COL","SList") > names(mylist) [1] "NUM" "COL" "SList" > Los resultados de ajustar modelos a unos datos devuelven una lista con muchos componentes que contienen informacin de inters. > y<-rnorm(5) > x<-runif(5) > modelo<-lm(y~x) > mode(modelo) [1] "list" > names(modelo) [1] "coefficients" "residuals" [5] "fitted.values" "assign" [9] "xlevels" "call"
> vola.intens <-ordered( c("Hi","Med","Lo","Hi","Hi"),levels=c("Lo","Me","Hi")) > vola.intens [1] Hi NA Lo Hi Hi Levels: Lo < Me < Hi
Para crear una variable categrica a partir de una numrica se puede emplear la funcin cut(). El argumento breaks acepta una lista con los limtes de los grupos, incluyendo el mnimo y el mximo. > x<-seq(1,12) > x [1] 1 2 3 4
9 10 11 12
> cut(x,breaks=c(0,3,6,9,12),labels=c("q1","q2","q3","q4")) [1] q1 q1 q1 q2 q2 q2 q3 q3 q3 q4 q4 q4 Levels: q1 q2 q3 q4 Por defecto los grupos no incluyen el mnimo y s el mximo, por eso se empleado como mnimo el 0: > cut(x,breaks=c(1,3,6,9,12),labels=c("q1","q2","q3","q4")) [1] NA q1 q1 q2 q2 q2 q3 q3 q3 q4 q4 q4 Levels: q1 q2 q3 q4 > Si se desea un nmero concreto de grupos de aproximadamente igual tamao se puede pasar el nmero como argumento break: > cut(x,breaks=4,labels=c("q1","q2","q3","q4")) [1] q1 q1 q1 q2 q2 q2 q3 q3 q3 q4 q4 q4 Levels: q1 q2 q3 q4 >
Atributos de un factor
Atributo length mode names levels class Descripcin Nmero de valores numeric Etiquetas de valores Niveles del factor: valores diferentes posibles. factor
Se pueden combinar data frames existentes de diferentes maneras mediante las funciones cbind(), rbind() y merge() > > > > mi.logical<-sample(c(T,F),size=10,replace=T) mi.factor<-factor( sample(c("A","B"),size=10,replace=T) ) mi.numeric<-rpois(10,7) x<-seq(1,10,1)
w<-1+x/2 y<-x+w*rnorm(x) mi.df<-data.frame(mi.logical,mi.factor,mi.numeric,x,y,w) mi.df mi.logical mi.factor mi.numeric x y w 1 FALSE B 5 1 2.4119674 1.5 2 FALSE A 11 2 0.6519663 2.0 3 TRUE B 11 3 1.2367506 2.5 4 FALSE A 6 4 4.8522928 3.0 5 TRUE B 7 5 4.1885153 3.5 6 FALSE A 3 6 7.6435818 4.0 7 FALSE B 7 7 7.5932973 4.5 8 FALSE B 8 8 5.5866054 5.0 9 TRUE A 7 9 2.8659266 5.5 10 FALSE A 9 10 5.2355681 6.0 >
Una vez ledos los datos, para ver los nombres de las variables se puede usar la funcin names(). Esta misma funcin permite asignar (o cambiar) los nombres: > names(datos) [1] caso,edad,sexo,peso,talla > names(datos)<- c(Caso,Edad,Sexo,Peso,Talla) > names(datos) [1] Caso,Edad,Sexo,Peso,Talla
Para seleccionar una variable concreta podemos usar su nombre con la sintasix data.frame$variable. Por ejemplo para seleccionar la variable Sexo de datos se usa: > datos$Sexo [1] Dona Home Dona Home Home Home Dona Dona Home Home Levels: Dona Home Para extraer elementos de una data frame se emplea la misma estrategia que con una matriz. Hay que indicar las filas y columnas de inters. Para obtener la submatriz de las mujeres: > datos[datos$Sexo=="Dona",] Caso Edad Sexo Peso Talla 1 1 83 Dona 112 179 3 3 49 Dona 85 138 7 7 59 Dona 84 160 8 8 79 Dona 40 157 Para obtener las variables peso y talla del caso 7: > datos[datos$Caso==7,c("Peso","Talla")] Peso Talla 7 84 160
24 120
3. Las funciones max(x) y min(x) seleccionan el mayor y menor valor de los elementos del vector x, respectivamente. > min(datos$Talla) [1] 138 4. La funcin range(x) devuelve c(min(x), max(x)). > range(datos$Talla) [1] 138 193 5. Hay mltiples funciones estadsticas. Las ms sencillas son mean(x) que calcula la media de la muestra: sum(x)/length(x), y var(x) que calcula la varianza muestral: sum((xmean(x))^2)/(length(x)-1). Si x es una matriz nxp, var devuelve la matriz de covarianza pxp. > mean(datos$Peso) [1] 77.6 > sqrt(var(datos$Peso)) [1] 25.56126 > var(datos[,c("Peso","Talla")]) Peso Talla Peso 653.37778 57.64444 Talla 57.64444 226.62222 > 6. Para redondear el nmero de decimales hay una serie de funciones tiles: ceiling(x) floor(x) round(x, digits = 0) signif(x, digits = 6) trunc(x) #menor entero no menor que x #mayor entero no mayor que x #redondea a digits #selecciona un digits cifras significativas #trunca a la parte entera
7. Buscar duplicados y quedarse con casos sin duplicar. La funcin duplicated() devuelve T o F segn el valor del vector aparezca ms de una vez. La funcin unique() extrae los valores no repetidos de un vector. 8. Buscar valores perdidos (missings). La funcin is.na() devuelve T si un valor tiene asignado el cdigo NA. Para cambiar los valores NA por otro cdigo se puede emplear: > x[is.na(x)]<-999 9. Conversin de tipo de objeto. Las siguientes funciones fuerzan, siempre que sea posible la conversin de un objeto al tipo deseado: > z <- as.numeric(x) > z <- as.factor(x) > z <- as.ordered(x) > z <- as.character(x) > z <- as.data.frame(x)
> x<-sample(1:10) > x [1] 2 6 7 3 10 > sort(x) [1] 1 2 3 4 5 > order(x) [1] 7 1 4 9 6 > x[order(x)] [1] 1 2 3 4 5 >
5 6 2 6
1 7
9 8
9 10 8 5
3 10 7 8
9 10
Este ltimo mtodo es muy til si se quiere ordenar una data.frame. El primer elemento de los indices son las filas, y el segundo las columnas. Para indicar que queremos ver la data frame ordenada segn valores crecientes de la variable var podemos emplear: data[order(data$var),]. Por ejemplo, para ordenar datos por Peso: > datos[order(datos$Peso),] Caso Edad Sexo Peso Talla 8 8 79 Dona 40 157 9 9 30 Home 47 158 10 10 73 Home 65 161 2 2 46 Home 67 157 5 5 78 Home 75 173 6 6 69 Home 79 193 7 7 59 Dona 84 160 3 3 49 Dona 85 138 1 1 83 Dona 112 179 4 4 74 Home 122 156 > Para ordenar en sentido descendente se puede usar la funcin rev(), que cambia el orden: > datos[rev(order(datos$Peso)),]
imc 34.95521 27.18163 44.63348 50.13149 25.05931 21.20862 32.81250 16.22784 18.82711 25.07619
> joves [1] vell jove jove vell vell vell jove vell jove vell Levels: vell jove > cbind(datos,joves) Caso Edad Sexo Peso Talla imc joves 1 1 83 Dona 112 1.79 34.95521 vell 2 2 46 Home 67 1.57 27.18163 jove 3 3 49 Dona 85 1.38 44.63348 jove 4 4 74 Home 122 1.56 50.13149 vell 5 5 78 Home 75 1.73 25.05931 vell 6 6 69 Home 79 1.93 21.20862 vell 7 7 59 Dona 84 1.60 32.81250 jove 8 8 79 Dona 40 1.57 16.22784 vell 9 9 30 Home 47 1.58 18.82711 jove 10 10 73 Home 65 1.61 25.07619 vell
escalar x Matriz > 4*x [,1] [,2] [,3] [,4] [,5] [1,] 4 20 36 52 68 [2,] 8 24 40 56 72 [3,] 12 28 44 60 76 [4,] 16 32 48 64 80
Multiplicacin matricial > x %*% y [,1] [1,] 45 [2,] 50 [3,] 55 [4,] 60 > x %*% t(x) [,1] [,2] [,3] [,4] [1,] 565 610 655 700 [2,] 610 660 710 760 [3,] 655 710 765 820 [4,] 700 760 820 880 Valores propios > eigen(x %*% t(x))$values [1] 2.864414e+003 5.585784e+000 > max(eigen(x %*% t(x))$values) [1] 2864.414 > min(eigen(x %*% t(x))$values) [1] -3.315622e-013 Matriz diagonal > diag(c(1,2)) [,1] [,2] [1,] 1 0 [2,] 0 2 Matriz inversa > d_diag(c(1,2)) > solve(d) [,1] [,2] [1,] 1 0.0 [2,] 0 0.5 8.714195e-014 -3.315622e-013
Exploracin de datos
Tabulacin de frecuencias
Funcin: table() calcula frecuencias observadas para valor diferente del vector x o la combinacin de vectores x,y si se emplean varios argumentos: > x<-sample(c("Home","Dona"),size=50,replace=T) > y<-sample(c("Jove","Vell"),size=50,replace=T) > table(x) Dona Home 27 23 > table(y) Jove Vell 20 30 > table(x,y) Jove Vell Dona 12 15 Home 8 15
Resumen estadstico
Para variables cuantitativas ya se han descrito las funciones: mean(), median(), var(), min(), max(), range(), quantile(), cor(). La funcin summary() presenta un resumen: > edad<-rnorm(50,mean=55,sd=10) > summary(edad) Min. 1st Qu. Median Mean 3rd Qu. 30.41 46.32 53.16 53.86 61.99
Max. 81.07
Para variables categricas, si se han definido como factores, summary() calcula las frecuencias. > summary(as.factor(x)) Dona Home 27 23 Para obtener resmenes de una variable cuantitativa en funcin de las categoras de un factor se emplea la funcin tapply(). Los argumentos son tapply(variable, factor, funcin resumen), por ejemplo: > tapply(edad,x,mean) Dona Home 54.61110 52.97955 > > tapply(edad,x,summary) $Dona Min. 1st Qu. Median 35.23 46.42 55.68 $Home Min. 1st Qu. 30.41 46.66
Max. 81.07
Median 51.29
Max. 72.68
La funcin resumen se aplica a cada valor diferente del factor > tapply(edad,paste(x,y),mean) Dona Jove Dona Vell Home Jove Home Vell 46.17576 63.69531 46.42526 65.26884 Podemos crear nuestras funciones resumen personalizadas. Ms adelante se ver cmo programar en R: > tapply(edad,x,function(o){cbind(media=mean(o),d.e.=sqrt(var(o)),n=length(o))}) $Dona media d.e. n [1,] 54.6111 10.67709 27 $Home media d.e. n [1,] 52.97955 11.23648 23
Grficos
Histogramas de frecuencias: hist() Argumentos de inters: breaks= para definir el nmero de puntos de corte (define breaks+1 grupos) y probability=T para estandarizar el rea a 1. > hist(edad,breaks=3) La funcin general de grficos es plot(), que espera como primeros argumentos los vectores con coordenadas x e y. Hay muchas opciones para elaborar las grficas a gusto del usuario. Aqu mencionaremos algunas. Por defecto plot() genera un diagrama de dispersin de puntos:
> plot(x,y) Para una grfica de lneas: type=l y para que aparezcan puntos y lneas type=o. Tambin podemos hacer que aparezcan los ejes sin puntos para posteriormente aadirlos: type=n. Para aadir series se usan las funciones lines() o points(). > lines(x2,y2) > points(x3,y3) Otros parmetros para adaptar el plot: Lmites de los ejes: xlim=c(min,max), ylim=c(min,max). Ttulos y etiquetas: main=Titulo superior, sub=titulo inferior. Etiquetas de ejes: xlab=eje x, ylab=eje y. Como argumentos de inters se pueden pasar parmetros de definicin del tipo de lnea (lty=), grosor (lwd=) o color (col=), con nmeros que codifican las diferentes opciones. Ver help(par) para obtener una lista de los parmetros posibles. Para aadir texto: text(). El argumento pch= controla el tamao de la letra. > etiquetas<-c(A,B,C) > text(x,y,etiquetas, pch=2) Para dibujar una lnea recta: abline() > abline(a,b) > abline(h=c) > abline(v=c) # a es la ordenada en el origen y b la pendiente #una lnea horizontal de altura c #una lnea vertical en c
Para aadir una leyenda en una caja en posicin x,y: legend(). Como argumentos de inters se pueden pasar parmetros de definicin del tipo de lnea (lty=), grosor (lwd=) o color (col=) > legend(x,y,textos,lty=tipo.linea,lwd=grosor.linea,col=color.linea)
Modelos
El ajuste de modelos emplea funciones cuyo primer argumento es un objeto frmula que representa el modelo deseado segn los nombres de vectores. Las frmulas en R siguen la sintaxis: respuesta ~ expresin de covariables Por ejemplo para expresar un modelo de regresin lineal con "y" como respuesta (variable dependiente) y "x" como covariable (variable independiente) se usa la funcin lm(): > modelo.lineal <- lm(y ~ x) Otros ejemplos de frmulas vlidas: peso ~ talla + sexo + region peso ~ talla + sexo + talla:sexo peso ~ sexo - 1 peso ~ poly(talla,3) # modelo de regresin mltiple # modelo con interaccin equivale a peso ~ talla*sexo # modelo sin constante. Genera un coeficiente para cada categora de sexo # modelo que ajusta un polinomio de grado 3 a talla.
Otros argumentos de inters de la funcin lm() son: data= para indicar una data frame donde buscar los vectores de la frmula subset= para indicar una expresin lgica que defina una condicin que selecciona las observaciones que deben emplearse para el modelo. Por ejemplo, para seleccionar slo los hombres puede usarse: subset=(sexo=="hombre"). Los parntesis son opcionales
weights= para indicar un vector con pesos si se desea un modelo de regresin ponderada na.action= funcin que indica que debe hacerse con los valores NA (perdidos). Por defecto es na.omit, por lo que se realiza un anlisis con casos completos. Si se desea que el anlisis acabe con un mensaje de error si hay NAs debe ponerse na.action=na.fail
Modelos lineales generalizados La funcin para estos modelos es glm(). Adems de los anteriores argumentos, precisa uno ms que define la familia del modelo. family= normal | binomial | poisson | gamma cada familia basada en una distribucin de probabilidad del error tiene una transformacin asociada. Otras transformaciones vlidas pueden indicarse entre parntesis: normal identity binomial logistic poisson log gamma inverse Exploracin de los resultados Normalmente el resultado de ajustar un modelo con lm() o glm() se asigna a un objeto que es de clase lm o glm respectivamente. Las siguientes funciones permiten explorar diferentes aspectos del modelo: print() summary() coef() resid() fitted() deviance() anova() predict() plot()
Anlisis de la supervivencia
Estimacin de la funcin de supervivencia. Se precisan dos variables, una con el tiempo de seguimiento y otra con el estado del individuo al final de ese tiempo, codificada 0:censura / 1:evento. Para estimar la supervivencia global se emplea la funcin survfit() que genera un objeto con metodos print(), summary() y plot() especificos: > > > > s0<- survfit(Surv(tiempo,estado)~1) s0 summary(s0) plot(s0)
Para eliminar los intervalos de confianza del plot se puede usar el argumento conf.int=F. La grfica de la transformacin log(-logS) vs logT se obtiene con el argumento fun='cloglog'. Para analizar la supervivencia segn categoras de variables: > s.sexo<- survfit(Surv(tiempo,estado)~sexo) La funcin survdiff() calcula el estadstico logrank: > d.sexo<- survdiff(Surv(tiempo,estado)~sexo) El argumento rho=1 cambia la ponderacin de las observaciones y calcula el test de Peto.
Modelos de Cox > c.sexo<- coxph(Surv(tiempo,estado)~sexo) > c.sexo > summary(c.sexo) Para evaluar la proporcionalidad en los riesgos: > z.sexo<-cox.zph(c.sexo) > z.sexo > plot(z.sexo, resid=F)
Modelos paramtricos > w.sexo<- survregv(tiempo,estado)~sexo,dist='weibull') > w.sexo > summary(w.sexo) Los nombres de las distribuciones disponibles son: weibull, exponential, lognormal, gaussian, loglogistic Hay mtodos summary() y anova()