tutorial 10: regresión lineal simple. -...

42
PostData Curso de Introducción a la Estadística Tutorial 10: Regresión lineal simple. Atención: Este documento pdf lleva adjuntos algunos de los ficheros de datos necesarios. Y está pensado para trabajar con él directamente en tu ordenador. Al usarlo en la pantalla, si es necesario, puedes aumentar alguna de las figuras para ver los detalles. Antes de imprimirlo, piensa si es necesario. Los árboles y nosotros te lo agradeceremos. Fecha: 19 de abril de 2017. Si este fichero tiene más de un año, puede resultar obsoleto. Busca si existe una versión más reciente. Índice 1. Diagramas de dispersión y formato de los datos. 1 2. La recta de regresión lineal. 6 3. Introducción a la función lm de R 18 4. Inferencia en la regresión, usando R. 24 5. Modelos de regresión, más allá de las rectas. 37 6. Ejercicios adicionales y soluciones. 40 1. Diagramas de dispersión y formato de los datos. En el Capítulo 10 del libro se plantea el estudio de la relación entre dos variables cuantitativas X e Y . Los datos muestrales en los que se basa ese estudio consisten en una colección de pares de puntos: (x 1 ,y 1 ), (x 2 ,y 2 ), (x 3 ,y 3 ),..., (x n ,y n ), Y una de las tareas esenciales en ese estudio es la de representar gráficamente estos puntos, porque esa gráfica contiene mucha información sobre la posible relación que tratamos de analizar. Vamos a empezar el tutorial viendo cómo podemos realizar esos diagramas de dispersión usando los programas que conocemos, al menos en los casos más sencillos. 1.1. En GeoGebra. Empecemos con un ejemplo. La Tabla 1 muestra los datos que aparecen en una noticia titulada Relación entre la renta per cápita y los resultados de PISA, publicada por el periódico EL PAÍS en su edición on-line del 6 de diciembre de 2013. (El informe PISA es un análisis del rendimiento de los estudiantes, que la OCDE realiza periódicamente en muchos países del mundo). Los datos de la columna se refieren a la renta per cápita (rpc) en miles de euros para cada una de las comunidades autónomas que participaron en el estudio en 2012, mientras que la segunda columna (pisa) contiene las puntuaciones (promedio) obtenidas por los estudiantes de esa comunidad autónoma, en la prueba de Matemáticas. Este ejemplo es bastante sencillo, porque partimos de una cantidad muy moderada de puntos. Pero aún así nos va a servir para hacernos una idea de las dificultades que nos encontraremos en la práctica en este tipo de problemas. Por un lado, cuando pensamos en hacer que una persona pueda leer fácilmente la información de las coordenadas de los puntos, la 1

Upload: duongdung

Post on 05-Jun-2018

244 views

Category:

Documents


0 download

TRANSCRIPT

  • PostData Curso de Introduccin a la Estadstica

    Tutorial 10: Regresin lineal simple.

    Atencin:

    Este documento pdf lleva adjuntos algunos de los ficheros de datos necesarios. Y est pensadopara trabajar con l directamente en tu ordenador. Al usarlo en la pantalla, si es necesario,puedes aumentar alguna de las figuras para ver los detalles. Antes de imprimirlo, piensa sies necesario. Los rboles y nosotros te lo agradeceremos.

    Fecha: 19 de abril de 2017. Si este fichero tiene ms de un ao, puede resultar obsoleto. Buscasi existe una versin ms reciente.

    ndice

    1. Diagramas de dispersin y formato de los datos. 1

    2. La recta de regresin lineal. 6

    3. Introduccin a la funcin lm de R 18

    4. Inferencia en la regresin, usando R. 24

    5. Modelos de regresin, ms all de las rectas. 37

    6. Ejercicios adicionales y soluciones. 40

    1. Diagramas de dispersin y formato de los datos.

    En el Captulo 10 del libro se plantea el estudio de la relacin entre dos variables cuantitativas Xe Y . Los datos muestrales en los que se basa ese estudio consisten en una coleccin de pares depuntos:

    (x1, y1), (x2, y2), (x3, y3), . . . , (xn, yn),

    Y una de las tareas esenciales en ese estudio es la de representar grficamente estos puntos, porqueesa grfica contiene mucha informacin sobre la posible relacin que tratamos de analizar. Vamos aempezar el tutorial viendo cmo podemos realizar esos diagramas de dispersin usando los programasque conocemos, al menos en los casos ms sencillos.

    1.1. En GeoGebra.

    Empecemos con un ejemplo. La Tabla 1 muestra los datos que aparecen en una noticia tituladaRelacin entre la renta per cpita y los resultados de PISA, publicada por el peridico EL PAS ensu edicin on-line del 6 de diciembre de 2013. (El informe PISA es un anlisis del rendimiento delos estudiantes, que la OCDE realiza peridicamente en muchos pases del mundo). Los datos de lacolumna se refieren a la renta per cpita (rpc) en miles de euros para cada una de las comunidadesautnomas que participaron en el estudio en 2012, mientras que la segunda columna (pisa) contienelas puntuaciones (promedio) obtenidas por los estudiantes de esa comunidad autnoma, en laprueba de Matemticas. Este ejemplo es bastante sencillo, porque partimos de una cantidad muymoderada de puntos. Pero an as nos va a servir para hacernos una idea de las dificultades quenos encontraremos en la prctica en este tipo de problemas. Por un lado, cuando pensamos enhacer que una persona pueda leer fcilmente la informacin de las coordenadas de los puntos, la

    1

    http://www.postdata-statistics.com/http://elpais.com/elpais/2013/12/06/media/1386359879_944495.htmlhttp://www.oecd.org/pisa/

  • rpc pisaExtremadura 15.394 461

    Andaluca 19.960 472Murcia 18.520 462Galicia 20.723 489

    Asturias 21.035 500Castilla y Len 22.289 509

    Cantabria 22.341 491ESPAA 22.772 484Baleares 24.393 475La Rioja 25.508 503Aragn 25.540 496

    Catalua 27.248 493Navarra 29.071 517Madrid 29.385 504

    Pas Vasco 30.829 505

    Tabla 1: Datos de la noticia Relacin entre la renta per cpita y los resultados de PISA, publicadospor el peridico EL PAS en su edicin on-line del 6 de diciembre de 2013.

    mejor manera es usar una tabla como la Tabla 1. Por otro lado, la forma ms fcil de empezar atrabajar con estos datos en GeoGebra es partiendo de una lista de puntos como esta:

    (15.394,461), (19.96,472), (18.52,462), (20.723,489), (21.035,500), (22.289,509),(22.341,491), (22.772,484), (24.393,475), (25.508,503), (25.54,496), (27.248,493),(29.071,517), (29.385,504), (30.829,505)

    Puedes copiar esta lista de puntos y pegarla en la Lnea de Entrada de GeoGebra rodendola entrellaves as:

    datosPisa = {(15.394,461), (19.96,472), (18.52,462), (20.723,489), (21.035,500),(22.289,509), (22.341,491), (22.772,484), (24.393,475), (25.508,503), (25.54,496),(27.248,493), (29.071,517), (29.385,504), (30.829,505)}

    como se muestra en esta figura:

    Cuando introduzcas estos datos en GeoGebra los vers aparecer en el panel de la izquierda, laVista Algebraica, pero no en la Vista grfica. Para hacerlos visibles tienes que pulsar sobre el botncircular situado a la izquierda de los datos en la Vista Algebraica, como muestra la figura:

    2

    http://elpais.com/elpais/2013/12/06/media/1386359879_944495.html

  • Despus de hacer esto lo ms probable es que todava no veas los puntos. Para verlos,haz clickcon el botn derecho del ratn en algn lugar de la Vista grfica, para hacer aparecer el mencontextual de ese panel, y selecciona Mostrar todos los objetos, como se ve en esta figura:

    Al hacerlo vers aparecer la nube de puntos. Todava es posible que tengas que hacer zoom ocambiar la escala de los ejes para llegar a una visualizacin que nos parezca satisfactoria. Porejemplo, yo he modificado la posicin y escala de los ejes, para que el punto de corte ocurra en elvalor 400 del eje vertical.

    Puedes explorar el men Vista Grfica (identificado por la rueda dentada que aparece en el mencontextual que hemos usado antes), en el que puedes modificar estos y muchos otros parmetrosde la visualizacin.

    La limitacin evidente de esta forma de trabajar es que en la mayora de los casos partiremos deuna tabla, o de un fichero csv con los datos. Por ejemplo, el fichero adjunto

    3

  • ,

    cuyo contenido se muestra en la Figura 1 contiene los mismos datos de este ejemplo, en un for-mato mucho ms comn en la prctica. Una posibilidad es usar la Hoja de Clculo que incorpora

    Figura 1: Fichero csv con los datos del ejemplo sobre el estudio PISA.

    GeoGebra, e importar el fichero csv como hemos hecho en Calc. GeoGebra ofrece, en sus versionesrecientes, muchas menos posibilidades de configuracin de ese proceso de importacin que, porejemplo, Calc. Puedes encontrar ms informacin en este enlace:

    http://wiki.geogebra.org/en/Spreadsheet_View

    Pero para trabajar cmodamente con ficheros de datos ms complejos y, en general, para poderexprimir al mximo la informacin de estos datos, es sensiblemente mejor recurrir a un programaespecializado como R.

    1.2. En R.

    Vamos a empezar con un ejemplo muy elemental de cmo se dibuja un diagrama de dispersin enR. Partimos de dos vectores de coordenadas:

    x = c(1, 3, 4, 5, 7, 9, 13, 15)y = c(-0.888, 3.12, 4.27, 5.6, 8.06, 12.2, 15.9, 17.2)

    Y para obtener el diagrama de dispersin basta con aplicar la funcin plot as:

    plot(x, y)

    4

    "CA""rpc""pisa""Extremadura"15.394461"Andaluca"19.96472"Murcia"18.52462"Galicia"20.723489"Asturias"21.035500"Castilla Len"22.289509"Cantabria"22.341491"Espaa"22.772484"Baleares"24.393475"La Rioja"25.508503"Aragn"25.54496"Catalua"27.248493"Navarra"29.071517"Madrid"29.385504"Pas Vasco"30.829505

    http://wiki.geogebra.org/en/Spreadsheet_View

  • 2 4 6 8 10 12 14

    05

    1015

    x

    y

    El diagrama resultante es, desde el punto de vista grfico, muy bsico. Pero, como sucede siempreen R, las posibilidades para modificar este grfico, adaptndolo a nuestras necesidades y deseos,son casi ilimitadas. Ms adelante en este tutorial vamos a adentrarnos, apenas unos pasos, en eluniverso de los grficos con R.

    Lo que hemos hecho para obtener ese grfico es el esquema bsico. En ejemplos ms complicados yrealistas, como hemos dicho, el punto de partida ser a menudo un fichero de datos. Vamos a usarcomo ejemplo el fichero Tut10-DatosPisaPais.csv, de datos del estudio PISA, que hemos incluidoen la seccin previa. Nuestro primer paso es leer los datos usando la funcin read.table, que yahemos usado en otras ocasiones para esto. Fjate en que usamos la opcin sep = "\t", porque lascolumnas de datos se han separado con tabuladores en el fichero csv. Cmo hemos sabido que sehaba usado el tabulador? Probando a leer los datos con el espacio como separador y descubriendoque se produca un error de lectura. Recuerda adems que siempre es bueno comprobar que lalectura ha sido correcta, usando por ejemplo la funcin head:

    datosPisa = read.table(file="../datos/Tut10-DatosPisaPais.csv", header=TRUE, sep = "\t")head(datosPisa)

    ## CA rpc pisa## 1 Extremadura 15.394 461## 2 Andaluc\303\255a 19.960 472## 3 Murcia 18.520 462## 4 Galicia 20.723 489## 5 Asturias 21.035 500## 6 Castilla Le\303\263n 22.289 509

    A partir de aqu, las cosas son sencillas. Usamos la notacin habitual de los data.frmaes de Rpara trabajar con las dos columnas que contienen los datos que vamos a representar y usamos lafuncin plot as:

    plot(datosPisa$rpc, datosPisa$pisa)

    5

  • 15 20 25 30

    460

    480

    500

    datosPisa$rpc

    dato

    sPis

    a$pi

    sa

    Puedes probar tambin a usar

    plot(pisa ~ rpc, data=datosPisa)

    para ver que el resultado es el mismo. El smbolo ~, que ya ha aparecido en algn tutorial previo, esla forma de decir en R que estamos estudiando la relacin entre esas dos variables. En las prximassecciones volveremos a este ejemplo y seguiremos el anlisis de regresin de esos datos. Pero antes,vamos a practicar en un ejercicio la lectura de datos a partir de ficheros csv.

    Ejercicio 1. En todos los casos se trata de leer un fichero csv que contiene pares de datos, paraalmacenar los valores de las variables x e y en sendos vectores de R, que llamaremos, claro est,x e y. Antes de empezar, guarda los ficheros en la carpeta datos de tu directorio de trabajo, yrecuerda que conviene echarle un vistazo al fichero de datos, usando un editor de texto (como elBloc de Notas de Windows).

    1. El primer fichero es muy sencillo, no debe suponer problemas:

    2. Una variante del anterior, los mismos datos, con algunos cambios de formato:

    3. Y una tercera versin de los mismos datos:

    Soluciones en la pgina 40.

    2. La recta de regresin lineal.

    2.1. Interpolacin en GeoGebra.

    Dado un conjunto de puntos, representados mediante su diagrama de dispersin, nuestro primerpaso en la Seccin 10.1.1 del libro (pg. 348) ha sido la bsqueda de una curva que pasara por todosy cada uno de los puntos del diagrama de dispersin. La tcnica llamada interpolacin permiteconstruir una curva polinmica con esas propiedades. Para que puedas experimentar con esa ideahemos incluido un fichero GeoGebra:

    6

    "x","y"0.9,0.631.4,4.381.8,5.861.9,6.432.3,7.812.5,10.052.6,9.022.9,11.23

    "x""y"0,90,631,44,381,85,861,96,432,37,812,510,052,69,022,911,23

    x;0,9;1,4;1,8;1,9;2,3;2,5;2,6;2,9y;0,63;4,38;5,86;6,43;7,81;10,05;9,02;11,23

  • que al abrirlo te mostrar esta imagen:

    Empieza por marcar la casilla Polinopmio por A, B, C, D para ver aparecer la curva que pasa poresos puntos:

    Si quieres, puedes probar a desplazar alguno de los puntos para ver cmo responde la curva.Tambin puedes marcar la casilla para aadir un punto E adicional que, si no has movido lospuntos, inicialmente aparecer cerca de la curva:

    7

    geogebra_thumbnail.png

    geogebra_javascript.js

    function ggbOnInit() {}

    geogebra.xml

  • Finalmente, marca la casilla restante para mostrar la curva de interpolacin que pasa por los cincopuntos y prueba a mover el punto E. Vers como incluso pequeas modificaciones de la posicindel punto pueden tener una influencia muy importante en la posicin de esa curva.

    El comando de GeoGebra que nos permite construir la curva que pasa por los puntos A,B,C y Des: Polinomio[A, B, C, D].

    8

  • 2.2. Recta de regresin en GeoGebra.

    El siguiente paso, como hemos discutido en el libro, es renunciar a buscar una curva que pase portodos los puntos. En su lugar buscamos la mejor recta posible para representar ese conjunto depuntos. En GeoGebra, la recta de regresin lineal se obtiene con la funcin AjusteLineal, aplicadaa una lista de puntos. Si todava tienes abierto el fichero que hemos usado para la interpolacin,puedes ejecutar este comando

    AjusteLineal[{A, B, C, D}]

    para obtener esa recta (si no usas las llaves el comando funcionar igualmente, GeoGebra las aadepor ti). Y para los datos del estudio PISA que hemos usado al principio del tutorial, basta conhacer

    AjusteLineal[datosPisa]

    para obtener la recta:

    Hemos destacado la ecuacin de la recta en la Vista Algebraica de GeoGebra, para que veas queah aparecen la pendiente y la ordenada en el origen.

    Ficheros de GeoGebra para visualizar las ideas asociadas a la recta de regresin.

    Vamos a aprovechar este apartado para incluir aqu varios ficheros de GeoGebra que acompaanla discusin de la Seccin 10.2 del libro (pg. 352). Para empezar, el fichero

    permite refrescar el significado de la pendiente b1 y la ordenada en el origen b0 de una recta cuyaecuacin es

    y = b0 + b1x,

    usando un par de deslizadores como se ilustra en la figura

    9

    geogebra_thumbnail.png

    geogebra_javascript.js

    function ggbOnInit() {}

    geogebra.xml

  • Prueba a mover esos deslizadores hasta asegurarte de que comprendes bien el efecto que cada unode los coeficientes b0 y b1 tiene sobre la recta.

    Una vez entendemos de las herramientas (los valores b0, b1) que nos van a permitir colocar la rectadonde nosotros queramos, llega el momento de elegir la mejor recta para un conjunto dado depuntos. El fichero

    te presenta una coleccin o nube de puntos (de color rojo) y te permite usar los puntos M y Npara tratar de colocar la recta azul de la manera que consideres ms representativa de la nube depuntos dada.

    Una vez hecho esto, usa la casilla para mostrar la recta de regresin calculada por GeoGebra ycomprobar si te has acercado a ese objetivo.

    10

    geogebra_thumbnail.png

    geogebra_javascript.js

    function ggbOnInit() {}

    geogebra.xml

  • El siguiente paso consiste en cuantificar, para medirlo de forma precisa, el error que se cometeal usar una recta como representante de la nube de puntos. El criterio que usamos es el errorcuadrtico, y el fichero Geogebra

    trata de ilustrar la nocin de error cuadrtico. Como en el caso anterior, se muestra una nubede puntos y una recta que podemos tratar de colocar de la mejor manera posible. En este casoadems de una casilla para mostrar la recta de regresin disponemos de otra que nos permite verlos cuadrados que determinan ese error cuadrtico. Prueba a mover la recta hacia la posicin queocupa la recta de regresin y observa como la suma total de las reas de esos cuadrados se reducea un mnimo en esa posicin.

    Cuando mueves la recta hasta hacerla coincidir exactamente con la recta de regresin, este ficherotambin permite visualizar los valores de los residuos, que son los segmentos verticales que conectanlos puntos de la nube inicial de datos (los puntos rojos) con los puntos correspondientes de la rectade regresin (los puntos verdes).

    Vamos a cerrar este apartado con dos ficheros GeoGebra, que permiten explorar las ideas queaparecen en las Figuras 10.10 y 10.11 del libro (pgs. 362 y 363, respectivamente). Los ficheros son:

    En ambos casos, se trata de hacer zoom en la figura, hacia dentro en la primera y hacia fuera enla segunda. Puedes usar la rueda del ratn o las teclas Ctrl + y Ctrl - para hacer esto.

    2.3. La recta de regresin en R.

    En esta seccin vamos a comenzar el estudio de los comandos de R necesarios para el anlisis deregresin lineal. Las posibilidades de R van mucho ms lejos de lo que vamos a ver aqu, pero,como siempre, es necesario empezar por lo ms bsico.

    Para empezar a trabajar vamos a usar los datos del informe PISA con los que abramos este tutorial.Supondremos que los datos estn disponibles en el data.frame de R llamado datosPisa que hemoscreado en la Seccin 1.2 (pg. 4). En primer lugar, vamos a ver como calcular la covarianza deestos dos vectores, cosa que es extremadamente fcil de hacer en R:

    11

    geogebra_thumbnail.png

    geogebra_javascript.js

    function ggbOnInit() {}

    geogebra.xml

    geogebra_thumbnail.png

    geogebra_javascript.js

    function ggbOnInit() {}

    geogebra.xml

    geogebra_thumbnail.png

    geogebra_javascript.js

    function ggbOnInit() {}

    geogebra.xml

  • cov(datosPisa$rpc, datosPisa$pisa)

    ## [1] 55.261

    Recuerda que en R se trata siempre de la covarianza muestral, que usa n 1 en el denomi-nador. Si deseas la covarianza que usa n, debes usar el truco habitual, multiplicando por n 1 ydividendo por n.

    Con la funcin cov estamos listos para calcular la pendiente de la recta de regresin, que de acuerdocon la Ecuacin 10.8 (pg. 359) del libro es:

    (b1 = cov(datosPisa$pisa, datosPisa$rpc)/var(datosPisa$rpc))

    ## [1] 2.951

    Y la ordenada en el origen es, entonces:

    (b0 = mean(datosPisa$pisa) - b1 * mean(datosPisa$rpc))

    ## [1] 420.89

    As que la recta de regresin es, aproximadamente,

    y = 420.9 + 2.951 x

    Recuerda que ya habamos obtenido esta recta en Geogebra, as que es un buen momento para quecompruebes que el resultado es el mismo.

    La funcin attach.

    Si te has cansado de escribir todo el rato

    datosPisa$,

    puedes ejecutar

    attach(datosPisa)

    Cuando lo ejecutes puede que veas algn mensaje de advertencia de R. No te preocupes por elmomento. Con este comando le decimos a R que queremos acceder a las variables de ese data.framesin necesidad de precederlas con datosPisa$. Por ejemplo, en lugar de datosPisa$rpc ahorapuedes decir simplemente

    rpc

    ## [1] 15.394 19.960 18.520 20.723 21.035 22.289 22.341 22.772 24.393 25.508## [11] 25.540 27.248 29.071 29.385 30.829

    y, como ves, R lo entiende sin problemas. El problema de hacer esto es que en ocasiones se creanambigedades entre las variables del data.frame y otras posibles variables. Especialmente enprogramas ms complicados y cuando se trabaja con varios data.frames a la vez. En un programasencillo que escribimos para un clculo corto, puede ser la solucin ms cmoda. Pero el usogeneralizado de attach no es una prctica muy recomendable y la mayora de programadoresexpertos de R lo desaconsejan. Cuando aprendas un poco ms de R podrs evitarlo casi siempre,mediante herramientas como la funcin with y la opcin data de muchas funciones. Adems, eluso del tabulador en RStudio aligera mucho el trabajo adicional que esto supone. Nosotros vamosa seguir adelante en el Tutorial sin usar attach. La forma de deshacer sus efectos es mediante

    12

  • detach(datosPisa)rpc

    ## Error in eval(expr, envir, enclos): objeto rpc no encontrado

    y el mensaje de error nos confirma de que hemos vuelto a la situacin previa al uso de attach.

    Aadir la recta de regresin al diagrama de dispersin.

    Naturalmente, una vez calculada la recta de regresin, queremos verla incluida en el diagramade dispersin. Para ello, disponemos de la funcin abline, que puede dibujar cualquier recta. Elnombre de esa funcin se debe a que tradicionalmente las rectas se han escrito as:

    y = a+ b x

    a partir de su pendiente b y ordenada en el origen a. Para usarlo en nuestro ejemplo hacemos: y elresultado es la grfica que se muestra en la Figura 2.

    plot(datosPisa$pisa ~ datosPisa$rpc)abline(a = b0, b = b1)

    15 20 25 30

    460

    480

    500

    datosPisa$rpc

    dato

    sPis

    a$pi

    sa

    Figura 2: Recta de regresin en el diagrama de dispersin para el Ejemplo de los datos del informePISA.

    Est claro que, como hemos dicho antes, se trata de un grfico muy sencillo, aunque suficientepara muchos de nuestros propsitos. Pronto aprenderemos a mejorarlo. Recuerda adems que yaobtuvimos este grfico con GeoGebra, as que es una buena idea que compares las dos versiones.

    2.4. Coeficiente de correlacin, Residuos y error cuadrtico medio

    El coeficiente de correlacin r que aparece en la Ecuacin 10.16 (pg. 380) del libro, se calcula enR con la funcin cor. As que, para los datos del estudio PISA se obtiene

    13

  • cor(datosPisa$pisa, datosPisa$rpc)

    ## [1] 0.75277

    Ejercicio 2.

    1. Comprueba que el resultado de cor es el mismo que cuando se usa cov y la frmula dela Ecuacin 10.16 del libro (pg. 380). Recuerda que la funcin sd sirve para calcular lascuasidesviaciones tpicas que necesitars para el denominador de esa frmula.

    2. Averigua cul es la funcin de GeoGebra que te permite calcular el coeficiente de correlacinde la lista de puntos datosPisa que hemos creado al principio del tutorial. Comprueba queel resultado es el mismo que hemos obtenido en R.

    Soluciones en la pgina 41.

    Residuos y error cuadrtico medio

    Una vez que hemos obtenido la ecuacin de la recta de regresin, tambin podemos usarla paracalcular otros valores asociados al anlisis de regresin como los residuos, o el error cuadrtico,que son relevantes para el anlisis de la varianza en el modelo de regresin. En la Seccin 3 deeste tutorial vamos a aprender a usar la funcin lm de R para hacer esta operacin de una maneramucho ms sencilla. Pero es bueno empezar por lo ms bsico, construyendo los resultados paso apaso.

    Por ejemplo, para calcular los residuos con los datos del estudio PISA debemos primero calcularla diferencia entre los valores para las pruebas PISA que predice la recta, calculados a partir derpc, y los valores de pisa que se han medido en la muestra. Para obtener los valores que predicela recta hacemos

    (pisaRecta = b0 + b1 * datosPisa$rpc)

    ## [1] 466.32 479.79 475.54 482.05 482.97 486.67 486.82 488.09 492.88 496.17## [11] 496.26 501.30 506.68 507.61 511.87

    que, como se ve, da como resultado el vector de valores predichos (fitted values, en ingls). Ahoraslo tenemos que restar estos de pisa para obtener los residuos:

    (residuos = datosPisa$pisa - pisaRecta)

    ## [1] -5.31931 -7.79347 -13.54407 6.95493 17.03423 22.33370 4.18025## [8] -4.09162 -17.87515 6.83451 -0.25992 -8.30019 10.32018 -3.60643## [15] -6.86764

    Si lo que queremos es el error cuadrtico EC, basta con hacer la suma de los cuadrados de losresiduos:

    (EC = sum(residuos^2))

    ## [1] 1745.9

    Como hemos dicho, en la Seccin 3 de este tutorial veremos como se pueden obtener muchos deestos valores usando lm. Pero antes, y para que puedas hacer fcilmente los siguientes ejercicios,vamos a incluir aqu un fichero de comandos R que sirve para realizar todos los pasos anteriores:

    Ejercicio 3. Vamos a usar ese fichero de R para comprobar los valores que aparecen en algunosejemplos del Captulo 10. Hemos incluido ficheros csv para facilitarte las operaciones. En todoslos casos, lo ms recomendable es que repitas un anlisis completo, ejecutando todos los comandosdel fichero para cada conjunto de datos.

    14

    ##################################################### www.postdata-statistics.com# POSTDATA. Introduccin a la Estadsitica# Tutorial-10. ## La recta de regresion lineal# de dos vectores x e y.# # El fichero no funcionara si no introduces los # dos vectores de datos, o los lees de un fichero.#################################################################

    rm(list=ls())

    # Descomenta estas lineas si las usas.#(x = c()) #(y = c())

    # Si los vas a leer de un fichero csv con dos columnas,# en el que cada vector ocupa una columna, descomenta y # completa las opciones de estos 4 comandos.# Recuerda que el fichero debe estar en la carpeta datos# de tu directorio de trabajo.# Si el fichero csv no tiene ese formato tendras que hacer# mas cambios en este codigo, de forma manual.

    #datos = read.table(file="./datos/", sep=" " ,dec="." ,header=TRUE)#x = datos[ ,1]#y = datos[ ,2]

    # Calculamos la longitud y comprobamos que coincidan(n = length(x))if(n != length(y)) warning("LAS LONGITUDES NO COINCIDEN")

    # Dibujamos el diagrama de dispersin.plot(x, y, lwd=2, col="red", cex.lab=2, cex.axis=1.5)box(lwd=3)

    # Calculamos las medias, cuasivarianzas y covarianza

    (barX = mean(x))(barY = mean(y))

    (varX = var(x))(varY = var(y))

    (covXY = cov(x,y))

    # Ahora los coeficientes de la recta de regresion:

    (b1 = cov(x,y)/var(x))(b0 = mean(y) - mean(x) * b1)

    # Dibujamos la recta:

    abline(b0, b1, lwd=2, col="blue")

    # Calculamos el coeficiente de correlacion

    (r = cor(x,y))

    # Vamos a calcular los terminos de la descomposicion ANOVA

    #Empezamos por los valores que predice la recta

    (yRecta = b0 + b1 * x )

    # Ahora los residuos

    (residuos = y - yRecta)

    # Y los terminos de ANOVA son

    # SS total

    (SSTotal = (n - 1) * var(y))

    # EC, el error cuadratico.# Tambien se llama SS error, o residual.

    (EC = sum(residuos^2))

    # SS del modelo# dispersion explicada por la recta(SSModelo = sum((yRecta - mean(y))^2))

    # Comprobacion de la identidad ANOVASSTotalEC + SSModelo

  • 1. Ejemplo 10.2.1 (pg 359). Datos en el fichero:

    2. Ejemplo 10.3.1 (pg 368). Datos en el fichero:.

    3. Ejemplo 10.3.2 (pg 369). Datos en el fichero:.

    4. Ejemplo 10.3.3 (pg 372).Primero los puntos no ruidosos. Datos en el fichero:

    .

    5. Y del mismo ejemplo 10.3.3, ahora los puntos ruidosos. Datos en el fichero:.

    2.5. Un grfico de regresin ms expresivo

    Opcional: esta seccin puede omitirse en una primera lectura.

    El grfico de regresin que hemos mostrado en la Figura es bastante elemental, incluso rudimen-tario. Aqu vamos a ver algunos comandos y opciones de R que ayudan a conseguir un resultadovisualmente ms atractivo. Puedes considerar esta seccin como una invitacin a explorar ms enlas (muy amplias) capacidades grficas de R, de las que aqu slo mostramos una nfima parte.

    Para empezar, hemos cambiado el comando

    plot(datosPisa$rpc, datosPisa$pisa)

    por una versin ms detallada. Ocupa varias lneas que, como siempre en estos casos, deben eje-cutarse conjuntamente:

    plot(datosPisa$rpc, datosPisa$pisa,lwd=2, col="red", cex=1.1, cex.lab=1.1, cex.axis=1.1, bty="n",xlab="Renta per capita, ao 2012, en miles de euros",ylab="Puntos PISA2012 en Matemticas")

    y que produce el resultado que aparece en la Figura 3. Vamos a comentar las modificaciones quehemos hecho:

    La opcin lwd=2 sirve para que los puntos (xi, yi) se dibujen con un trazo ms grueso (dehecho, lwd proviene de line width, grosor de la lnea).

    La opcin col="red" ya ha aparecido antes en los tutoriales, y sirve para cambiar el colorde los smbolos que usa R, en este caso para que los puntos (xi, yi) sean de color rojo.

    Las opciones que empiezan por cex se refieren al tamao de fuentes tipogrficas y de algunossmbolos empleados en el grfico. El nombre cex proviene de character expansion, y su valores un factor multiplicativo que nos indica cuntas veces ms grande es el tipo de fuente quese usa, tomando como referencia el tipo base por defecto que usara R. As pues, cex=1.5significa un smbolo 1.5 veces ms grande que el valor por defecto, etc. Las variantes de cexque aparecen se refieren a distintas partes del grfico. As, por ejemplo, cex.lab se refiere altamao del texto en las frases que se usan como etiquetas de los ejes (en ingls labels, de ahel nombre). En cambio cex.axis se refiere a los nmeros que aparecen en las escalas de losejes (en ingls, axis).

    La opcin bty="n" (de box type, tipo de caja) sirve para decirle a R el tipo de marco quequeremos que dibuje alrededor del grfico. En este caso hemos optado por n, de none, ninguno,porque vamos a aadirlo despus.

    Finalmente, los argumentos xlab e ylab sirven para aadir las etiquetas (de nuevo, labels) ofrases que acompaan al eje x y al eje y, respectivamente.

    15

    "x" "y"12.1 -3.323.9 -8.919.8 -6.919.3 -6.47.05 -0.6718.4 -6.222.9 -8.620.2 -7.223.4 -8.820.7 -7.3

    "x" "y"0.463 0.250.952 0.0430.785 0.170.764 0.180.252 0.190.726 0.20.913 0.0790.799 0.160.934 0.0620.82 0.150.00456 0.0050.247 0.190.754 0.190.858 0.120.624 0.240.715 0.20.978 0.020.941 0.0550.0773 0.0720.33 0.220.55 0.250.0451 0.0430.0745 0.0670.81 0.150.271 0.20.463 0.250.156 0.130.673 0.220.81 0.150.459 0.25

    "x" "y"0.463 0.4490.952 0.8040.785 0.00610.764 0.03260.252 0.07930.726 0.7740.913 0.02580.799 0.7680.934 0.1030.82 0.3820.00456 0.330.247 0.470.754 0.3990.858 0.1990.624 0.3960.715 0.7830.978 0.4580.941 0.720.0773 0.2050.33 0.310.55 0.6910.0451 0.5230.0745 0.2510.81 0.1660.271 0.4930.463 0.8970.156 0.8760.673 0.5880.81 0.7910.459 0.242

    "x" "y"0.25 0.8750.46 0.770.73 0.6350.76 0.620.78 0.610.8 0.60.82 0.590.91 0.5450.93 0.5350.95 0.525

    "x" "y"0.25 0.8489245003029730.46 0.7768727211992460.73 0.6381557475650390.76 0.6402027687558010.78 0.5957638231427550.8 0.601251720850990.82 0.5755679865752170.91 0.5389119749901720.93 0.5249008834989140.95 0.533767436689612

  • 15 20 25 30

    460

    470

    480

    490

    500

    510

    Renta per capita, ao 2012, en miles de euros

    Pun

    tos

    PIS

    A20

    12 e

    n M

    atem

    ticas

    Figura 3: Primer paso para obtener un diagrama de dispersin mejorado para el ejemplo de losdatos PISA.

    Ejercicio 4.

    1. Prueba a usar la opcin main para aadir un ttulo general al grfico.

    2. Qu opcin usaras para cambiar el tamao de ese ttulo?

    3. Prueba a aadir la opcin pch=18. Qu ha cambiado? Busca informacin sobre los posiblesvalores de pch (por ejemplo pidindole a R que ejecute ?pch).

    A continuacin vamos a rotular cada punto del grfico con el nombre de la regin a la que corres-ponde. Esos nombres estn disponibles en la primera columna del data.frame datosPisa. Parausarlos, ejecutamos este cdigo , que enseguida comentaremos:

    par(xpd=TRUE)text(datosPisa$rpc, datosPisa$pisa, labels=datosPisa$CA,

    pos=3, offset=0.6,font=3)par(xpd=FALSE)

    Vamos a empezar por el comando text. Este comando sirve para colocar texto en cualquier po-sicin del grfico que estamos dibujando. Como de costumbre, podemos utilizar vectores como

    16

  • argumentos. As que en la opcin labels usamos el vector namesPisa que contiene las etiquetasque queremos colocar junto a cada punto del grfico. Los dos primeros argumentos de text sondos vectores, con las coordenadas x e y, respectivamente, de los puntos en los que se coloca cadauna de esas etiquetas; en nuestro caso, se trata de los vectores rpc y pisa. El argumento pos (deposition) sirve para colocar el texto debajo, a la izquierda, encima o a la derecha del punto, segnque pos valga 1, 2, 3 o 4. La opcin offset controla la separacin entre el punto y el texto. Porltimo, la opcin font permite elegir entre un tipo normal (1), negrita (2), itlica (3) o negritaitlica (4).

    Para qu sirve el comando par(xpd=TRUE)? La funcin par (de parameter, parmetro) es unade las funciones ms importantes cuando se trata de modificar un grfico de R. En este caso lausamos porque algunos de los nombres del vector namesPisa son demasiado largos, y R recortaesos textos de las etiquetas para que no sobresalgan del marco del grfico. Nosotros preferimosque los textos se muestren completos, aunque sobresalgan un poco, as que hemos usado la opcinxpd=FALSE que le dice a R que no haga ese recorte. Una vez colocadas las etiquetas volvemos aactivar esa opcin con par(xpd=FALSE). El resultado de estas operaciones es el grfico de la Figura4.

    15 20 25 30

    460

    470

    480

    490

    500

    510

    Renta per capita, ao 2012, en miles de euros

    Pun

    tos

    PIS

    A20

    12 e

    n M

    atem

    ticas

    Extremadura

    Andaluc..a

    Murcia

    Galicia

    Asturias

    Castilla Le..n

    Cantabria

    Espa..a

    Baleares

    La Rioja

    Arag..n

    Catalu..a

    Navarra

    MadridPa..s Vasco

    Figura 4: Segundo paso para obtener un diagrama de dispersin mejorado.

    A continuacin aadimos la recta con

    17

  • abline(b0, b1, lwd=3, col="blue")

    Las nicas modificaciones que hemos hecho son sobre el grosor y color del trazo. Ahora, para hacervisible la idea de residuo, vamos a aadir unos segmentos que conecten cada punto (xi, yi) de lamuestra con el correspondiente punto de la recta, que es (xi, yi). Para eso usamos el comando:

    segments(datosPisa$rpc, pisaRecta, datosPisa$rpc, datosPisa$pisa,lty=2,lwd=3)

    cuyos dos primeros argumentos son las coordenadas x e y de los puntos iniciales de los segmentos, ycuyos argumentos tercero y cuarto son las coordenadas de los puntos finales de los segmentos. Fjateen que los valores yi estn en el vector pisaRecta que hemos calculando antes. Hemos ajustadoadems el grosor de la lnea con lwd, y el tipo de trazo, para que sea discontinuo, mediante laopcin lty (de line type).

    Ejercicio 5. Busca qu otros tipos de trazo puedes usar con distintos valores de lty.

    Como ltima modificacin hemos dibujado un marco o caja alrededor del grfico, usando elcomando

    box(lwd=3,bty="l")

    La opcin bty (de box type, tipo de caja), le indica a R como queremos que sea la forma del marco.Los cdigos que se usan en este caso, son curiosos: se usa una letra, cuya forma indica la de lacaja. Por ejemplo con bty="o" le indicamos a R que queremos una caja con cuatro lados (la letrao es un crculo completo , mientras que con bty="u" indicamos una caja a la que le falta el ladode arriba. Ya vimos antes que la opcin "n"suprime la caja. Las otras opciones disponibles son:"l", "7", "c", "u", "[", "]"

    Ejercicio 6. Prubalas todas para ver el efecto que producen.

    El resultado final es el grfico de la Figura 5. Como hemos dicho, hay mucho ms que aprendersobre los grficos de R, y aqu apenas hemos esbozado algunas ideas bsicas. El lector interesadoencontrar mucha informacin en la red, y en la abundante bibliografa, de la que citamos comoejemplo el libro (de ms de 400 pginas!) R Graphics Cookbook, de Winston Chang, editado porOReilly (ISBN: 978-1-449-31695-2).

    3. Introduccin a la funcin lm de R

    Opcional: esta seccin puede omitirse en una primera lectura. Pero su contenido esmuy importante para seguir avanzando en el aprendizaje de R.

    La funcin lm, de linear model (modelo lineal) es, sin exageracin alguna, una de las funciones msimportantes de R. Una de las tareas ms importantes de la Estadstica y el Anlisis de Datos esprecisamente la construccin de modelos para describir la relacin entre variables. Y, dentro delos posibles modelos, la familia de modelos lineales es la ms importante. Esos modelos lineales seconstruyen en R usando la funcin lm, as que podemos decir que esta funcin abre la puerta aalgunas de las posibilidades ms avanzadas del uso de R para la modelizacin estadstica.

    Pero empecemos por el modelo ms sencillo, el modelo de regresin lineal simple que hemos descritoen el Captulo 10. Vamos a usar como ejemplo los puntos con ruido del Ejemplo 10.3.3 del libro(pg. 372), que tienes en el fichero csv llamada Cap10-Ejemplo-Anova02.csv, que ya hemos usadoantes en los ejercicios de la pgina 14 de este tutorial. De hecho, puedes usar los resultados delejercicio 5 de esa pgina para compararlos con los que obtendremos aqu.

    Empezamos leyendo los puntos de la muestra contenidos en ese fichero:

    18

  • 15 20 25 30

    460

    470

    480

    490

    500

    510

    Renta per capita, ao 2012, en miles de euros

    Pun

    tos

    PIS

    A20

    12 e

    n M

    atem

    ticas

    Extremadura

    Andaluc..a

    Murcia

    Galicia

    Asturias

    Castilla Le..n

    Cantabria

    Espa..a

    Baleares

    La Rioja

    Arag..nCatalu..a

    Navarra

    MadridPa..s Vasco

    Figura 5: El diagrama de dispersin mejorado para el Ejemplo ??.

    datos = read.table("../datos/Cap10-Ejemplo-Anova02.csv", header=TRUE)

    A continuacin para explicarle a R que queremos usar el modelo de regresin lineal correspondientea esos datos basta con ejecutar este comando:

    (lmXY = lm(y ~ x, data=datos))

    #### Call:## lm(formula = y ~ x, data = datos)#### Coefficients:## (Intercept) x## 0.983 -0.481

    La sintaxis y x es la forma que tiene R de expresar que x es la variable explicativa, e y la variablerespuesta en este modelo. Hemos almacenado el modelo en la variable lmXY (el nombre podra sercualquier otro) porque as ser ms fcil acceder a las propiedades de este modelo, como vamos aver enseguida. La salida de este comando contiene, bajo el nombre coefficients, los valores deb0 y b1. Concretamente, el valor de b1, la pendiente, aparece bajo x, porque b0 es el coeficiente que

    19

  • acompaa a la x en la ecuaciny = b0 + b1 x

    de la recta. El valor de b0 aparece bajo (Intercept) porque ese es el nombre que se le da, eningls, a la ordenada en el origen.

    A primera vista, parece que no hemos ganado gran cosa, aparte de una forma rpida de llegar a loscoeficientes de la recta. Pero en realidad el modelo, creado mediante lm, tiene asociadas muchaspropiedades. Para ver algunas de ellas utiliza este comando:

    summary(lmXY)

    #### Call:## lm(formula = y ~ x, data = datos)#### Residuals:## Min 1Q Median 3Q Max## -0.01363 -0.01164 -0.00158 0.00744 0.02287#### Coefficients:## Estimate Std. Error t value Pr(>|t|)## (Intercept) 0.9828 0.0160 61.6 5.4e-12 ***## x -0.4808 0.0208 -23.1 1.3e-08 ***## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1#### Residual standard error: 0.0138 on 8 degrees of freedom## Multiple R-squared: 0.985,Adjusted R-squared: 0.983## F-statistic: 536 on 1 and 8 DF, p-value: 1.29e-08

    Como ves, R ha calculado muchas ms propiedades de las que pareca. De hecho, insistimos, alusar summary slo estamos viendo una parte de las propiedades disponibles.

    La ventaja de haber guardado el modelo en la variable lmXY es que ahora podemos usar la notacincon lmXY$ para acceder a esas propiedades. Prueba a escribir precisamente eso, lmXY$ en RStudio,y pulsa el tabulador. Aparecer una lista de posibilidades, de la que vamos a ver el valor de laprimera opcin que R nos ofrece:

    lmXY$coefficients

    ## (Intercept) x## 0.98276 -0.48082

    Como ves, lmXY$coefficients es un vector cuyos valores son b0 y b1. As que puedes hacer, porejemplo

    b0 = lmXY$coefficients[1]

    para guardar la ordenada en el origen en la variable b0.

    Con esta notacin lm es muy fcil acceder, por ejemplo, a los valores predichos y a los residuos delmodelo. Basta con usar, respectivamente, los comandos

    lmXY$fitted.values

    ## 1 2 3 4 5 6 7 8 9## 0.86255 0.76158 0.63176 0.61733 0.60772 0.59810 0.58849 0.54521 0.53560## 10## 0.52598

    y

    20

  • lmXY$residuals

    ## 1 2 3 4 5 6## -0.0136288 0.0152918 0.0063964 0.0228680 -0.0119545 0.0031498## 7 8 9 10## -0.0129175 -0.0062996 -0.0106943 0.0077887

    Los valores predichos que aparecen aqu corresponden a los valores de la variable x en los puntosde la muestra. Enseguida veremos como usar lm para hacer predicciones en valores de x que noaparecen en la muestra.

    Otra ventaja de usar lm es que muchas funciones de R reconocen un objeto de tipo modelo lineal,y responden de forma interesante ante ese tipo de objetos.

    Ejercicio 7.

    1. Qu tipo de objeto de R es lmXY? Indicacin: No es un vector, ni un data.frame, nininguno de los tipos con los que nos hemos encontrado en los tutoriales previos. Recuerda,cul es la funcin que se usa en R para preguntar por el tipo de objeto?

    2. Para ver un ejemplo de lo que decimos, prueba a ejecutar estos comandos:

    plot(x, y)abline(lmXY)

    Lo interesante, en este caso, es el segundo comando, que nos permite aadir la recta deregresin al grfico sin necesidad de especificar los coeficientes.

    A la vista del segundo apartado de este ejercicio, puede que te hayas preguntado si no se puedehacer, directamente,

    plot(lmXY)

    Y la respuesta es que s se puede, pero el significado es otro. Lo que se obtiene no es lo queseguramente esperabas, sino una serie de grficos, que son muy tiles para hacer el diagnstico delmodelo de regresin lineal simple, en el sentido que se discute en la Seccin 10.4.2 (pg. 389) dellibro. Los vamos a discutir con ms detalle en la Seccin

    Usando lm para predecir valores.

    Otro uso muy frecuente de la funcin lm es la prediccin de valores usando el modelo de regresinlineal. Por ejemplo, para predecir el valor correspondiente a x = 0.74 en el ejemplo que estamosusando haramos:

    predict(lmXY, newdata = data.frame(x=0.74))

    ## 1## 0.62695

    El resultado es el mismo que si sustituyeras ese valor en la recta de regresin:

    lmXY$coefficients[1] + lmXY$coefficients[2] * 0.74

    ## (Intercept)## 0.62695

    En este caso hemos usado predict para predecir un nico valor, pero no hay nada que nos impidaobtener la prediccin para todo un vector de valores de x. Por ejemplo, para predecir usando todoslos valores de x de 0.7 a 0.75, de dcima en dcima, haramos:

    21

  • predict(lmXY, newdata = data.frame(x=seq(0.70, 0.75, length.out = 6)))

    ## 1 2 3 4 5 6## 0.64618 0.64138 0.63657 0.63176 0.62695 0.62214

    Y te adelantamos que cuando aprendas ms sobre R comprobars que se puede usar predict conmuchos otros tipos de modelos estadsticos, ms all del modelo de regresin lineal simple queestamos usando aqu.

    Anova y lm

    Para ver otro ejemplo de la funcin lm en accin, podemos usarla, en combinacin con la funcinanova de R, para obtener el anlisis de la varianza (y varios resultados ms, asociados con eseanlisis de la varianza, en los que no podemos entrar porque an no tenemos el lenguaje):

    (anovaLMxy = anova(lmXY))

    ## Analysis of Variance Table#### Response: y## Df Sum Sq Mean Sq F value Pr(>F)## x 1 0.1017 0.1017 536 1.3e-08 ***## Residuals 8 0.0015 0.0002## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

    Como hemos dicho, en esta seccin no queremos sino hacer una primera breve visita a la funcin lm.A medida que el lector vaya aprendiendo ms Estadstica y ms sobre R, podemos asegurar que lmser un buen compaero de viaje, que iremos usando para operaciones cada vez ms sofisticadas.

    3.1. Regresin ortogonal con R.

    En la Seccin 10.2.2 del libro (pg. 364) hemos descrito otras posibilidades a la hora de elegir lamejor recta para representar a una coleccin de puntos (xi, yi), distintas de la que proporciona elmtodo de mnimos cuadrados. En particular, hemos hablado de regresin ortogonal y de RMA.En R disponemos de la librera lmodel2 con la que es muy fcil obtener las rectas de regresincorrespondientes a estos modelos. Recuerda que debes instalar la librera antes de poder usarla.

    Vamos a ilustrar el uso de esa librera con los datos del Ejemplo 10.2.2 del libro (pg. 366). Esospuntos se han fabricado con este cdigo:

    set.seed(2014)(x = sort(rnorm(10, mean=5, sd=3)))

    ## [1] 1.1368 3.3030 5.3758 5.8008 5.9631 5.9677 6.1991 6.3765## [9] 9.0597 11.4506

    (y = x/2 + 1 + rnorm(10, mean=0, sd=3))

    ## [1] 4.8271 2.7622 4.8517 3.4673 1.8192 6.7416 3.6033 9.7035 5.9516 8.7183

    Y podemos usar la librera lmodel2 para obtener las rectas de regresin correspondientes a losdistintos modelos:

    library(lmodel2)(lm2XY = lmodel2(y~x,range.y="relative", range.x="relative" ))

    ## No permutation test will be performed

    22

  • #### Model II regression#### Call: lmodel2(formula = y ~ x, range.y = "relative", range.x =## "relative")#### n = 10 r = 0.49461 r-square = 0.24464## Parametric P-values: 2-tailed = 0.14614 1-tailed = 0.073069## Angle between the two OLS regression lines = 37.249 degrees#### Regression results## Method Intercept Slope Angle (degrees) P-perm (1-tailed)## 1 OLS 2.50782 0.45136 24.293 NA## 2 MA 0.20139 0.83175 39.752 NA## 3 SMA -0.28854 0.91256 42.382 NA## 4 RMA -0.72097 0.98387 44.534 NA#### Confidence intervals## Method 2.5%-Intercept 97.5%-Intercept 2.5%-Slope 97.5%-Slope## 1 OLS -1.7726 6.7883 -0.195259 1.098## 2 MA -58.0294 5.7774 -0.087878 10.436## 3 SMA -5.4575 2.3839 0.471804 1.765## 4 RMA 72.5505 4.8711 0.061598 -11.101#### Eigenvalues: 10.785 3.5859#### H statistic used for computing C.I. of MA: 0.49606

    Y una vez obtenidos los modelos vamos a compararlos grficamente para constatar que, al menosen este ejemplo, los resultado son claramente distintos:

    plot(x,y, pch=20, cex=1.5)(MinCuad = lm2XY$regression.results[1, ])

    ## Method Intercept Slope Angle (degrees) P-perm (1-tailed)## 1 OLS 2.5078 0.45136 24.293 NA

    abline(MinCuad$Intercept, MinCuad$Slope, col="red", lwd=2, lty=1)(MAR = lm2XY$regression.results[2, ])

    ## Method Intercept Slope Angle (degrees) P-perm (1-tailed)## 2 MA 0.20139 0.83175 39.752 NA

    abline(MAR$Intercept, MAR$Slope, col="darkgreen", lwd=2, lty=4)(SMA = lm2XY$regression.results[3, ])

    ## Method Intercept Slope Angle (degrees) P-perm (1-tailed)## 3 SMA -0.28854 0.91256 42.382 NA

    abline(SMA$Intercept, SMA$Slope, col="blue", lwd=2, lty=2)(lmXY = lm(x~y))

    #### Call:## lm(formula = x ~ y)#### Coefficients:## (Intercept) y## 3.221 0.542

    23

  • (blmXY1 = 1/lmXY$coefficients[2])

    ## y## 1.845

    (blmXY0 = -lmXY$coefficients[1]/lmXY$coefficients[2])

    ## (Intercept)## -5.9422

    abline(blmXY0, blmXY1, col="magenta", lwd=2, lty=3)

    2 4 6 8 10

    24

    68

    10

    x

    y

    Desde luego, en ejemplos en los que la correlacin es muy alta, la diferencia entre los disitntosmodelos no es, ni mucho menos, tan acusada.

    4. Inferencia en la regresin, usando R.

    Opcional: esta seccin puede omitirse en una primera lectura.

    24

  • 4.1. Simulando un modelo de regresin lineal simple en R

    Recordemos la Ecuacin 10.20(pg. 384) del libro, que define el modelo de regresin lineal simple:

    y = 0 + 1 x+

    siendo N(0, ). Es fcil hacer una simulacin de un modelo como este en R. Para obtener lospuntos ruidosos del Ejemplo 10.3.3 del libro basta con ejecutar este cdigo, que explicaremos acontinuacin:

    rm(list=ls())set.seed(2013)n = 10(x = sort(signif(runif(n, min=0, max=1 ), digits=2) ) )

    ## [1] 0.25 0.46 0.73 0.76 0.78 0.80 0.82 0.91 0.93 0.95

    beta0 = 1beta1 = -1/2(y = beta0 + beta1 * x + rnorm(n,sd=0.01))

    ## [1] 0.84892 0.77687 0.63816 0.64020 0.59576 0.60125 0.57557 0.53891## [9] 0.52490 0.53377

    Como ya sabemos, las dos primeras lneas sirven, respectivamente, para hacer limpieza de lasvariables de R, y para hacer que el generador de nmeros pseudoaleatorios de R produzca siemprelos mismos valores. En las lneas 3 y 4 hemos usado runif para generar 10 valores de la variable x,usando la distribucin uniforme en el intervalo (0, 1). La parte ms importante del cdigo est enlas lneas 5 a 7, en las que hemos fijado los valores de beta0, 1 y hemos construido una muestradel modelo de regresin normal simple, por el procedimiento de sumar la parte que corresponde ala recta a una componente aleatoria normal. En el libro los valores de y aparecen redondeados.

    Esquemticamente, para ver la correspondencia entre la teora y el cdigo en R:

    y y

    = 0 + 1 x beta0 + beta1 * x

    + rnorm(n,sd=0.01)

    .

    Es muy importante entender que lo que obtenemos, en el vector yRuido de R, es una muestradel modelo terico. As que, aunque la recta terica (poblacional) es

    y = 0 + 1 x,

    y en este ejemplo

    0 = 1, 1 =12,

    cuando calculemos la recta de regresin a partir de los vectores x e y, obtendremos una recta

    y = b0 + b1 x,

    en la que, desde luego,0 6= b0, 1 6= b1.

    Concretamente, usando lo que hemos aprendido en las secciones previas de este tutorial, esa rectase obtiene con:

    (lmXY= lm(y~x) )

    #### Call:## lm(formula = y ~ x)#### Coefficients:## (Intercept) x## 0.983 -0.481

    25

  • Como ves, los valores sonb0 0.983, b1 0.481,

    que se parecen, a 0 y 1, pero ciertamente no coinciden, como queda de manifiesto en la Figura10.16 (pg. 375) del libro.

    4.2. Intervalos de confianza para los coeficientes de la recta de regresin

    Vamos a ver otro ejemplo de una situacin en la que la funcin lm nos hace la vida mucho msfcil. En la Seccin 10.4.1, y concretamente en la Ecuacin 10.23 (pg. 387) hemos visto comoconstruir un intervalo de confianza para la pendiente 1 de la recta poblacional. Si quisiramosobtener adems un intervalo para 0, deberamos usar el estadstico de la Ecuacin 10.27 (pg.389) del libro, y deducir a partir de este estadstico el intervalo. Hacer esos clculos, aplicandoesas frmulas, y con ayuda de la funcin qt, no es demasiado complicado. Como muestra de loque decimos, los valores del Ejemplo 10.4.1 (pg. 387) se pueden obtener as, despus de aplicar elfichero Tut10-RectaRegresion.R a los datos de este Ejemplo:

    (talfamedios = qt(0.975, df=n - 2))

    ## [1] 2.306

    ECM = EC / (n-1)(intConfBeta1 = b1 + c(-1,1) * talfamedios * sqrt(ECM /((n-2) * var(x))))

    ## [1] -0.52872 -0.43292

    Es muy fcil hacer esto, despus de calcular los coeficientes de la recta y el error cuadrtico medio.Pero es que hay una manera mucho ms sencilla, en una sola instruccin y usando las funcioneslm y confint (de confidence interval). Sera as:

    confint(lmXY, level=0.95)

    ## 2.5 % 97.5 %## (Intercept) 0.94596 1.01956## x -0.52872 -0.43292

    Como ves, el resultado son los dos intervalos de confianza, en la primera lnea (identificado porintercept) el de la ordenada en el origen 0 , y en la segunda el de la pendiente (identificado porx).

    4.3. Verificando las condiciones del modelo

    En la Seccin 10.4.2 (pg. 389) del libro hemos visto que el anlisis de los residuos era la clave paraverificar que se cumplen las condiciones necesarias para que la inferencia basada en la regresinsea vlida. Vamos a ver, en esta seccin, como usar R para ese anlisis de los residuos.

    Una de las primeras cosas que hemos mencionado es que en el anlisis lo habitual es trabajar conlos residuos estudentizados. No queremos entrar en una discusin tcnica de las razones que haydetrs de esto, ni de cmo se definen esos residuos estudentizados. Lo que s queremos hacer esmostrar al lector lo fcil que es obtener estos residuos con R (debes haber instalado la libreraMASS, que ya hemos usado en algn otro tutorial):

    library(MASS)(residuosSt = stdres(lmXY))

    ## 1 2 3 4 5 6 7 8## -1.65793 1.30566 0.48954 1.75098 -0.91678 0.24219 -0.99682 -0.50095## 9 10## -0.85894 0.63269

    26

  • Y una vez hecho esto, basta con usar las funciones hist y boxplot para obtener las partes (a) y(b) de la Figura 10.19 (pg. 391) del libro. En la parte (c) de esa figura hemos incluido un grficode tipo qq-plot, que se obtiene en R haciendo, simplemente

    qqnorm(residuosSt)qqline(residuosSt)

    1.5 1.0 0.5 0.0 0.5 1.0 1.5

    1.

    5

    1.0

    0.

    50.

    00.

    51.

    01.

    5

    Normal QQ Plot

    Theoretical Quantiles

    Sam

    ple

    Qua

    ntile

    s

    La primera instruccin (con qqnorm) dibuja los puntos del qq-plot, mientras que la segunda (conqqline) aade la recta para que sea ms fcil comprobar si el grfico se ajusta a lo que esperamosen caso de una distribucin normal de los residuos. En esta, y en otras figuras que se incluyen en elcurso, hemos aadido decoracin (colores, etiquetas, etc.) al grfico, usando instrucciones comolas que hemos visto en la Seccin 2.5 de este tutorial.

    Ya hemos dicho, en esa seccin, que aunque estos anlisis grficos son muy tiles, a veces esconveniente complementarlos con un contraste de normalidad ms formal. Existe una librera enR, llamada gvlma (de Global Validation of Linear Models Assumptions) que, actuando sobre unmodelo producido con lm, realiza una serie de contrastes sobre las hiptesis del modelo, y nosresume en la respuesta si esas condiciones se verifican. Recuerda que, para usarla, es necesarioprimero instalar esa librera. Una vez hecho eso, los resultados se obtienen as:

    library(gvlma)

    ## Error in library(gvlma): there is no package called gvlma

    gvlma(lmXY)

    ## Error in eval(expr, envir, enclos): no se pudo encontrar la funcion "gvlma"

    Fjate, en particular, en que tambin se ha comprobado la hiptesis de homocedasticidad (homo-geneidad de las varianzas). Para comprobar esta condicin, pero usando mtodos grficos, se acudea menudo a representar los residuos estudentizados frente a los valores que predice el modelo. Esegrfico se obtiene simplemente haciendo:

    27

  • plot(lmXY$fitted.values, residuosSt)

    0.55 0.60 0.65 0.70 0.75 0.80 0.85

    1.

    5

    0.5

    0.0

    0.5

    1.0

    1.5

    lmXY$fitted.values

    resi

    duos

    St

    y luego le podemos aadir toda la decoracin necesaria, claro. Hay que tener en cuenta, en cualquiercaso, que el anlisis de una muestra tan pequea siempre resulta difcil.

    Siguiendo con el tema de los diagnsticos grficos del modelo de regresin, en su momento dijimosque la funcin plot, aplicada directamente a un modelo lineal como el objeto lmXY no produciracomo resultado el diagrama de dispersin de ese modelo, como tal vez esperaramos. El resultadode plot(lmXY) es, no un grfico, sino la serie de cuatro grficos que (para el Ejemplo 10.3.3 dellibro que estamos usando) se muestra en la Figura 6 (pg. 29), y que tienen como objeto ayudaral diagnstico de las condiciones de aplicabilidad del modelo de regresin lineal. En RStudio, alejecutar plot(lmXY), en la consola de comandos aparece este mensaje:

    Hit to see next plot:

    y debemos situarnos en la consola y pulsar la tecla Entrar (o Return, o ) para avanzar porestos grficos.

    El primero de esos grficos es precisamente una versin ms elaborada del diagrama residuosvs. predichos que acabamos de aprender a construir. El siguiente es el qq-plot de los residuosestudentizados que tambin hemos comentado. El tercero es otra versin de residuos vs. predichos,que no vamos a discutir, y el cuarto tiene que ver con el contenido del prximo apartado. As quevolveremos all sobre este grfico.

    4.4. Residuos atpicos y puntos influyentes

    Vamos a empezar por el ltimo de la serie de grficos que se obtienen con plot(lmXY) (ver Figura 6,pg. 29). En este grfico aparece representado el valor de la denominada distancia de Cook para cadauno de los puntos de la muestra. La medida de Cook es una forma habitual de medir la influenciade un punto sobre el modelo de regresin, en el sentido que hemos discutido en la Seccin 10.4.3del libro (pgina 392). No vamos a entrar en los detalles de cmo se define y calcula esa distancia,y nos limitaremos a decir que se suele utilizar, como referencia, el criterio de que un punto con unvalor de la distancia de Cook mayor que uno es un punto influyente. En nuestro ejemplo, la figuramuestra que uno de los puntos de la muestra es influyente. Adems, para ayudarnos a localizarlo,R lo ha rotulado con la posicin que ocupa dentro de la muestra, que es 1, la primera posicin.El punto es (0.25, 0.84892), que es el punto situado ms a la izquierda en la Figura 10.16 del libro(pg. 375). Puedes explicar, usando esa figura, la razn de que este punto sea influyente?

    28

  • 0.55 0.65 0.75 0.85

    0.

    010.

    01

    Fitted values

    Res

    idua

    ls

    Residuals vs Fitted4

    2

    1

    1.5 0.5 0.5 1.5

    1

    01

    2

    Theoretical Quantiles

    Sta

    ndar

    dize

    d re

    sidu

    als Normal QQ

    4

    1

    2

    0.55 0.65 0.75 0.85

    0.0

    0.4

    0.8

    1.2

    Fitted values

    Sta

    ndar

    dize

    d re

    sidu

    als

    ScaleLocation4 1

    2

    0.0 0.2 0.4 0.6

    2

    1

    01

    2

    Leverage

    Sta

    ndar

    dize

    d re

    sidu

    als

    Cook's distance10.5

    0.51

    Residuals vs Leverage

    1

    24

    Figura 6: Serie de grficos que se obtiene al usar plot(lmXY) en R.

    En cualquier caso, para ayudarte a visualizar en general lo que significa la influencia hemos pre-parado un fichero GeoGebra,

    con el que puedes explorar las ideas que ilustra la Figura c (pg. 395. Cuando abras ese ficherovers una imagen similar a esta:

    29

    geogebra_thumbnail.png

    geogebra_javascript.js

    function ggbOnInit() {}

    geogebra.xml

  • Como ves, se trata de un diagrama de dispersin con una nube de puntos (de color verde) y unpunto adicional, el punto A (de color rojo), que es el punto que podemos mover para experimentarcon la idea de punto influyente. Adems, se muestran las rectas de regresin correspondientes a lanube de puntos sin A y tambin con A. La idea de influencia tiene que ver, precisamente, con ladiferencia entre esas dos rectas. Para entenderlo lo mejor es que muevas el punto A con el ratn,para ver como cambia la recta que lo tiene en cuenta. Puedes usar los distintos apartados de laFigura 395 del libro como gua para cubrir todas las posibilidades que pueden darse.

    En R disponemos de la funcin cooks.distance para obtener esa distancia de Cook. Aplicada alEjemplo 10.3.3 de los puntos ruidosos del libro produce estos valores:

    cooks.distance(lmXY)

    ## 1 2 3 4 5 6 7## 2.4844717 0.3266243 0.0133412 0.1722289 0.0486853 0.0035679 0.0645098## 8 9 10## 0.0250655 0.0826111 0.0504299

    que confirman lo que vemos en la ltima grfica de las cuatro que componen la Figura 6: el primerpunto de la muestra es el nico punto influyente de este ejemplo.

    Fjate en que, en este ejemplo, aunque ese punto es influyente su residuo no es atpico (puedesusar de nuevo la Figura 10.16 del libro como ayuda para ver esto). De hecho, para comprobarsi existe algn residuo atpico podemos utilizar la funcin outlierTest de la librera car de R.Esta funcin realiza un tipo de contraste de hiptesis (basado en la t de Student) para analizar laposible existencia de residuos atpicos. El resultado en este ejemplo es:

    library(car)

    ## Warning: package car was built under R version 3.3.2

    #### Attaching package: car

    ## The following objects are masked from package:BSDA:

    30

  • #### Vocab, Wool

    ## The following object is masked from package:gtools:#### logit

    outlierTest(lmXY)

    #### No Studentized residuals with Bonferonni p < 0.05## Largest |rstudent|:## rstudent unadjusted p-value Bonferonni p## 4 2.0856 0.075462 0.75462

    En este caso, la frase No Studentized residuals with Bonferonni p < 0.05 nos informa deque no existen residuos atpicos. Si hubiera residuos atpicos, la funcin nos los devolvera comoresultado. En este caso, al no existir residuos atpicos la funcin se limita a indicar cul es el puntocuyo residuo tiene el mayor valor (absoluto), sin llegar a ser atpico.

    La matriz H

    Volvamos a la medida de la influencia. En la Seccin 10.4.3 del libro (pg. 392) hemos visto quela matriz H, la llamada matriz sombrero, permite medir fcilmente la influencia de cada puntode la muestra. En particular, nos interesan los valores de la diagonal de esta matriz, que en R seobtienen muy fcilmente as:

    hatvalues(lmXY)

    ## 1 2 3 4 5 6 7 8 9## 0.64384 0.27704 0.10018 0.10100 0.10382 0.10846 0.11492 0.16650 0.18297## 10## 0.20126

    Para usar estos valores como medida de la influencia utilizamos el criterio de comparar los valoressombrero (hatvalues) con el valor 4/n:

    4/n

    ## [1] 0.4

    hatvalues(lmXY) > (4 / n)

    ## 1 2 3 4 5 6 7 8 9 10## TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

    Como puedes ver, el resultado confirma lo que ya habamos establecido usando la distancia deCook: el nico punto influyente de esta muestra es el primer punto.

    4.5. Bandas de confianza y prediccin en R.

    En la Seccin 10.4.4 del libro (pg. 398) hemos visto cmo se pueden definir las bandas de confianzay prediccin para un modelo de regresin lineal simple que aparecen en la Figura 10.23 (pg. 401.Vamos a usar R para construir esas bandas, concretamente con la funcin predict que ya hemosencontrado en la pgina 21 de este tutorial.

    Vamos a empezar por fabricar los datos del Ejemplo 10.3.3 del libro (pg. 372) y representarlos enun diagrama de dispersin, junto con la recta de regresin que obtenemos con lm. Tambin hemosaadido unos segmentos que ilustran los residuos de cada uno de los puntos de la muestra:

    31

  • set.seed(2013)n=10x = sort(signif(runif(n, min=0, max=1 ), digits=2) )y = 1 - (x/2) + rnorm(n,sd=0.01)plot(x, y, pch=4, lwd=2, col="black", cex.lab=1.1, cex.axis=1.1)box(lwd=2)lmXY = lm(y ~ x)abline(lmXY, lwd=2, col="blue")segments(x,fitted(lmXY), x, y, lwd=2)

    0.3 0.4 0.5 0.6 0.7 0.8 0.9

    0.55

    0.65

    0.75

    0.85

    x

    y

    A continuacin vamos a crear una sucesin de puntos que cubran todo el recorrido de valores de xen la muestra. Usaremos un total de 50 puntos, pero puedes usar ms para conseguir mayor nivelde detalle.

    pred.x = seq(min(x), max(x), length.out=50)

    Ahora viene el paso clave. Usamos predict para crear los intervalos de confianza y prediccin paracada uno de los puntos de pred.x. La opcin int de predict nos permite seleccionar el tipo deintervalo que se crea en cada caso. Usaremos un nivel de confianza del 95%. El resultado son dosdata.frames de los que mostramos las primeras lneas:

    predct.intrvl = predict(lmXY, int="p", newdata=data.frame(x = pred.x), level=0.95)confd.intrvl = predict(lmXY, int="c", newdata=data.frame(x = pred.x), level=0.95)head(predct.intrvl)

    ## fit lwr upr## 1 0.86255 0.82183 0.90328## 2 0.85568 0.81535 0.89602## 3 0.84882 0.80886 0.88877## 4 0.84195 0.80237 0.88153## 5 0.83508 0.79586 0.87429## 6 0.82821 0.78935 0.86707

    32

  • head(confd.intrvl)

    ## fit lwr upr## 1 0.86255 0.83707 0.88804## 2 0.85568 0.83082 0.88054## 3 0.84882 0.82458 0.87305## 4 0.84195 0.81833 0.86556## 5 0.83508 0.81208 0.85807## 6 0.82821 0.80583 0.85059

    Como ves, en ambos casos se obtiene un data.frame con tres columnas que contienen, respectiva-mente el centro y los extremos inferior y superior del intervalo correspondiente, ya sea de prediccino de confianza.

    El trabajo duro ya est hecho, ahora slo hay que representar grficamente esas bandas de pre-diccin y confianza. Para eso lo ms cmodo es usar la funcin matlines que nos va a permitirdibujar en un mismo grfico simultneamente los valores de varias columnas de una matriz. Paraque lo entiendas en un ejemplo sencillo, vamos a usar matlines para dibujar en un mismo grficolas curvas y = sen(x), y = cos(x) e y = sen(3x). Lo haremos creando primero una sucesin de 200puntos x distribuidos uniformemente de 0 a 2:

    x = seq(0, 2 * pi, length.out=200)

    Y ahora hacemos el grfico con matlines. Primero dibujamos una de las curvas con plot y laopcin type="n". Este comando crea una ventana grfica de las dimensiones adecuadas, pero nodibuja nada en ella (por el tyype="n"), en la que luego matlines se encargar de aadir lasgrficas. Hemos elegido adems los colores y tipo de trazo de las curvas:

    plot(x, sin(x), type="n")matlines(x, cbind(sin(x), cos(x), sin(2*x), lwd=3),

    col=c("red", "blue", "black"), lty=1)

    0 1 2 3 4 5 6

    1.

    00.

    01.

    0

    x

    sin(

    x)

    Volviendo al dibujo de las bandas de confianza y prediccin, el lmite superior de la banda deprediccin es una curva que recorre los extremos superiores de los intervalos de prediccin paracada punto del recorrido de la variable x en los puntos de la muestra. Y anlogamente para el restode curvas que definen las bandas de prediccin y confianza. Podemos, por tanto, usar matlines paraaadir esas bandas al grfico de dispersin anterior, usando las columnas 2 y 3 de los data.framesque hemos construido para almacenar esas bandas. La nica diferencia con el grfico original esten las dos ltimas instrucciones:

    set.seed(2013)n=10

    33

  • x = sort(signif(runif(n, min=0, max=1 ), digits=2) )y = 1 - (x/2) + rnorm(n,sd=0.01)plot(x, y, pch=4, lwd=2, col="black", cex.lab=1.1, cex.axis=1.1)box(lwd=2)lmXY = lm(y ~ x)abline(lmXY, lwd=2, col="blue")segments(x,fitted(lmXY), x, y, lwd=2)matlines(pred.x, predct.intrvl[ ,2:3], lty=c(1, 1, 1), col="red", lwd=2)matlines(pred.x, confd.intrvl[ ,2:3], lty=c(1, 1, 1), col="darkgreen", lwd=2)

    0.3 0.4 0.5 0.6 0.7 0.8 0.9

    0.55

    0.60

    0.65

    0.70

    0.75

    0.80

    0.85

    x

    y

    A diferencia de lo que hemos hecho en el libro, aqu hemos usado curvas de trazo continuo para ellmite de las grficas. Puedes cambiar los valores de lty para experimentar otras posibilidades.

    4.6. El cuarteto de Anscombe en R.

    En R, como parte de la instalacin bsica, disponemos de un dataframe llamado anscombe, convariables x1, x2, x3, x4, y1, y2, y3, y4, y que contiene los valores de estos ejemplos. Paraverlos basta con que hagas:

    anscombe

    ## x1 x2 x3 x4 y1 y2 y3 y4## 1 10 10 10 8 8.04 9.14 7.46 6.58

    34

  • ## 2 8 8 8 8 6.95 8.14 6.77 5.76## 3 13 13 13 8 7.58 8.74 12.74 7.71## 4 9 9 9 8 8.81 8.77 7.11 8.84## 5 11 11 11 8 8.33 9.26 7.81 8.47## 6 14 14 14 8 9.96 8.10 8.84 7.04## 7 6 6 6 8 7.24 6.13 6.08 5.25## 8 4 4 4 19 4.26 3.10 5.39 12.50## 9 12 12 12 8 10.84 9.13 8.15 5.56## 10 7 7 7 8 4.82 7.26 6.42 7.91## 11 5 5 5 8 5.68 4.74 5.73 6.89

    Vamos a comprobar lo que hemos dicho sobre los valores comunes a las cuatro muestras. Usaremosapply para calcular la media y cuasivarianza por columnas del data.frame:

    apply(anscombe, 2, mean)

    ## x1 x2 x3 x4 y1 y2 y3 y4## 9.0000 9.0000 9.0000 9.0000 7.5009 7.5009 7.5000 7.5009

    apply(anscombe, 2, var)

    ## x1 x2 x3 x4 y1 y2 y3 y4## 11.0000 11.0000 11.0000 11.0000 4.1273 4.1276 4.1226 4.1232

    Para calcular la covarianza de cada una de las muestras hacemos un pequeo truco con sapply yuna funcin annima. Es un poco ms avanzado que otras cosas que hemos hecho con R, pero sino lo entiendes siempre puedes hacer las cuentas ms a mano:

    sapply(1:4, function(x){cov(anscombe[ ,x], anscombe[ , x + 4])})

    ## [1] 5.501 5.500 5.497 5.499

    Y para el coeficiente de correlacin un truco anlogo:

    sapply(1:4, function(x){cor(anscombe[ ,x], anscombe[ , x + 4])})

    ## [1] 0.81642 0.81624 0.81629 0.81652

    Para dibujar de forma sencilla uno de estos ejemplos puedes hacer:

    (lmA1=lm(anscombe[, 5] ~ anscombe[ , 1]))

    #### Call:## lm(formula = anscombe[, 5] ~ anscombe[, 1])#### Coefficients:## (Intercept) anscombe[, 1]## 3.0 0.5

    plot(anscombe[ , 1], anscombe[ , 5], col="red", lwd=4, cex=2)abline(lmA1, col="blue", lwd=4)box(lwd=3,bty="o")

    35

  • 4 6 8 10 12 14

    45

    67

    89

    10

    anscombe[, 1]

    ansc

    ombe

    [, 5]

    Si lo que queremos es un diagnstico sencillo de este modelo de regresin podemos hacer:

    studres(lmA1)

    ## 1 2 3 4 5 6 7## 0.031345 -0.040845 -2.081099 1.126800 -0.139801 -0.038196 1.116959## 8 9 10 11## -0.704581 1.838330 -1.568460 0.156809

    outlierTest(lmA1)

    #### No Studentized residuals with Bonferonni p < 0.05## Largest |rstudent|:## rstudent unadjusted p-value Bonferonni p## 3 -2.0811 0.070994 0.78093

    hatvalues(lmA1)

    ## 1 2 3 4 5 6 7 8## 0.100000 0.100000 0.236364 0.090909 0.127273 0.318182 0.172727 0.318182## 9 10 11## 0.172727 0.127273 0.236364

    hatvalues(lmA1) > 2 * mean(hatvalues(lmA1))

    ## 1 2 3 4 5 6 7 8 9 10 11## FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

    cooks.distance(lmA1)

    ## 1 2 3 4 5 6## 0.000061398 0.000104247 0.489209276 0.061636999 0.001599342 0.000382900## 7 8 9 10 11## 0.126756485 0.122699896 0.279029593 0.154341222 0.004268011

    36

  • gvlma(lmA1)

    ## Error in eval(expr, envir, enclos): no se pudo encontrar la funcion "gvlma"

    Te proponemos unos ejercicios adicionales para completar el estudio del cuarteto de Anscombe:

    Ejercicio 8.

    1. Interpreta los resultados anteriores en trminos de la validez del modelo, presencia de puntosinfluyentes, etc.

    2. Usa la funcin plot para hacer un diagnstico grfico de este modelo de regresin.

    3. Haz un diagnstico de los modelos de regresin lineal simples correspondientes a los otrostres integrantes del cuarteto.

    La advertencia fundamental que hay que extraer de estos cuatro ejemplos es que el coeficiente decorrelacin r, no puede servir por si mismo como indicador de la calidad de un modelo de regresinlineal. Pero, abundando en esa direccin, tambin hay que observar que ningn anlisis de regresinpuede considerarse completo si no se incluye la exploracin de los datos (y lo mismo sirve paracualquier anlisis estadstico). La exploracin grfica, pero tambin un anlisis minucioso de lascondiciones del modelo, son herramientas imprescindibles, sin las cuales corremos el riesgo de quenuestras conclusiones carezcan de fundamento.

    5. Modelos de regresin, ms all de las rectas.

    Opcional: esta seccin puede omitirse en una primera lectura.

    La Seccin 10.5 del libro (pg. 404) comienza con el Ejemplo 10.5.1, en el que mediante un cambiode variable reducimos la construccin de un modelo de la forma

    y = a0 xa1

    a la de un modeloy = b0 + b1 x.

    donde x = lnx,

    y = ln y,

    b0 = ln a0,

    b1 = a1,

    Los puntos de ese ejemplo se han construido en R con este cdigo

    set.seed(2014)n=20x=sort(signif(runif(n,min=10,max=25),digits=3))y=round(3e-4 * x^(26/7) * exp(rnorm(n, 0, 0.1)),digits=1)

    Puedes ver por qu ese cdigo produce una coleccin de puntos adecuada para el modelo que nosplanteamos en este ejemplo? Fjate en particular en el trmino de error exp(rnorm(n, 0, 0.1)que nos garantiza que una vez aplicado el cambio de variable podremos aplicar con xito un modelolineal simple.

    Ejercicio 9.

    1. Usa R para construir los puntos (x, y) de este ejemplo. Recuerda que el logaritmo neperianose obtiene en R con log.

    2. Construye (usando una plantilla o la funcin lm) el modelo lineal para esa muestra de puntos(x, y), y comprueba los resultados del Ejemplo 10.5.1 del libro.

    37

  • 3. Adicionalmente, puedes tratar de reproducir la Figura 10.26 del libro (pg. ??) usando lafuncin curve para dibujar la funcin exponencial.

    Regresin polinmica en R.

    Vamos a aprovechar el segundo miembro del cuarteto de Anscombe para introducirnos en el terrenode la regresin polinmica con R. Ese ejemplo en particular (que aparece en la parte superiorderecha de la Figura 10.25 del libro, pg. 403) requiere el uso de una parbola en lugar de unarecta. La ecuacin de esa parbola ser de la forma:

    y = b0 + b1 x+ b2 x2

    para ciertos coeficientes b0, b1, b2.

    Cmo podemos usar R para averiguar cul es la mejor parbola posible? Es decir, para localizarlos valores adecuados de b0, b1, b2. Pues usando, de nuevo, la funcin lm, pero con una sintaxisligeramente ms complicada. Para ilustrarlo, empezamos por crear dos vectores con las coordenadasx e y de este ejemplo:

    (x = anscombe$x2)

    ## [1] 10 8 13 9 11 14 6 4 12 7 5

    (y = anscombe$y2)

    ## [1] 9.14 8.14 8.74 8.77 9.26 8.10 6.13 3.10 9.13 7.26 4.74

    Y ahora, para crear ese modelo polinmico de grado dos basta con usar este cdigo:

    (lmPolXY=lm(y ~ I(x) + I(x^2)))

    #### Call:## lm(formula = y ~ I(x) + I(x^2))#### Coefficients:## (Intercept) I(x) I(x^2)## -5.996 2.781 -0.127

    La peculiar notacin I(x) + I(x^2) se debe a que, por defecto, si escribiramos simplemente:

    lm(y ~ x + x^2)

    #### Call:## lm(formula = y ~ x + x^2)#### Coefficients:## (Intercept) x## 3.0 0.5

    R usara los denominados polinomios ortogonales, un tipo especial de polinomios que tienen pro-piedades que los hacen muy tiles en este contexto. Como de costumbre, R tiende a proporcionarla mejor solucin, pero esa, a menudo, no es la que queremos ver cuando estamos aprendiendo ahacer las cosas por primera vez. El precio que pagaremos, en este caso, es esa notacin un pocoms complicada con la I.

    Usando esa notacin, en cualquier caso, obtenemos el modelo parablico que andbamos buscando.En particular, los coeficientes b0, b1 y b2 quedan almacenados en un vector, al que podemos acceder

    38

  • usando la componente coefficients del resultado de la funcin lm. Para este ejemplo, y usandob como nombre del vector para mantener la notacin que nos es familiar, hacemos:

    (b = lmPolXY$coefficients)

    ## (Intercept) I(x) I(x^2)## -5.99573 2.78084 -0.12671

    Pero cuidado al usar este vector, porque hay un desplazamiento en los ndices: b[1], b[2] y b[3]corresponden a b0, b1 y b2 respectivamente.

    En la Figura 7 (pg. 39) se muestra la parbola que hemos obtenido, que en este caso pasaexactamente por los puntos del segundo ejemplo de Anscombe. Se muestra adems la recta deregresin que obtenemos con lm(y~x). Como puedes ver, el modelo que proporciona la recta no esadecuado. El cdigo R que hemos usado para producir esa figura es este:

    plot(anscombe[ , 2], anscombe[ , 6], col="red", lwd=2, cex=1.1)curve(b[1] + b[2] * x + b[3] * x^2,

    add = TRUE, from = 3, to = 15, col="blue", lwd=2)abline(lm(anscombe[ , 6] ~ anscombe[ , 2]), lwd=2, lty=2)

    Terminamos este apartado proponiendo al lector un ejercicio:

    Ejercicio 10. Vamos a buscar una parbola para los datos del Ejemplo 10.3.1 (pg 368) del libro.Los datos estn en el fichero:

    Cap10-EjemploRectaMalaAproximacion01.csv

    4 6 8 10 12 14

    34

    56

    78

    9

    anscombe[, 2]

    ansc

    ombe

    [, 6]

    Figura 7: Ejemplo de regresin polinmica con R.

    39

  • que puedes encontrar en el ejercicio 2(b) de la pg. 14 de este tutorial. Los valores de ese ejemplose han generado en R con el cdigo:

    set.seed(2013)(x = signif(runif(n=30, min=0, max=1 ), digits=3) )(y = signif(x-x^2+rnorm(30,sd=0.001),digits=2 ) )

    Eso significa que se basan en un modelo terico como este:

    y = 0 + 1 x+ 2 x2 + = x x2 +

    En el que hemos tomado0 = 0, 0 = 1, 2 = 1,

    y en el que el trmino de error cumple

    N(30, 0.001).

    Naturalmente, cuando obtengas b0, b1 y b2, sus valores no coincidirn exactamente con los de0 = 0, 0 = 1 y 2 = 1, pero deberan ser bastante parecidos. Para comprobar grficamente elresultado, dibuja la parbola que obtienes sobre el diagrama de dispersin de los puntos (x, y).

    6. Ejercicios adicionales y soluciones.

    Ejercicios adicionales.

    Ejercicio 11. El Ejemplo 10.4.3 del libro (pg. 390) incluye una muestra de puntos para l que lacondicin de homogeneidad de la varianza claramente no se cumple. Esa muestra de puntos se hafabricado en R con este cdigo:

    set.seed(2013)n=100(x = sort(signif(runif(n, min=0, max=1 ), digits=2) ) )(y = 1 - (x/2) + rnorm(n,sd=0.01*(1+50*x)))

    1. Dibuja el diagrama de dispersin de esa muestra de puntos.

    2. Dibuja tambin el grfico de los residuos estudentizados frente a los valores predichos queaparece en la parte (b) de la Figura 10.20 del libro (pg. 392). Para facilitarte el trabajo,los residuos estudentizados se pueden obtener con la funcin studres de la librera MASS,aplicada al modelo lineal que se obtiene con lm(y ~ x). Y recuerda que los valores predichosson la componente fitted.values de la salida de la funcin lm.

    3. Aplica la funcin gvlma (de la librera homnima) al modelo lineal para ver los diagnsticosque proporciona.

    4. Por ltimo, por qu sucede esto? Busca una explicacin en la forma en la que se han cons-truido los valores y a partir de los valores x.

    Ejercicio 12. Comprueba los resultados del Ejemplo 10.5.3 del libro (pg. 414).

    Soluciones de algunos ejercicios.

    Ejercicio 1, pg. 6

    1. Este es el caso ms simple:

    40

  • (datos = read.table("../datos/tut10-ejercicio01-1.csv", sep=",", header=TRUE))

    ## x y## 1 0.9 0.63## 2 1.4 4.38## 3 1.8 5.86## 4 1.9 6.43## 5 2.3 7.81## 6 2.5 10.05## 7 2.6 9.02## 8 2.9 11.23

    2. Basta con modificar la opcin sep:

    (datos = read.table("../datos/tut10-ejercicio01-2.csv", sep="\t", dec=",", header=TRUE))

    ## x y## 1 0.9 0.63## 2 1.4 4.38## 3 1.8 5.86## 4 1.9 6.43## 5 2.3 7.81## 6 2.5 10.05## 7 2.6 9.02## 8 2.9 11.23

    3. En este caso el fichero de datos est organizado de una manera especialmente molesta, conlos datos dispuestos en filas en lugar de columnas, separados por punto y coma, y usandocomas para los decimales. Pero con R podemos salir del paso sin demasiadas complicaciones.Los siguientes comandos te permitirn leer los datos y guardarlos en un data.frame idnticoal de los apartados anteriores:

    datos = read.table("../datos/tut10-ejercicio01-3.csv", sep=";", dec=",")datos = t(as.matrix(datos[ , -1]))datos = data.frame(datos, row.names = NULL)colnames(datos) = c("x", "y")datos

    ## x y## 1 0.9 0.63## 2 1.4 4.38## 3 1.8 5.86## 4 1.9 6.43## 5 2.3 7.81## 6 2.5 10.05## 7 2.6 9.02## 8 2.9 11.23

    El paso clave es el segundo, en el que leemos la parte numrica de los datos como una matrizusamos datos[ , -1] para excluir la primera columna), y la trasponemos con la funcin t.

    Ejercicio 2, pg. 14

    1. La frmula de la Ecuacin 10.16 del libro se obtiene con:

    with(datosPisa, {cov(rpc, pisa)/(sd(rpc) * sd(pisa))})

    2. Ejecutando

    41

  • CoeficienteCorrelacin[datosPisa]

    obtenemos 0.75277, de acuerdo con lo que se obtiene en R.

    Fin del Tutorial10. Gracias por la atencin!

    42

    Diagramas de dispersin y formato de los datos.La recta de regresin lineal.Introduccin a la funcin lm de RInferencia en la regresin, usando R.Modelos de regresin, ms all de las rectas.Ejercicios adicionales y soluciones.