+ All Categories
Home > Documents > Manual_R

Manual_R

Date post: 20-Sep-2015
Category:
Upload: daniel-eduardo-trejos
View: 5 times
Download: 0 times
Share this document with a friend
Description:
Software_Estadistica
Popular Tags:
33
R para el absolutamente inexperto Mario Alfonso Morales R 1 Abril de 2006 1 Profesor asistente, departamento de Matem´ aticas y Estad´ ıstica, Universidad de C´ ordoba
Transcript
  • R para el absolutamente inexperto

    Mario Alfonso Morales R 1

    Abril de 2006

    1Profesor asistente, departamento de Matematicas y Estadstica, Universidad de Cordoba

  • Indice general

    1. Preparacion del sistema 2

    1.1. Instalacion de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2. Instalacion de Tinn-R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3. Configuracion de R Gui . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.4. Directorio de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    2. Matrices 5

    2.1. Creacion de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1.1. A partir de un vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1.2. Matrices especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.1.3. Creacion de matrices a partir de un data frame . . . . . . . . . . . . . . . . 6

    2.2. Funciones para manipulacion de matrices . . . . . . . . . . . . . . . . . . . . . . . . 72.2.1. Valores y vectores propios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2.2. Descomposicion en valores singulares . . . . . . . . . . . . . . . . . . . . . . 10

    2.3. Operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.4. Sistema de indexacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.5. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    3. Lectura y escritura de archivos de datos 16

    3.1. Lectura dearchivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.2. Escritura de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    4. Analisis preliminar de datos 20

    4.1. Estadsticas de resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.2. Graficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    5. Ajuste de modelos de regresion usando la funcion lm() 24

    5.1. Analisis de regresion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245.1.1. Intervalos de confianza y prediccion . . . . . . . . . . . . . . . . . . . . . . . 26

    5.2. Diagnostico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285.2.1. Normalidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    5.3. Modelos de analisis de varianza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    1

  • Captulo 1

    Preparacion del sistema

    En esta seccion se explica como instalar R y el editor Tinn-R.

    1.1. Instalacion de R

    En la carpeta R\instalador\Windows del CD adjunto se encuentra el archivo R-2.2.0-win32.exe.De doble click sobre este archivo, eso lanzara la instalacion de R.

    1. En la primera ventana que aparece se pide que seleccione el idioma que usara durante lainstalacion, desafortunadamente no hay (aun) la opcion Espanol as que que se deja la opcionpor defecto (English) y se da click en OK

    2. Click en Next

    3. Seleccione I accept the agreement y click en Next

    4. Click en Next

    5. Click en Next

    6. Click en Next

    7. Click en Next

    Terminado el proceso de copia de los archivos encontrara el icono de R en el escritorio, tambien enInicio>Todos los programas encontrara un acceso a R, a la ayuda y un acceso para desinstalarlocuando lo desee.

    1.2. Instalacion de Tinn-R

    Tinn-R es un editor especial para escribir codigo de R. Aunque puede usarse cualquier editor detexto, tres caractersticas principales hacen atractivo usar Tinn-R como editor de guiones para R

    Resaltado de sintaxis de codigo R.

    Menu especficos y barra de herramientas que interactuan con R.

    2

  • Es gratuito (distribuido bajo GPL, GNU Public License) y esta disponible para los sistemasoperativos Windows

    En la carpeta \R\GUIs\SciViews del CD adjunto se encuentra el archivo Tinn-R_1.18.1.5_setupde doble click sobre ese archivo para iniciar la instalacion.

    1. Click en Next

    2. Seleccione I accept the agreement y click en Next

    3. Click en Next

    4. Click en Next

    5. Click en Next

    6. Click en Install

    Terminado el proceso de copia de los archivos encontrara el icono de Tinn-R en el escritorio,tambien en Inicio>Todos los programas encontrara un acceso a Tinn-R, a la ayuda en linea yun acceso para la desinstalacion cuando lo desee.

    1.3. Configuracion de R Gui

    La interfaz grafica (consola) de R tiene dos modos de operacion: Single (SDI) o Multiple (MDI)Windows, Tinn-R esta disenado para trabajar con R en el modo SDI y R se instala por defectoen el modo MDI, as que configuraremos a R para que siempre que inicie lo haga en el modo deventana simple, si no se hace de esa forma la barra de menu de interaccion de Tinn-R con R estaradesactivada y sera imposible enviar ordenes a la consola. Para colocar R en el modo SDI siga lossiguientes pasos:

    1. En la consola de R, en la barra de menu haga Click en Edit, escoja GUI preferences...

    2. En la ventana que aparece, en la primera lnea, donde dice Single or multiple windowshaga click en el boton SDI.

    3. Click en Save

    4. En la ventana que aparece, en la parte de arriba, donde dice guardar en ubique la siguienteruta C:\Archivos de programa\R\R-2.2.0\etc (como lo hara en cualquier aplicacionbajo Windows) 1

    5. Una vez en esa ruta de click sobre el archivo Rconsole y de click en guardar.

    6. R le pedira que confirme si desea reemplazar un archivo que ya existe, de click en s.

    7. Click en OK.

    Una vez guardado el cambio de configuracion es necesario salir de R y volver a iniciarlo. Si todose hizo conforme las instrucciones, R estara corriendo en el modo SDI y la R toolbar de Tinn-Restara iluminada.

    1Esta ruta puede variar de acuerdo a su sistema operativo, la que se da aqu es tpica de Windows XP

    3

  • 1.4. Directorio de trabajo

    Una caracterstica que diferencia a R de otros paquetes estadsticos es lo que se conoce comodirectorio de trabajo. El directorio de trabajo en una carpeta en el disco duro donde R guardaralos datos y funciones definidas en una section de trabajo, cuando se le pida a R que lea un archivode datos o un script este buscara por defecto en el directorio de trabajo definido en ese momentosi el archivo que se intenta abrir no se encuentra en el directorio de trabajo actual, R enviara unmensaje de error a menos que se le indique explcitamente la ruta donde se encuentra el archivo.Es recomendable que cuando se inicia un nuevo proyecto de analisis se cree un directorio para eseproyecto y se coloquen en el todos los archivos del proyecto.Para conocer el directorio de trabajo actual se usa el comando

    > getwd()

    para cambiar el directorio de trabajo actual al directorio InicioR que depende del disco duro C:se usa la funcion setwd() , aunque eso tambien se puede hacer via mouse en el menu File>Changedir ...

    4

  • Captulo 2

    Matrices

    2.1. Creacion de matrices

    2.1.1. A partir de un vector

    Suponga que queremos crear (definir) la matriz en R

    A =

    3 1 22 4 51 0 4

    El codigo R para hacerlo es

    > A A A A

  • > b b

    [,1]

    [1,] -5

    [2,] 3

    [3,] 1

    Ejercicio: Ingrese la matriz

    X =

    1 1 21 2 41 1 21 3 6

    2.1.2. Matrices especiales

    Suponga que necesitamos una matriz de 3 4 cuyos elementos sean todos unos, eso se logra en Ras:

    > U I5 d D D1 data(women)

    > W head(W)

    1Para tener un listado y una corta descripcion de los marcos de datos disponibles en el paquete (librera) datasetsde R, use el comando data(), si quiere un listado de los marcos de datos de ejemplo de todas las libreras instaladasuse data(package = .packages(all.available = TRUE))

    6

  • height weight

    1 58 115

    2 59 117

    3 60 120

    4 61 123

    5 62 126

    6 63 129

    2.2. Funciones para manipulacion de matrices

    En esta seccion se presenta una serie de funciones de uso frecuente para calculos con matrices.

    > nrow(X)

    [1] 4

    > ncol(X)

    [1] 3

    > t(X)

    [,1] [,2] [,3] [,4]

    [1,] 1 1 1 1

    [2,] 1 2 1 3

    [3,] 2 4 2 6

    > det(A)

    [1] 43

    Una funcion de uso frecuente cuando manipulamos matrices es la funcion solve() que permitecalcular la inversa de una matriz invertible y la solucion de sistemas de ecuaciones lineales.

    > solve(A)

    [,1] [,2] [,3]

    [1,] 0.372093 0.093023 -0.30233

    [2,] -0.069767 0.232558 -0.25581

    [3,] -0.093023 -0.023256 0.32558

    > solve(A, b)

    [,1]

    [1,] -1.88372

    [2,] 0.79070

    [3,] 0.72093

    7

  • Nuevamente, observese como la funcion solve() tiene dos usos, dependiendo del argumento, si solole entrega la matriz invertible A, la funcion regresa su inversa, si se entrega una matriz invertibley un vector b, la funcion regresa A1b, la solucion al sistema. Tenga en cuenta que si la matriz noes invertible se genera un error.Si queremos ver la respuesta en formato de fraccionarios se puede usar la funcion fractions() dela librera MAS

    > library(MASS)

    > fractions(solve(A))

    [,1] [,2] [,3]

    [1,] 16/43 4/43 -13/43

    [2,] -3/43 10/43 -11/43

    [3,] -4/43 -1/43 14/43

    El programa basico R no tiene una funcion que calcule la inversa de Moore Penrose, sin embargo unade las ventajas de R es que el usuario puede programar sin mucho esfuerzo sus propias funciones.En este caso, por ser un curso introductorio, no trataremos la definicion de funciones. Calcularemosla inversa de Moore Penrose usando la funcion ginv( ) de la librera MASS2

    > MPA crossprod(X)

    [,1] [,2] [,3]

    [1,] 4 7 14

    [2,] 7 15 30

    [3,] 14 30 60

    > y crossprod(X, y)

    [,1]

    [1,] 9

    [2,] 14

    [3,] 28

    crossprod(X) regresa la matriz XX y crossprod(X,y) regresa XyEn ocasiones se requiere pegar dos matrices, una debajo de la otra o una al lado de la otra

    > U cbind(U, W)

    2En el ejemplo inmediatamente anterior cargamos a la memoria de R la librera MASS, as que en realidad no esnecesario volver a cargarla. Tenga en cuenta que si abandona R guardando el espacio de trabajo, solo se guardanlos objetos creados, la informacion sobre las libreras usadas en la sesion de trabajo no se guarda, as que cuandoregrese a R debera volver a cargar todas las libreras necesarias

    8

  • Atencion: Las matrices a unir de esta forma deben tener el mismo numero de filas. Sin embargoobserve el siguiente ejemplo

    > F cbind(F, W)

    De esta forma R replica el vector F tantas veces como sea necesario hasta alcanzar la longitud dela matriz W, esa opcion es util para crear factores en diseno de experimentos, por ejemplo si lascolumnas de W son datos de un experimento con tres tratamientos y cinco bloques podemos crear elfactor tratamiento y el factor bloques, y colocarlos junto con las columnas de W en un data framesin tener que introducirlos manualmente

    > Trat Bloq D datos rbind(A, X)

    [,1] [,2] [,3]

    [1,] 3 -1 2

    [2,] 2 4 5

    [3,] 1 0 4

    [4,] 1 1 2

    [5,] 1 2 4

    [6,] 1 1 2

    [7,] 1 3 6

    2.2.1. Valores y vectores propios

    La funcion eigen() calcula los valores y vectores propios de una matriz cuadrada

    > A1 eigA1 eigA1

    $values

    [1] 1.5 0.5

    $vectors

    [,1] [,2]

    [1,] 0.7071 0.7071

    [2,] 0.7071 -0.7071

    3Para obtener ayuda sobre la funcion data.frame() ejecute la orden help(data.frame)

    9

  • Aqu se muestra una caracterstica importante de muchas funciones en R. La funcion eigen()regresa un objeto de R que se conoce como una lista, de esa forma eigA es una lista que contienelos valores (values) y vectores (vectors) propios de A. Para recuperar el objeto (values) queesta en esta lista usamos

    > eigA1$values

    Analogamente para recuperar el objeto (vectors), en este caso una matriz cuyas columnas son losvectores propios de A usamos

    > eigA1$vectors

    [,1] [,2]

    [1,] 0.7071 0.7071

    [2,] 0.7071 -0.7071

    2.2.2. Descomposicion en valores singulares

    Para la descomposicion em valores singulares de una matriz usamos la funcion svd() as:

    > dvs dvs$d

    [1] 8.8486e+00 8.3812e-01 1.1530e-16

    > dvs$u

    [,1] [,2] [,3]

    [1,] -0.27057 0.617524 0.57949

    [2,] -0.51785 0.067532 -0.69936

    [3,] -0.27057 0.617524 -0.22981

    [4,] -0.76512 -0.482460 0.34968

    > dvs$v

    [,1] [,2] [,3]

    [1,] -0.20615 0.978521 0.00000

    [2,] -0.43761 -0.092192 -0.89443

    [3,] -0.87522 -0.184384 0.44721

    la funcion svd() crea una lista de tres objetos, el vector d, que es la diagonal de la matriz diagonalD, la matriz U tal que UU = I y la matriz V tal que VV = I para las cuales se verifica queX = UDV

    10

  • 2.3. Operaciones

    Las operaciones suma, resta, multiplicacion de una matriz por un escalar, se hacen de la manerausual, solo hay que tener en cuenta que el operador * se usa para la multiplicacion elemento a ele-mento (producto de hamadar), para la multiplicacion usual de matrices utilizamos el operador %* %.Veamos algunos ejemplos.

    > B A + B

    [,1] [,2] [,3]

    [1,] 4 3 9

    [2,] 4 9 13

    [3,] 4 6 13

    > A - B

    [,1] [,2] [,3]

    [1,] 2 -5 -5

    [2,] 0 -1 -3

    [3,] -2 -6 -5

    > A * B

    [,1] [,2] [,3]

    [1,] 3 -4 14

    [2,] 4 20 40

    [3,] 3 0 36

    > A/B

    [,1] [,2] [,3]

    [1,] 3.00000 -0.25 0.28571

    [2,] 1.00000 0.80 0.62500

    [3,] 0.33333 0.00 0.44444

    > 5 * A

    [,1] [,2] [,3]

    [1,] 15 -5 10

    [2,] 10 20 25

    [3,] 5 0 20

    > A %*% B

    [,1] [,2] [,3]

    [1,] 7 19 31

    [2,] 25 58 91

    [3,] 13 28 43

    11

  • > A^2

    [,1] [,2] [,3]

    [1,] 9 1 4

    [2,] 4 16 25

    [3,] 1 0 16

    > sqrt(A)

    [,1] [,2] [,3]

    [1,] 1.7321 NaN 1.4142

    [2,] 1.4142 2 2.2361

    [3,] 1.0000 0 2.0000

    2.4. Sistema de indexacion

    Veremos como acceder a los elementos, como recuperar una submatriz y como cambiar los valoresde las entradas de una matriz

    > X[2, 3]

    [1] 4

    > X[2, ]

    [1] 1 2 4

    > X[, 3]

    [1] 2 4 2 6

    > X[1:3, ]

    [,1] [,2] [,3]

    [1,] 1 1 2

    [2,] 1 2 4

    [3,] 1 1 2

    > X[1:2, 1:2]

    [,1] [,2]

    [1,] 1 1

    [2,] 1 2

    > M

  • 2.5. Ejemplos

    A continuacion se presentan algunos ejemplos concretos donde se usa lo aprendido hasta el mo-mento.

    1. Ahora estamos en capacidad de calcular una inversa generalizada de cualquier matriz nonula, usando el algoritmo propuesto por Searle 1971, paginas 5 y 6.

    Calcularemos una inversa generalizada de la matriz XX

    > XtX qr(XtX)$rank

    [1] 2

    > M G G[1:2, 1:2] GX fractions(GX)

    [,1] [,2] [,3]

    [1,] 15/11 -7/11 0

    [2,] -7/11 4/11 0

    [3,] 0 0 0

    2. Suponga el siguiente conjunto de datos (tomado de Lopez 2005 )

    T1 T2 T3

    2 4 63 2 72 5 8

    caracterizandose el modelo yij = + i + eij , i = 1, 2, 3 y j = 1, 2, 3

    a) Determine dos soluciones de las ecuaciones normales.

    b) Construya la base de funciones estimables.

    c) Proponga una funcion estimable, calcule su MELI y la varianza del MELI.

    d) Descomponga la suma de cuadrados en SCTot = SC() + SC() + SCError

    Solucion:

    a) Primero construimos la matriz de diseno 4 X

    4Notese el uso de lo funcion kronecker() para realizar el producto de Kronecker Ia 1b

    13

  • > a b Ia Ub Uab X1 X XtX Y XtY M G G[2:4, 2:4] Gx fractions(Gx)

    [,1] [,2] [,3] [,4]

    [1,] 0 0 0 0

    [2,] 0 1/3 0 0

    [3,] 0 0 1/3 0

    [4,] 0 0 0 1/3

    > B1 H H - diag(nrow(Gx %*% XtX))

    [,1] [,2] [,3] [,4]

    [1,] -1 0 0 0

    [2,] 1 0 0 0

    [3,] 1 0 0 0

    [4,] 1 0 0 0

    b) La matriz H calculada en el inciso anterior contiene la base de las funciones estimables.las funciones estimables basicas de este modelo son + 1, + 2, + 3

    c) La funcion 12 es de interes porque estima la diferencia de efectos de los tratamientos1 y 2 ademas es estimable porque se puede obtener como una combinacion lineal (CL)de estimables as + 1 (+ 2) + 0(+ 3) para calcular su MELI (q

    0) en R y lavarianza del MELI procedemos as:

    5Tambien se puede usar t(X) %* %X para calcular XX

    14

  • > q meli fractions(meli)

    [,1]

    [1,] -4/3

    > varmeli fractions(varmeli)

    [,1]

    [1,] 2/3

    d) Para la descomposicion de la suma de cuadrados procedemos as

    > P1 P12 SCu SCtrat SCerror SCtotNC

  • Captulo 3

    Lectura y escritura de archivos de datos

    En este captulo aprenderemos las funciones basicas de R para la lectura y escritura de archivosde datos. El formato basico de los archivos a importar en R es el texto simple, este es aceptablepara conjuntos de datos pequenos o de mediana escala. Aunque R puede leer archivos de Excel yotros paquetes estadsticos como SAS, SPSS, S-PLUS, Stata y Mimitab, 1 aqu solo estudiaremoslas funciones read.table(), read.csv2(), write.table() y write.csv2()

    3.1. Lectura dearchivos

    Para ilustrar el uso de la funcion read.table() leeremos el archivo survival.txt. Los datoscorresponden a la tabla D.1 del apendice D del libro de Hocking 2003 y son analizados en elcaptulo 4.

    > surv head(surv)

    V1 V2 V3 V4 V5 V6 V7

    1 1 6.7 62 81 2.59 200 2.3010

    2 2 5.1 59 66 1.70 101 2.0043

    3 3 7.4 57 83 2.16 204 2.3096

    4 4 6.5 73 41 2.01 101 2.0043

    5 5 7.8 65 115 4.30 509 2.7067

    6 6 5.8 38 72 1.42 80 1.9031

    Notese que ante la ausencia de nombres de las columnas del archivo, R automaticamente genera losnombres V1 . . . V7. Hay varias formas de asignar nombres a las columnas, una de ellas es usandola funcion colnames():

    > nombres colnames(surv) head(surv)

    1Los archivos de Excel se pueden leer directamente usando la librera RODBC. En el CD, en la carpetaR>ProgramasR>Modelos se encuentra el archivo Importa-excel.R que ilustra como usar esta librera para im-portar archivos en formato de Excel. Para los otros formatos se recomienda la librera foreign, el lector interesadopuede estudiar R-data.pdf que se encuentra en el menu Help>Manuals (in PDF)

    16

  • case clot prog enz liv time ltime

    1 1 6.7 62 81 2.59 200 2.3010

    2 2 5.1 59 66 1.70 101 2.0043

    3 3 7.4 57 83 2.16 204 2.3096

    4 4 6.5 73 41 2.01 101 2.0043

    5 5 7.8 65 115 4.30 509 2.7067

    6 6 5.8 38 72 1.42 80 1.9031

    Otra forma es usando la opcion col.names de la funcion read.table() as:

    > surv nombresfilas surv head(surv)

    case clot prog enz liv time ltime

    Fila 1 1 6.7 62 81 2.59 200 2.3010

    Fila 2 2 5.1 59 66 1.70 101 2.0043

    Fila 3 3 7.4 57 83 2.16 204 2.3096

    Fila 4 4 6.5 73 41 2.01 101 2.0043

    Fila 5 5 7.8 65 115 4.30 509 2.7067

    Fila 6 6 5.8 38 72 1.42 80 1.9031

    La funcion paste() se ha usado para crear los nombres de las filas, ella crea un vector de caracteresque contiene Fila 1, Fila 2, . . . , Fila 54. Si los nombres de filas son, por ejemplo, nombresde personas, tendremos que crear un vector con esos nombres, seria algo como nombresfilas eje74 head(eje74)

    V1 V2 V3 V4

    1 CASE YEAR SEX MATH

    2 1 67 1 514

    3 2 68 1 512

    4 3 69 1 513

    5 4 70 1 509

    6 5 71 1 507

    Notese que en este caso el archivo EX7-4.txt tiene los nombres de las columnas en la primera filay R esta tomando esta como parte de los datos, es mas, el contenido de la primera fila determinael formato que R asigna a la columna y por eso esta tomando todas las columnas como de tipofactor. Para evitar ese problema hay que indicarle a R que el archivo tiene en la primera fila losnombres de las columnas, eso se consigue con la opcion header=TRUE

    17

  • > eje74 head(eje74)

    CASE YEAR SEX MATH

    1 1 67 1 514

    2 2 68 1 512

    3 3 69 1 513

    4 4 70 1 509

    5 5 71 1 507

    6 6 72 1 505

    Como se menciono en la introduccion de esta seccion, cuando se tienen los datos en un archivo deExcel y queremos importarlos, R no tiene una funcion que lea directamente el archivo .xls, parahacerlo tenemos dos opciones; usar la librera RODBC (opcion que no explicaremos en este manual),o guardar el archivo de Excel como SCV (delimitado por comas) y usar la funcion read.scv().En el siguiente ejemplo leeremos el archivo ejer4.csv que contiene los datos del ejercicio 4 de latarea 3

    > ejer4 head(ejer4)

    X tiempo momento resp

    1 1 1 0 95

    2 2 2 0 93

    3 3 3 0 93

    4 4 4 0 91

    5 5 5 0 90

    6 6 6 0 88

    Observe, R esta leyendo la primera columna del archivo (que son los numeros de las filas) comouna variable, y ademas le esta colocando el nombre X, para evitar eso usamos la opcion row.namesde la siguiente forma

    > ejer4 surv$ltime

  • Ahora el archivo surv tiene una nueva columna, con el nombre ltime, que contiene el logaritmode time.Ahora procedemos a guardar ese cambio en el disco duro, en formato de texto plano, para futuralectura con R, para no sobreescribir el archivo original, usamos survival2.txt como nombre delnuevo archivo.

    > write.table(surv, "survival2.txt")

    Luego de ejecutar esta orden, en su directorio de trabajo debe estar el archivo survival2.txt.Una buena opcion es guardar el nuevo archivo en formato SCV, de esa forma, si queremos cargarlocon Excel no tendremos inconvenientes.

    > write.csv2(surv, "survival2.csv")

    Ejercicio: Leer 2 el archivo ejercicio4.txt, y guardelo en el objeto ejer4. Este archivo contienelos datos del ejercicio 4 de la tarea 3.

    > ejer4

  • Captulo 4

    Analisis preliminar de datos

    En esta seccion estudiaremos algunas funciones utiles para el analisis inicial de los datos, talescomo summary(), plot(), hist(), entre otras. Para los ejemplos usaremos los datos ledos en laseccion anterior.

    4.1. Estadsticas de resumen

    Primero estudiaremos la funcion summary(), la cual entrega las estadsticas de resumen basicas.

    > summary(ejer4)

    tiempo momento resp

    Min. : 1.00 Min. :0.00 Min. : 3.0

    1st Qu.: 5.75 1st Qu.:0.00 1st Qu.:39.5

    Median :10.50 Median :0.00 Median :81.5

    Mean :10.50 Mean :0.45 Mean :64.4

    3rd Qu.:15.25 3rd Qu.:1.00 3rd Qu.:88.5

    Max. :20.00 Max. :1.00 Max. :95.0

    Notese que la variable momento es una variable de clasificacion: toma el valor cero si tiempo esmenor o igual a 11 y uno en otro caso, por tanto no tiene sentido calcular esas estadsticas. Lo queocurre es que no se le ha indicado a R que momento es un factor, eso es lo que haremos ahora

    > ejer4$momento summary(ejer4)

    tiempo momento resp

    Min. : 1.00 Antes :11 Min. : 3.0

    1st Qu.: 5.75 Despues: 9 1st Qu.:39.5

    Median :10.50 Median :81.5

    Mean :10.50 Mean :64.4

    3rd Qu.:15.25 3rd Qu.:88.5

    Max. :20.00 Max. :95.0

    20

  • Si queremos las estadsticas de resumen para cada momento usamos la funcion by()

    > attach(ejer4)

    > by(ejer4, momento, summary)

    momento: Antes

    tiempo momento resp

    Min. : 1.0 Antes :11 Min. :81.0

    1st Qu.: 3.5 Despues: 0 1st Qu.:85.5

    Median : 6.0 Median :88.0

    Mean : 6.0 Mean :88.2

    3rd Qu.: 8.5 3rd Qu.:92.0

    Max. :11.0 Max. :95.0

    ------------------------------------------------------------

    momento: Despues

    tiempo momento resp

    Min. :12 Antes :0 Min. : 3.0

    1st Qu.:14 Despues:9 1st Qu.:16.0

    Median :16 Median :32.0

    Mean :16 Mean :35.3

    3rd Qu.:18 3rd Qu.:55.0

    Max. :20 Max. :75.0

    La orden attach() adjunta el data.frame ejer4 a la ruta de busqueda de R eso significa que Rbuscara dentro de la base de datos ejer4 cuando se le pida evaluar una funcion. As que los objetosdentro de la base de datos seran accesados con solo dar su nombre; si no se hace de esa formaal ejecutar la siguiente orden R lanzara un mensaje de error informando que no puede encontrarmomento. Cuidado: Si al adjuntar ejer4 tenamos algun objeto con el mismo nombre de una desus columnas, ese objeto es enmascarado, cuando eso ocurre R manda un mensaje de advertencia1.Veamos otras funciones utiles para resumir datos.

    > var(ejer4[, c(1, 3)])

    tiempo resp

    tiempo 35.00 -174.63

    resp -174.63 1007.83

    > cor(ejer4[, c(1, 3)])

    tiempo resp

    tiempo 1.00000 -0.92981

    resp -0.92981 1.00000

    La primera orden entrega la matriz de varianzas covarianzas de las columnas 1 y 3 de ejer4,recuerde que la columna 2 es un factor y no tiene sentido calcular su varianza, es mas si no lohacemos de esa forma se genera un error porque R no sabra que hacer con el factor. La funcioncor() regresa la matriz de correlaciones.Si queremos calcular esas matrices pero para cada nivel de momento hacemos as:

    1Para obtener el resumen para cada nivel de momento sin usar attach(), modifique la orden by() as:by(ejer4,ejer4$momento,summary)

    21

  • > by(ejer4[, c(1, 3)], momento, var)

    momento: Antes

    tiempo resp

    tiempo 11.0 -15.100

    resp -15.1 21.364

    ------------------------------------------------------------

    momento: Despues

    tiempo resp

    tiempo 7.500 -68.875

    resp -68.875 638.750

    > by(ejer4[, c(1, 3)], momento, cor)

    momento: Antes

    tiempo resp

    tiempo 1.00000 -0.98502

    resp -0.98502 1.00000

    ------------------------------------------------------------

    momento: Despues

    tiempo resp

    tiempo 1.0000 -0.9951

    resp -0.9951 1.0000

    4.2. Graficos

    Estudiaremos las funciones plot(), hist() ,boxplot() entre otras. Para los ejemplos usaremos eldata frame surv que cargamos a la memoria de R en la section anterior y ejer4.

    > plot(surv[, c(2, 3, 4, 5, 6)])

    para realizar el grafico solo usamos de la columna 2 a la 6 ya que la primera tiene los indices y laultima es el logaritmo de time. Si queremos centrar nuestro analisis en las variables time y livpodemos hacer un grafico solo con ellas dos.

    > attach(surv)

    > plot(liv, time)

    22

  • 1 2 3 4 5 6

    200

    400

    600

    800

    liv

    time

    si queremos un histograma de time, usamos la funcion hist()

    > hist(time, prob = TRUE)

    por defecto la funcion hist() crea un histograma de frecuencias absolutas, la opcion prob=TRUEse usa para pedirle un histograma de frecuencias relativas. Notese que la barra mas alta sobrepasael limite superior del eje y y no se ve bien, para evita eso usamo la opcion ylim as

    > hist(time, prob = TRUE, ylim = c(0, 0.005))

    > lines(density(time))

    para obtener el boxplot de la variable respuesta (resp) del data ejer4 procedemos as

    > boxplot(resp)

    si queremos el boxplot para cada nivel de momento lo hacemos as

    > boxplot(resp ~ momento)

    23

  • Captulo 5

    Ajuste de modelos de regresion usando

    la funcion lm()

    La funcion lm() de R se usa para ajustar modelos lineales, bien sean modelos de regresion (rangocompleto) o modelos de analisis de varianza, en esta seccion ilustraremos el uso de esta importantefuncion.

    5.1. Analisis de regresion

    Usaremos el data frame surv que cargamos a la memoria en la seccion 3.1. Siguiendo el ejemplodesarrollado en el captulo 4 de Hocking, ajustaremos el modelo

    time = 0 + 1clot+ 2prog + 3enz + 4liv + e

    > reg summary(reg)

    Call:

    lm(formula = time ~ clot + prog + enz + liv, data = surv)

    Residuals:

    Min 1Q Median 3Q Max

    -80.5 -34.7 -15.2 20.6 323.2

    Coefficients:

    Estimate Std. Error t value Pr(>|t|)

    (Intercept) -621.598 64.800 -9.59 7.9e-13

    clot 33.164 7.017 4.73 2.0e-05

    prog 4.272 0.563 7.58 8.4e-10

    enz 4.126 0.511 8.07 1.5e-10

    liv 14.092 12.525 1.13 0.27

    24

  • Residual standard error: 61.1 on 49 degrees of freedom

    Multiple R-Squared: 0.837, Adjusted R-squared: 0.823

    F-statistic: 62.8 on 4 and 49 DF, p-value: plot(reg)

    Para obtener los residuales y los valores ajustados

    > pred resi anova(reg)

    Analysis of Variance Table

    Response: time

    Df Sum Sq Mean Sq F value Pr(>F)

    clot 1 155274 155274 41.65 4.7e-08

    prog 1 305511 305511 81.95 4.9e-12

    enz 1 470760 470760 126.28 3.6e-15

    liv 1 4719 4719 1.27 0.27

    Residuals 49 182667 3728

    La funcion anova() puede usarse para comparar modelos; dados varios predictores uno podrapreguntarse si todos son necesarios en el modelo. Consideremos un modelo grande y un modelomas pequeno que consiste de un subconjunto de los predictores que estan en , si no hay muchadiferencia en el ajuste, preferiramos el modelo pequeno, por el principio de parsimonia.Estamos frente al problema de probar la hipotesis H0 : el modelo pequeno es apropiado contra laalternativa Ha : el modelo grande es el apropiado. El estadstico de prueba para esta hipotesis es

    F =(SCE SCE)/(p q)

    SCE/(n p) Fpq,np

    p es el numero de parametros en y q el numero de parametros en . Rechazamos la hipotesisnula si F > Fpq,np, o equivalentemente si el p-valor de la prueba es mas pequeno que el nivel sesignificacion elegido.A manera de ejemplo, queremos probar si se justifica tener la variable liv en el modelo, la im-plementacion de esta prueba en R es de la siguiente forma: primero ajustamos el modelo pequeno

    25

  • > reg2 anova(reg2, reg)

    Analysis of Variance Table

    Model 1: time ~ clot + prog + enz

    Model 2: time ~ clot + prog + enz + liv

    Res.Df RSS Df Sum of Sq F Pr(>F)

    1 50 187385

    2 49 182667 1 4719 1.27 0.27

    5.1.1. Intervalos de confianza y prediccion

    Para calcular intervalos de confianza individuales para los parametros del modelo usamos la funcionconfint()

    > confint(reg)

    2.5 % 97.5 %

    (Intercept) -751.8189 -491.376

    clot 19.0621 47.266

    prog 3.1397 5.404

    enz 3.0985 5.153

    liv -11.0790 39.262

    Por defecto la funcion calcula intervalos de confianza al 95% si queremos otro nivel de confianza,usamos la opcion level

    > int library(ellipse)

    > plot(ellipse(reg, c(2, 3), level = 0.99), type = "l")

    > points(coef(reg)[2], coef(reg)[3], pch = 18)

    > abline(v = int[2, ], lty = 2)

    > abline(h = int[3, ], lty = 2)

    1La librera ellipse no hace parte del paquete estandar de R, por tanto hay que instalarla manualmente. En elCD, en la carpeta R, se encuentra la carpeta libreras donde podra encontrar el archivo ellipse-0.3-2.zip. Parainstalarla, en el menu de R de click en packages y luego en install.packages from local files busque la ruta,seleccione el archivo y click en abrir

    26

  • 10 20 30 40 50

    2.5

    3.0

    3.5

    4.0

    4.5

    5.0

    5.5

    6.0

    clot

    prog

    Supongamos que tenemos un nuevo vector de valores de las variables predictoras xf y queremospredecir el valor de la respuesta yf . Por ejemplo tenemos clot = 5,80, prog = 63,2, enz = 79,0 yliv = 2,74 para estimar yf mediante un intervalo de confianza procedemos as:

    > xf predict(reg, xf, interval = "confidence")

    fit lwr upr

    [1,] 205.28 188.45 222.11

    Con la opcion confidence R calcula los lmites de los intervalos con la formula

    yf tnp,/2

    xf(XX)1xf (5.1)

    En este caso yf se interpreta como la estimacion del promedio de la poblacion representada porxf .Si lo que se desea es predecir el valor de la respuesta y para un individuo con esos valores de xusamos (notese la opcion level que exige intervalos al 98% )

    > predict(reg, xf, interval = "prediction", level = 0.98)

    27

  • fit lwr upr

    [1,] 205.28 57.069 353.49

    con la opcion prediction los lmites de confianza se calculan mediante la formula

    yf tnp,/2

    xf(XX)1xf + 1 (5.2)

    5.2. Diagnostico

    Para general el grafico de de los residuales contra los ajustados procedemos as

    > plot(pred, resi, xlab = "ajustados", ylab = "Residuales")

    > abline(h = 0)

    La distancia de Cook

    > cook influence(reg)

    > dfbetas(reg)

    > dffits(reg)

    > covratio(reg)

    si queremos ajustar el mismo modelo pero sin usar la observacion de mayor distancia de Cookprocedemos as:

    > reg2 qqnorm(resi, ylab = "residuales")

    > qqline(resi)

    28

  • 2 1 0 1 2

    010

    020

    030

    0Normal QQ Plot

    Theoretical Quantiles

    resi

    dual

    es

    la separacion de los puntos de una linea recta es indicio de no normalidad.Para realizar la prueba de Shapiro Wilks para verificar el supuesto de normalidad de los erroresusamos la funcion shapiro.test()

    > shapiro.test(resi)

    Shapiro-Wilk normality test

    data: resi

    W = 0.7024, p-value = 3.659e-09

    La hipotesis nula es que los residuales son normales y rechazamos si el p valor de la prueba esmenor que el nivel de significancia elegido en este caso el valor pequeno < 0,05 del pvalor es unindicio de no normalidad de los errores.

    5.3. Modelos de analisis de varianza

    Ilustraremos el ajuste de modelos de clasificacion (modelos de analisis de varianza) con los siguientesdatos

    29

  • > y b a datos datos

    La orden

    > mod1 summary(mod1)

    Call:

    lm(formula = y ~ b, data = datos)

    Residuals:

    Min 1Q Median 3Q Max

    -2.333 -1.187 -0.333 1.313 2.667

    Coefficients:

    Estimate Std. Error t value Pr(>|t|)

    (Intercept) 6.333 0.737 8.59 2.6e-05

    b2 -1.583 1.166 -1.36 0.21

    Residual standard error: 1.81 on 8 degrees of freedom

    Multiple R-Squared: 0.187, Adjusted R-squared: 0.0859

    F-statistic: 1.85 on 1 and 8 DF, p-value: 0.211

    Observe los valores bajo el nombre estimate, Que esta estimando? En realidad esos valores son unasolucion a las ecuaciones normales obtenida mediate la restriccion 1 = 0, en efecto, las ecuacionesnormales en este caso son

    10+ 61 + 42 = 576+ 61 = 384+ 42 = 19

    (5.3)

    si imponemos la restriccion 1 = 0 entonces obtenemos 0 = 38/6 = 6,3333 y 02 =

    194(38/6)4

    =19/12 = 1,5833.El analisis de varianza usual se obtiene de la siguiente forma

    > anova(mod1)

    Analysis of Variance Table

    Response: y

    Df Sum Sq Mean Sq F value Pr(>F)

    b 1 6.02 6.02 1.85 0.21

    Residuals 8 26.08 3.26

    30

  • Si queremos ajustar un modelo sin intercepto yij = i + eij procedemos as

    > mod2 mod3 mod3 mod4 interaction.plot(a, b, y)

    34

    56

    7

    a

    mean o

    f y

    1 2 3

    b

    12

    El en el siguiente ejemplo se calculan las sumas de cuadrados tipo I, II y III, usando un modelo ados vias de clasificacion con interaccion, en este ejemplo no tenemos celdas vacas,

    31

  • > mod library(car)

    > anova(mod)

    Analysis of Variance Table

    Response: y

    Df Sum Sq Mean Sq F value Pr(>F)

    a 2 1.77 0.88 0.32 0.75

    b 1 5.88 5.88 2.11 0.22

    a:b 2 13.29 6.64 2.38 0.21

    Residuals 4 11.17 2.79

    > Anova(mod)

    Anova Table (Type II tests)

    Response: y

    Sum Sq Df F value Pr(>F)

    a 1.63 2 0.29 0.76

    b 5.88 1 2.11 0.22

    a:b 13.29 2 2.38 0.21

    Residuals 11.17 4

    > Anova(mod, type = "III")

    Anova Table (Type III tests)

    Response: y

    Sum Sq Df F value Pr(>F)

    (Intercept) 16.00 1 5.73 0.075

    a 8.17 2 1.46 0.334

    b 2.67 1 0.96 0.384

    a:b 13.29 2 2.38 0.209

    Residuals 11.17 4

    32