Análisis de datos con R Guillermo Ayala Gallego 26 de marzo de 2014 1 2 Uno más. . 2 1 2 Índice general 1. Probabilidad: lo bueno si . . . 1.1. Experimento y probabilidad . . . . 1.2. Variable aleatoria . . . . . . . . . . 1.2.1. Función de distribución . . 1.2.2. Media y varianza . . . . . . 1.2.3. Teorema de Bayes . . . . . 1.3. Vectores aleatorios . . . . . . . . . 1.4. Distribución normal multivariante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Un 2.1. 2.2. 2.3. muy breve repaso a la Estadı́stica Algo de Estadı́stica Descriptiva, poco . . . . . . Verosimilitud . . . . . . . . . . . . . . . . . . . . Estimación . . . . . . . . . . . . . . . . . . . . . 2.3.1. Estimación insesgada de media y varianza 2.3.2. Estimación insesgada del vector de medias varianzas . . . . . . . . . . . . . . . . . . 2.4. Estimador máximo verosı́mil . . . . . . . . . . . 2.5. Contraste de hipótesis . . . . . . . . . . . . . . . 2.5.1. Test del cociente de verosimilitudes . . . 2.5.2. Test de Wald . . . . . . . . . . . . . . . . 2.5.3. Intervalos de confianza . . . . . . . . . . 3. Componentes principales 3.1. Introducción . . . . . . . 3.2. Componentes principales 3.3. Componentes principales 3.4. Un poco de teorı́a ⇑ . . . . . . . . . . . . . . . . . . . . . . . . de los datos golub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y la matriz de co. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. Análisis cluster 4.1. Algunos ejemplos . . . . . . . . . . . . . . . . . . . . 4.2. Disimilaridades . . . . . . . . . . . . . . . . . . . . . 4.2.1. Disimilaridades entre observaciones . . . . . 4.2.2. Disimilaridades entre grupos de observaciones 4.3. Cluster jerárquico . . . . . . . . . . . . . . . . . . . 4.4. Métodos de particionamiento . . . . . . . . . . . . . 4.4.1. Método de las k-medias . . . . . . . . . . . . 4.4.2. Particionamiento alrededor de los mediodes . 4.5. Silueta . . . . . . . . . . . . . . . . . . . . . . . . . 4.6. Un ejemplo completo . . . . . . . . . . . . . . . . . . 3 . . . . . . . 9 9 10 11 11 19 19 20 25 25 27 29 29 30 32 34 35 35 35 . . . . . . . . . . . . . . . . . . . . . . . . 37 37 37 45 48 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 52 55 55 58 59 65 65 70 74 77 . . . . . . . . . . . . 5. Análisis discriminante o de cómo clasificar con muestra de entrenamiento 83 5.1. Un problema de probabilidad sencillo . . . . . . . . . . . . . . . . . 86 5.2. Dos poblaciones normales . . . . . . . . . . . . . . . . . . . . . . . . 87 5.3. Dos normales multivariantes . . . . . . . . . . . . . . . . . . . . . . 87 5.4. Dos poblaciones normales multivariantes con parámetros desconocidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.5. Análisis discriminante con más de dos poblaciones normales . . . . 91 5.6. Valoración del procedimiento de clasificación . . . . . . . . . . . . . 92 5.7. Variables discriminantes canónicas o discriminantes lineales . . . . . 96 5.8. Algunos ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 6. Regresión 6.1. Regresión lineal simple . . . . . . . . . . . . . 6.2. Regresión lineal múltiple . . . . . . . . . . . . 6.3. Estimación de β . . . . . . . . . . . . . . . . 6.4. Algunos casos particulares . . . . . . . . . . . 6.5. Verosimilitud . . . . . . . . . . . . . . . . . . 6.6. Algunos ejemplos . . . . . . . . . . . . . . . . 6.7. Distribución muestral de β̂ . . . . . . . . . . 6.8. Bondad de ajuste . . . . . . . . . . . . . . . 6.9. Valoración de las hipótesis del modelo . . . . 6.10. Inferencia sobre el modelo . . . . . . . . . . . 6.11. Selección de variables . . . . . . . . . . . . . 6.11.1. Procedimientos que comparan modelos 6.11.2. Procedimientos basados en criterios . 6.12. Algunos ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 106 108 108 110 111 111 114 115 116 134 140 140 143 146 7. De cómo usar R en un tiempo razonable (no fácil, no) 7.1. Instalación y cómo trabajar con R . . . . . . . . . . . . . 7.1.1. R y Windows . . . . . . . . . . . . . . . . . . . . 7.1.2. R y Linux . . . . . . . . . . . . . . . . . . . . . . 7.2. ¿Cómo instalar un paquete? . . . . . . . . . . . . . . . . . 7.3. ¿Cómo fijar el directorio de trabajo? . . . . . . . . . . . . 7.4. Etiquetas de valor y de variable . . . . . . . . . . . . . . . 7.4.1. ¿Cómo etiquetar una variable? . . . . . . . . . . . 7.5. Elaboración de un informe a partir del código R . . . . . 7.5.1. Sweave . . . . . . . . . . . . . . . . . . . . . . . . 7.6. R y Octave/Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 160 160 160 160 161 161 161 161 161 161 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prólogo Cada vez hay más datos. Tenemos más datos introducidos en ficheros. Y esto es lo peor. Si los datos estuvieran en hojas sueltas y perdidas pues no pasa nada. Se archivan los papeles y los datos no molestan. No, ahora los propios ordenadores o bien muchas personas accediendo desde distintos lugares, tienen el mal gusto de crear unas bancos de datos cada vez mayores. Cada vez con más casos y con más variables. El problema no es conseguir datos. Los tienes a precio de saldo. Te los dan sin que los pidas. Si tienes conocidos biólogos, médicos, quı́micos, psicólogos seguro que tienen datos para analizar. Si trabajáis en un hospital, tendréis una legión de médicos (y cada vez más enfermeros) con datos. Todo el mundo tiene datos. A los que tienen cariño. Que creen que tienen mucho valor. Pero que no saben qué hacer con ellos. En el mejor de los casos algún dibujo estilo pastel (bueno, se le llama diagrama de sectores pero es un pastel) o histograma. ¡Que Dios nos libre de tanto dibujo que solo sirve para gastar papel y tinta! En estas notas se pretende (sólo se pretende) partiendo de unos conocimientos informáticos que no sean básicos y de unos conocimientos probabilı́sticos y estadı́sticos más bien básicos, llegar a poder hacer algo decente con un banco de datos. La parte de análisis descriptivo de datos se obvia. Simplemente a lo largo del curso se va utilizando y recordando. Ya está bien de perder el tiempo explicando cómo hacer un histograma si luego lo hace un programa. El tono de estas notas pretende ser ameno pues bastante tostón es lo que se cuenta. No inútil. Pero sı́ tostón. Hay que asumirlo desde un principio. Esto no es ”Sexo en Nueva York”.1 Son unas notas de Estadı́stica con R ?. 2 Este documento contiene unas notas de clase para la asignatura de Análisis de Datos de Ingenierı́a Informática de la Universidad de Valencia. Pretende en cada tema empezar desde un nivel básico de contenidos para llegar al uso de la técnica correspondiente. Es una realidad que el informático acaba realizando análisis de datos. Entre otras cosas porque suele ser la persona más a mano o bien porque ya ha programado el resto de la aplicación que también incorporar algún tipo de análisis más o menos sencillo. Y es una pena ver cómo se desaprovecha la información. Por ello en estas notas pretendo tratar rápidamente muchos temas y, además, que podamos utilizarlas. Por ello se recurre a R. Por su potencia y por su disponibilidad. Incluso en su propia casa y con una conexión a Internet no demasiado rápida puede el estudiante instalarse R y cualquier paquete que se necesite. Esto ya es bastante desde el punto de vista docente. Además, cualquier procedimiento estadı́stico está en R. Casi se puede decir, que si no lo está, no merece la pena de utilizarse. Se proponen distintos apéndices como apoyo a conceptos anteriores necesarios. Se hace un repaso rápido de los conceptos básicos de la Probabilidad en el tema 1 Sin duda, la mejor serie de televisión de la historia. Hay que verla. Las pelı́culas de después no. En cualquier caso ahora es más recomendable Girls. 2 Un anuncio de la radio (Cadena Ser para más señas) hablaba de una persona que no entendı́a porqué su profesor de Estadı́stica lo habı́a suspendido. Es de suponer que la persona que escribió el anuncio estudiarı́a Periodismo. Allı́ hay una asignatura de Estadı́stica. Claramente le ha servido. Ha hecho un anuncio y le habrán pagado por ello. 5 1. Las ideas básicas de la Estadı́stica que utilizamos en el resto del curso aparecen en el tema 2. Ambos capı́tulos con meros resúmenes que no sustituyen el repaso de muchos de los conceptos en algunos de los textos que se citan en los capı́tulos correspondientes. Estas notas están orientadas para estudiantes de Ingenierı́a Informática y por ello en muchas ocasiones se incluyen definiciones y conceptos básicos que dicho estudiante no tiene. Una introducción genérica a la Probabilidad y la Estadı́stica que es adecuado hojear pues cubre los conceptos previos es el libro de texto de Dougherty [1990]. El interés fundamental de estas notas es dar una visión muy amplia sin perder demasiado tiempo en detalles de cada técnica. En este sentido se intenta ir directo al grano con lo que eso supone de dificultad añadida. Sin embargo, tiene la compensación de ver cómo muchos de los conceptos que se estudian son reescritura uno de otro. Por fin, un signo de edad es tener que escribir las cosas para que no se nos olviden. Quizás para que uno mismo lo aprenda y para no olvidarlo después. En el fondo, todos vamos aprendiendo según lo explicamos y lo escuchamos. Sin duda, unas notas como las que siguen sólo se pueden hacer utilizando LATEX para escribir y el programa R ? 3 para realizar el análisis de los datos. Son dos herramientas imprescindibles que se complementan perfectamente. Un tratamiento estadı́stico no acaba con un código o con unos dibujos aislados. Acaba con un informe. Con frecuencia, se dedica más tiempo a explicar lo que se ha hecho, a escribir el informe, que a la preparación y tratamiento de los datos, al análisis de los datos. En este sentido, creo que una herramienta como LATEX es fundamental utilizada con R. En este texto hablamos de análisis de datos. No de LATEX. Sin embargo, uno aprende a veces cosas importantes mientras estudia otras que cree que lo son más. En este sentido, habrá referencias a LATEX. Finalmente veamos una guı́a de lectura del documento. Es muy habitual que si uno empieza a leer un texto por el principio nunca pase más allá del primer o segundo capı́tulo, y eso con suerte. Las notas están escritas de manera que se lean cada tema por separado sin más conexiones entre ellos. De modo que si quieres un pequeño repaso de Probabilidad consulta el tema 1. Si patinas un poco en lo básico de la Estadı́stica pues entonces hay que leer el tema 2. Son los únicos temas de carácter básico. Los demás van al grano. En particular si te interesa cómo reducir la dimensión del banco de datos lee el tema 3. Si el problema que te quita el sueño es cómo dadas unas variables sobre un individuo clasificarlo en uno de g posibles grupos conocidos a priori y de los cuales tienes ejemplos entonces no lo dudes y lee el tema 5. Si tienes datos y no saben si se disponen formando grupos y ni tan siquiera del número de grupos que tienes entonces has de acudir sin remisión al tema 4. Finalmente en los temas 6, ?? y ?? viene la artillerı́a pesada. Como todos sabemos los modelos lineales son el corazón de la Estadı́stica, sin ellos, otras técnicas de análisis de datos se la hubieran ventilado. Los modelos lineales es un esfuerzo colectivo que ha construido una teorı́a redonda, útil, fácil de aprender y aplicar. Parece que casi todo está previsto y bien resuelto. Los modelos lineales generalizados surgen de la envidia que todo lo corroe. Cuando la variable respuesta, en lugar de ser continua, como en los modelos lineales, es una respuesta binaria, o multinomial, o bien un conteo. ¿Qué hacer? La teorı́a de modelos lineales no se puede aplicar ni con calzadores. Sin embargo, con unos cuantos cambios técnicamente simples surgen unos modelos probabilı́sticos para analizar estos datos que son absolutamente preciosos. 3 La primera lección sobre R es cómo citar el programa. En la lı́nea de comandos escribimos citation y nos devuelve la referencia bibliográfica. Del mismo modo lo podemos hacer si utilizamos otro paquete. Por ejemplo tecleando citation(“cluster”) nos indica cómo citar el paquete cluster que utilizamos en el tema 4. 6 Un detalle práctico de enorme interés. Para programar con R en el sistema operativa Windows lo más cómodo es utilizar RWinEdt (?) mientras que si trabajamos en Linux la opción más cómoda es utilizar emacs con el paquete ESS. Se pueden encontrar detalles adicionales R. R es libre. ¿Esto significa que es malo? ¿Tiene pocas funciones? ¿Lo que tiene no es de fiar? Hay una idea muy extendida de que el precio de las cosas está ı́ntimamente relacionado con la calidad. No sé si en general es cierto. En el caso de R no lo es. Algunos artı́culos de prensa que apoyan el comentario son NYT.06.01.09, NYT.07.01.09, The New York Times, 16 de febrero de 2009. También podeis encontrar algunas empresas que, basándose en R, desarrollan productos comerciales como Revolution Computing. Finalmente algunas direcciones de interés sobre R son las siguientes: http://www.rbloggers.com/. 7 8 Capı́tulo 1 Probabilidad: lo bueno si . . . Empezamos por donde hay que empezar. Con la Probabilidad. Temida, odiada. Despreciada porque habla de juegos. Por encima de todo, útil, de una utilidad extraña. Da vergüenza hablar de Estadı́stica sin citar algo de Probabilidad. 1 Y no lo vamos a hacer. Vamos a cumplir con la papeleta. En cualquier caso, si no te manejas bien con los conceptos básicos probabilı́sticos (variable aleatoria, vector aleatorio, distribución conjunta y marginal, . . .) hay que leer algún texto. Uno muy bueno, pero no fácil de encontrar, es ?. 1.1. Experimento y probabilidad Dadas un conjunto de condiciones, un experimento, no siempre podemos predecir exactamente lo que va a ocurrir. La Probabilidad es la disciplina matemática que estudia estos experimentos. En primer lugar determinamos el conjunto de posibles resultados que se puede producir en la experiencia, es el espacio muestral, Ω. Los posibles subconjuntos de A ⊂ Ω son los sucesos aleatorios y la probabilidad no nos dice si cada suceso si va a producir o no sino que se limita a cuantificar para cada experimento la mayor o menor certidumbre que tenemos en la ocurrencia de A antes de realizar la experiencia. P (A) es como se suele denotar habitualmente la probabilidad del suceso A. Obviamente cada suceso tiene asignada una probabilidad. Han de darse unas condiciones de consistencia mı́nimas que han de verificar las distintas probabilidades de los sucesos aleatorios. Son las siguientes Definición 1 (Medida de probabilidad) P función de conjunto definida sobre los sucesos es una medida de probabilidad si: 1. (No negativa) P (A) ≥ 0 para todo A ⊂ Ω. 2. (La probabilidad del espacio muestral es uno) P (Ω) = 1. 3. (Numerablemente aditiva o σ aditiva) Si {An }n≥1 es una sucesión de sucesos disjuntos entonces X P (∪n≥1 An ) = P (An ). n≥1 1 De hecho, hay una teorı́a muy extendida que dice que podemos saber Estadı́stica sin ningún conocimiento de Probabilidad. Esta creencia se considera un nuevo tipo de enfermedad mental. Si bien en una versión leve de dicha enfermedad. 9 Ejemplo 1 Si el espacio muestral es finito y consideramos que todos los elementos que lo componen son equiprobables entonces la probabilidad de un suceso A vendrı́a dada como #(A) P (A) = (1.1) #(Ω) siendo # el cardinal del conjunto. Se comprueba con facilidad que es una medida de probabilidad que verifica la axiomática previa. Es el modelo que corresponde al concepto intuitivo de resultados equiprobables. Prácticamente todos los juegos de azar siguen un modelo como este donde varı́an los resultados posibles. Nota de R 1 (Muestreo con y sin reemplazamiento) Consideramos un conjunto finito y numeramos sus elementos de 1 a n. Nuestro espacio muestral es {1, . . . , n}. Veamos cómo extraer k elementos (con k ≤ n) sin reemplazamiento de este conjunto. La función sample es la función básica. En el siguiente código tenemos k = 6. n <- 30 omega <- 1:n sample(omega, size = 6, replace = FALSE) ## [1] 4 14 5 9 25 15 Ahora lo repetimos con reemplazamiento. sample(omega, size = 6, replace = TRUE) ## [1] 28 1.2. 2 6 26 2 7 Variable aleatoria Supongamos el experimento consistente en elegir a una individuo al azar de la Comunidad Valenciana. Obviamente el espacio muestral está formado por los distintos individuos. Si los numeramos tendrı́amos Ω = {ωi }N i=i donde N es el número total de personas de la Comunidad. Elección al azar supone que cada individuo tiene la misma probabilidad de ser elegido y viene dada por P ({ωi }) = N1 . Obviamente cuando se elige una muestra de personas pensamos en alguna caracterı́stica numérica de la misma por ejemplo su edad. Denotemos por X → R la aplicación tal que X(ω) es la edad de la persona ω. Puesto que el individuo ω es seleccionado de un modo aleatorio, también será aleatoria la cantidad X(ω). La aplicación X recibe el nombre de variable aleatoria. Si B es un subconjunto arbitrario de números reales entonces cualquier afirmación de interés sobre la variable aleatoria X suele poderse expresar como P ({ω : X(ω) ∈ B}). Por ejemplo, si nos interesa la proporción de personas que tienen 37 o más años esto supone plantearse el valor de P ({ω : X(ω) ∈ [37, +∞)}). Dos son los tipos de variables de mayor interés práctico, las variables aleatorias discretas y las continuas. Una variable aleatoria se dice discreta si toma un conjunto de valores discreto, esto es, finito o si infinito numerable. Si el conjunto de valores que puede tomar lo denotamos por D entonces se define la función de probabilidad de X como P (X = x). En estas variables se tiene que X P (a ≤ X ≤ b) = P (X = x), (1.2) a≤x≤b para cualesquiera valores reales a ≤ b. 10 Una variable aleatoria se dice continua cuando Z b P (a ≤ X ≤ b) = f (x)dx, (1.3) a para cualesquiera valores reales a ≤ b. La función f recibe el nombre de función de densidad (de probabilidad) de la variable X. De un modo genérico cuando se habla de la distribución de una variable aleatoria X hablamos de las probabilidades P (X ∈ B) para cualquier subconjunto B de R. Obviamente, para variables discretas, X P (X ∈ B) = P (X = x) (1.4) x∈B y para variables continuas Z P (X ∈ B) = f (x)dx. (1.5) A En resumen, si conocemos la función de probabilidad o la de densidad conocemos la distribución de la variable. 1.2.1. Función de distribución Se define la función de distribución de una variable aleatoria X como la función real de variable real dada por F (x) = P (X ≤ x) con x ∈ R. 1.2.2. (1.6) Media y varianza Una variable suele describirse de un modo simple mediante su media y su varianza. La media nos da una idea de alrededor de qué valor se producen los valores aleatorios de la variable mientras que la varianza cuantifica la dispersión de estos valores alrededor de laPmedia. Se definen para variables discretas como: la media es EX = µ = P x∈D xP (X = x); mientras que la varianza es var(X) = σ 2 = E(X − µ)2 = x∈D (x − µ)2 P (X = x). Habitualmente además de lap varianza se suele utilizar para medir variabilidad la desviación tı́pica dada por σ = var(X). En variables continuas las definiciones de media y varianza son las análogas sustituyendo sumatorios por integrales, de modo que la media se define =µ= R +∞ R +∞ como EX 2 2 xf (x)dx mientras que la varianza será var(X) = σ = (x − µ) f (x)dx. −∞ −∞ En tablas 1.1 y 1.2 presentamos un breve resumen de las distribuciones que vamos a utilizar en este curso. Nota de R 2 (Manejo de la distribución binomial) En R se trabaja con las distribuciones de probabilidad mediante grupos de cuatro funciones. Por ejemplo, supongamos que estamos trabajando con la binomial. Entonces la función de probabilidad es dbinom, la función de distribución es pbinom, la inversa de la función de distribución que nos da los percentiles es qbinom y, finalmente, podemos generar datos con distribución binomial mediante la función rbinom. Consideramos una binomial con 10 pruebas y una probabilidad de éxito en cada prueba de 0.23. dbinom(0:10, size = 10, prob = 0.23) ## ## [1] 7.327e-02 2.188e-01 2.942e-01 2.343e-01 1.225e-01 4.390e-02 1.093e-02 1.865e-03 [9] 2.089e-04 1.387e-05 4.143e-07 11 Distribución Bernoulli Binomial Hipergeométrica Geométrica Binomial Negativa Poisson Cuadro 1.1: Distribuciones discretas e−λ λx x! Función de probabilidad 1−x f (x|p) = px (1 si x = 0, 1 − p) n f (x|n, p) = px (1 − p)n−x si x = 0, 1, . . . , n x A B x n−x si x = 0, . . . , n. f (x|A, B, n) = A+B n f (x|p) = p(1 − p)x si x = 0, 1, 2, . . . r+x−1 f (x|r, p) = pr (1 − p)x si x = 0, 1, 2, . . . x si x = 0, 1, . . . f (x|λ) = λ r(1−p) p 1−p p nA A+B np Media p λ r(1−p) p2 1−p p2 nAB(A+B−n) (A+B)2 (A+B−1) np(1 − p) Varianza p(1 − p) 12 13 a La función gamma se define como Γ(α) = Weibull(α, β) Lognormal F-Snedecor F (m, n) t-Student t(ν) 0 R +∞ ∼ LN (µ, σ ) xα−1 exp{−x}dx, que existe y es finita ∀α > 0 X ∼ N (µ, σ ) → e n (n−2) si β 1 α Γ( α ) n>2 2n2 (m+n−2) m(n−2)2 (n−4) si n > 4 β2 2 1 2 1 α (2Γ( α ) − α Γ ( α )) si ν > 2 ν ν−2 0 si ν > 1 αβ (α+β)2 (α+β+1) α α+β α β2 2 α β λ 2ν σ µ Gamma Ga(α, β) Exponencial Expo(λ) Ji-Cuadrado χ2 (ν) Beta Be(α, β) λ ν (β−α)2 12 2 α+β 2 Normal, N (µ, σ 2 ) Varianza Media 1 β−α si α < x < β 1 x−µ 2 f (x|µ, σ 2 ) = σ√12π e− 2 ( σ ) x ∈ R βα f (x|α, β) = Γ(α) xα−1 e−βx si x > 0 a 1 f (x | λ) = λ exp − λx si x ≥ 0 X ∼ χ2 (ν) si X ∼ Ga( ν2 , 12 ) Γ(α+β) α−1 f (x|α, β) = Γ(α)Γ(β) x (1 − x)β−1 si 0 < x < 1 − ν+1 2 Γ( ν+1 x2 2 ) f (x) = √νπΓ( 1 + ∀x ∈ R ν ν 2) m/2−1 Γ( m+n ) x m/2 n/2 2 f (x) = Γ( m )Γ( n (mx+n) n m (m+n)/2 si x > 0 2 2) x α −α α−1 f (x | α, β) = αβ x exp −( β ) si x > 0 2 X 2 Uniforme f (x|α, β) = Función de densidad Distribución Cuadro 1.2: Distribuciones continuas De hecho podemos ver la forma que tiene esta función de probabilidad para todos los valores posibles. 0.30 plot(dbinom(0:10, size = 10, prob = 0.23), xlab = "") 0.25 ● 0.20 0.15 0.10 ● ● 0.05 dbinom(0:10, size = 10, prob = 0.23) ● ● ● 0.00 ● ● 2 4 6 8 ● ● ● 10 Es interesante ver cómo se modifica la forma de la función de probabilidad cuando modificamos la probabilidad de éxito manteniendo constante el número de pruebas que realizamos. Indicamos con 1 y 2 la primera y segunda funciones de probabilidad. plot(dbinom(0:10, size = 10, prob = 0.23), xlab = "", pch = "1") points(dbinom(0:10, size = 10, prob = 0.77), xlab = "", pch = "2") 14 0.30 2 1 2 2 0.15 0.20 1 2 0.10 1 1 2 0.00 0.05 dbinom(0:10, size = 10, prob = 0.23) 0.25 1 1 2 2 2 2 2 2 2 1 4 6 1 1 8 1 1 10 La función de distribución la podemos conseguir con pbinom. pbinom(0:10, size = 10, prob = 0.23) ## [1] 0.07327 0.29212 0.58628 0.82060 0.94308 0.98698 0.99791 0.99978 0.99999 1.00000 ## [11] 1.00000 plot(stepfun(0:10, c(pbinom(0:10, size = 10, prob = 0.23), 1)), verticals = F) 15 1.0 stepfun(0:10, c(pbinom(0:10, size = 10, prob = 0.23), 1)) ● ● ● ● ● ● ● ● 0.6 0.8 ● 0.4 f(x) ● 0.2 ● 0 2 4 6 8 10 x La inversa de la función de distribución, esto es, los cuantiles nos la darı́a qbinom. qbinom(0.3, size = 10, prob = 0.23) ## [1] 2 Podemos simular valores de la distribución binomial con rbinom. rbinom(5, size = 10, prob = 0.23) ## [1] 5 1 1 2 3 Nota de R 3 (Manejo de la distribución Poisson) La función de densidad y de distribución las obtenemos con dpois y ppois. dpois(0:60, lambda = 12) ## [1] 6.144e-06 7.373e-05 ## [9] 6.552e-02 8.736e-02 ## [17] 5.429e-02 3.832e-02 ## [25] 7.872e-04 3.779e-04 ## [33] 7.982e-07 2.902e-07 4.424e-04 1.048e-01 2.555e-02 1.744e-04 1.024e-07 16 1.770e-03 1.144e-01 1.614e-02 7.751e-05 3.512e-08 5.309e-03 1.144e-01 9.682e-03 3.322e-05 1.171e-08 1.274e-02 1.056e-01 5.533e-03 1.375e-05 3.797e-09 2.548e-02 9.049e-02 3.018e-03 5.498e-06 1.199e-09 4.368e-02 7.239e-02 1.574e-03 2.128e-06 3.689e-10 ## [41] 1.107e-10 3.239e-11 9.256e-12 2.583e-12 7.044e-13 1.878e-13 4.900e-14 1.251e-14 ## [49] 3.128e-15 7.660e-16 1.838e-16 4.326e-17 9.983e-18 2.260e-18 5.023e-19 1.096e-19 ## [57] 2.348e-20 4.944e-21 1.023e-21 2.080e-22 4.161e-23 Representamos las funciones de probabilidad de dos distribuciones Poisson modificando el valor de λ que es su media y varianza de modo que un valor de λ mayor se traduce en una densidad que toma valores mayores y más dispersa. plot(0:60, dpois(0:60, lambda = 12), xlab = "", pch = "1") points(0:60, dpois(0:60, lambda = 24), xlab = "", pch = "2") 11 0.10 1 0.08 1 22 2 2 2 2 1 0.06 1 0.04 2 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 222 111 222222222 2 2 2 1 2 1 22 11 22222222222222222222222 1111111111111111111111111111111111111 0 20 1 0.00 2 2 1 0.02 dpois(0:60, lambda = 12) 1 1 10 30 40 50 60 Los cuantiles obtenidos como inversa de la función de distribución se obtienen qpois. qpois(seq(0.1, 0.9, 0.1), lambda = 12) ## [1] 8 9 10 11 12 13 14 15 17 Y finalmente podemos generar valores con esta distribución con rpois. rpois(50, lambda = 12) ## [1] 10 ## [29] 13 8 16 9 12 13 11 12 7 20 10 8 11 14 16 9 11 9 17 17 6 12 12 12 14 15 14 18 10 15 12 20 6 10 15 14 11 14 10 10 7 10 11 13 9 16 17 9 9 13 Nota de R 4 La función de densidad y de distribución las obtenemos con dpois y ppois. dpois(0:60, lambda = 12) ## ## ## ## ## ## ## ## [1] [9] [17] [25] [33] [41] [49] [57] 6.144e-06 6.552e-02 5.429e-02 7.872e-04 7.982e-07 1.107e-10 3.128e-15 2.348e-20 7.373e-05 8.736e-02 3.832e-02 3.779e-04 2.902e-07 3.239e-11 7.660e-16 4.944e-21 4.424e-04 1.048e-01 2.555e-02 1.744e-04 1.024e-07 9.256e-12 1.838e-16 1.023e-21 1.770e-03 1.144e-01 1.614e-02 7.751e-05 3.512e-08 2.583e-12 4.326e-17 2.080e-22 5.309e-03 1.144e-01 9.682e-03 3.322e-05 1.171e-08 7.044e-13 9.983e-18 4.161e-23 1.274e-02 1.056e-01 5.533e-03 1.375e-05 3.797e-09 1.878e-13 2.260e-18 2.548e-02 9.049e-02 3.018e-03 5.498e-06 1.199e-09 4.900e-14 5.023e-19 Representamos las funciones de probabilidad de dos distribuciones Poisson modificando el valor de λ que es su media y varianza de modo que un valor de λ mayor se traduce en una densidad que toma valores mayores y más dispersa. plot(0:60, dpois(0:60, lambda = 12), xlab = "", pch = "1") points(0:60, dpois(0:60, lambda = 24), xlab = "", pch = "2") 11 0.10 1 0.08 1 22 2 2 2 2 1 0.06 1 2 1 0.04 2 2 1 2 2 1 2 1 2 1 2 2 2 1 2 222 1111 222222222 2 2 2 1 2 1 22 11 22222222222222222222222 1111111111111111111111111111111111111 0 20 1 0.00 2 2 2 1 0.02 dpois(0:60, lambda = 12) 1 1 10 30 40 50 60 Los cuantiles obtenidos como inversa de la función de distribución se obtienen con qpois. 18 4.368e-02 7.239e-02 1.574e-03 2.128e-06 3.689e-10 1.251e-14 1.096e-19 qpois(seq(0.1, 0.9, 0.1), lambda = 12) ## [1] 8 9 10 11 12 13 14 15 17 Y finalmente podemos generar valores con esta distribución con rpois. rpois(50, lambda = 12) ## [1] 10 16 11 13 8 13 14 12 13 ## [29] 11 15 14 6 13 13 13 10 14 1.2.3. 6 7 12 10 14 13 15 12 17 10 10 12 7 10 16 16 8 13 12 7 11 17 14 18 18 11 14 14 20 Teorema de Bayes Tenemos el espacio muestral Ω y una partición de dicho espacio, B1 , . . . , Bk , esto es, sucesos disjuntos dos a dos y tales que su unión cubren todo el espacio muestral. Entonces se tiene que, para cualquier suceso A, P (A | Bi )P (Bi ) P (Bi | A) = Pk j=1 P (A | Bj )P (Bj ) 1.3. (1.7) Vectores aleatorios Supongamos X = (X1 , . . . , Xd ) un vector aleatorio con d componentes. Tanto si el vector es discreto (todas sus variables aleatorias componentes son discretas) como si es continuo denotaremos la correspondiente función de probabilidad o de densidad conjunta mediante f (x1 , . . . , xn ). Si X es discreto entonces f (x1 , . . . , xn ) = P (X1 = x1 , . . . , Xn = xn ) y hablamos de función de probabilidad. En lo que sigue hablamos del caso continuo. Todas las expresiones son análogas en el caso discreto sustituyendo la integral por el sumatorio correspondiente. Si X = (X1 , . . . , Xd ) es un vector continuo entonces Z b1 P (a1 ≤ X1 ≤ b1 , . . . , ad ≤ X1 ≤ bd ) = Z bd ... a1 f (x1 , . . . , xd )dx1 . . . dxn , (1.8) ad para cualesquiera ai ≤ bi con i = 1, . . . , d. En particular la distribución del vector suele venir descrita mediante el vector de medias y por la matriz de covarianzas. Si para la i-ésima variable Xi consideramos la media µi = EXi entonces el vector de medias µ viene dado por µX µ1 = ... µd Si no hace falta indicar el vector X entonces denotaremos simplemente µ en lugar de µX . Para cada par de variables Xi y Xj podemos considerar su covarianza definida como σij = cov(Xi , Xj ) = E(Xi − EXi )(Xj − EXj ) = E(Xi Xj ) − EXi EXj . Obviamente si Xi = Xj entonces cov(Xi , Xi ) = var(Xi ), es decir, la covarianza de una variable consigo misma es la varianza de la variable, es decir, σii = var(Xi ). Dado el vector aleatorio X podemos consider la covarianza de cada par de variables y construir la matriz que en la posición (i, j) tiene dicha covarianza. Es la matriz 19 5 6 11 de covarianzas, también llamada en la literatura matriz de varianzas, matriz de varianzas-covarianzas o matriz de dispersión. La denotaremos por Σ, es decir, σ11 . . . σ1d .. .. Σ = ... . . σd1 ... σdd En general si consideramos dos vectores aleatorios X = (X1 , . . . , Xd )0 e Y = (Y1 , . . . , Yp ) denotaremos cov(X1 , Y1 ) . . . cov(X1 , Yp ) .. .. .. cov(X, Y ) = . . . cov(Xd , Y1 ) . . . cov(Xd , Yp ) y será la matriz de covarianzas entre dichos vectores. Si los vectores X e Y son independientes se verifica que cov(X, Y ) = 0. Dado el vector X = (X1 , . . . , Xd )0 podemos considerar la matriz de correlaciones que en la posición (j, k) tiene el coeficiente de correlación entre las variables σjk Xi y Xj , ρjk = √σjjσkk , es decir, 1 .. Pρ = . ρd1 ρ12 .. . ... .. . ρd2 ... ρ1d .. . 1 Obviamente, como la matriz de covarianzas, la matriz de correlaciones es simétrica ya que ρjk = ρkj . Si denotamos por Dσ = diag(σ11 , . . . , σdd ) entonces tenemos que −1 −1 Pρ = Dσ 2 ΣDσ 2 . (1.9) Propiedades del vector de medias y la matriz de covarianzas Supongamos que tenemos una matriz A de dimensiones p×d con p ≤ d y de rango p (tiene pues p filas y p columnas que son linealmente independientes). Tenemos un vector aleatorio X con d componentes y consideramos el vector Y = Ax, esto es, consideramos la transformación lineal del vector X asociada a la matriz A. Entonces se tiene que µY = E[Y ] = AE[X] = AµX . (1.10) y cov(Y ) = cov(AX) = Acov(X)A0 . 1.4. (1.11) Distribución normal multivariante Veamos dos definiciones equivalentes. Definición 2 Sea Y = (Y1 , . . . , Yd )0 un vector aleatorio d-dimensional. Se dice que el vector Y tiene una distribución normal multivariante si tiene por función de densidad conjunta 1 1 0 −1 − (y − µ) Σ (y − µ) , (1.12) f (y|µ, Σ) = d 1 exp 2 (2π) 2 |Σ| 2 donde −∞ < yj < +∞, j = 1, . . . , d y Σ = [σjk ] es una matriz definida positiva (Σ > 0). 20 Se puede probar que EY = µ y var(Y ) = Σ y por ello se suele denotar Y ∼ Nd (µ, Σ). (1.13) Se tiene que si Y1 , . . . , Yd son variables aleatorias con distribución normal independientes con medias nulas y varianza común σ 2 entonces se tiene que Y ∼ Nd (0, σ 2 Id ). Teorema 1 Supongamos Y ∼ Nd (µ, Σ) y sea (1) Y Y = , Y (2) (1) µ µ = (2) , µ Σ11 Σ= Σ21 Σ12 , Σ22 donde Y (i) y µ(i) son vectores di × 1 y Σii es una matriz di × di (con d1 + d2 = d). Se verifican las siguientes propiedades: 1. Si C es una matriz q × d de rango q entonces CY ∼ Nq (Cµ, CΣC 0 ). 2. Cualquier subvector de Y tiene una distribución normal multivariante. En particular, se tiene que Y (1) ∼ Nd1 (µ(1) , Σ11 ). 3. Y (1) e Y (2) son independientes si cov(Y (1) , Y (2) ) = 0. 4. Si Ui = Ai Y (i = 1, . . . , m) y cov(Ui , Uj ) = 0 para i 6= j entonces los distintos vectores Ui son independientes. 5. (Y − µ)0 Σ−1 (Y − µ) ∼ χ2d . (1) 6. La distribución condicionada de Y (2) , dado Y (1) = y (1) es Nd2 (µ(2) +Σ21 Σ−1 − 11 [y µ(1) ], Σ22,1 ) donde Σ22,1 = Σ22 − Σ21 Σ−1 Σ . 11 12 Una segunda manera en que podemos definir la distribución normal multivariante es del siguiente modo. Pd Definición 3 Y tiene una distribución normal multivariante si a0 Y = i=1 ai Yi tiene una distribución normal univariante para cualquier vector a = (a1 , . . . , ad )0 . Si EY = µ and cov(Y ) = Σ > 0 entonces Y ∼ Nd (µ, Σ). Nota de R 5 El paquete [?] nos permite trabajar con la normal multivariante. library(mvtnorm) En concreto, veamos un ejemplo de la normal bivariante con vector de medias y matriz de covarianzas dada por mu <- c(4.5, 7.3) Sigma <- matrix(c(7.097258, 3.885963, 3.885963, 3.371314), 2, 2) Elegimos los puntos donde vamos a calcular la densidad bivariante npuntos <- 50 x <- seq(mu[1] - 3 * sqrt(Sigma[1, 1]), mu[1] + 3 * sqrt(Sigma[1, 1]), len = npuntos) y <- seq(mu[2] - 3 * sqrt(Sigma[2, 2]), mu[2] + 3 * sqrt(Sigma[2, 2]), len = npuntos) y calculamos los valores. 21 z <- NULL for (i in 1:npuntos) { for (j in 1:npuntos) { z <- rbind(z, c(x[i], y[j], dmvnorm(c(x[i], y[j]), mean = mu, sigma = Sigma))) } } Vamos a representarlos. persp(z) contour(z) Y Z z 22 1.0 6 6 8 8 10 12 6 8 6 12 10 6 10 6 8 6 12 4 6 4 6 10 8 8 8 6 4 6 8 10 4 12 0.0 8 6 0 2 −2 12 10 10 10 6 10 8 10 8 10 10 12 12 8 8 6 8 6 8 4 8 8 6 8 8 6 6 6 10 10 10 8 10 4 4 4 4 10 10 4 4 2 4 2 4 2 4 2 4 10 12 6 8 4 6 8 4 8 4 12 10 8 6 8 6 4 8 10 0.4 10 10 8 6 4 6 6 8 4 0.2 10 2 2 2 2 2 2 8 8 8 4 2 4 2 2 2 2 2 8 8 6 6 0.8 0.6 10 10 4 6 10 10 6 0.0 0.2 0.4 0.6 0.8 1.0 ¿Cómo generar valores normales multivariantes? Consideramos el vector de medias y la matriz de covarianzas siguiente. mu <- c(4.5, 7.3, 6.2, 8.4, 7.3) Sigma <- matrix(c(7.097258, 3.885963, 2.658114, 4.036412, 2.698515, 3.885963, 3.371314, 2.275973 3.713151, 1.601078, 2.658114, 2.275973, 5.996727, 7.333165, 5.564751, 4.036412, 3.713151, 7.333165, 10.970678, 7.80342, 2.698515, 1.601078, 5.564751, 7.80342, 6.742381), 5, 5) Y generamos los datos. x <- rmvnorm(10, mean = mu, sigma = Sigma) @ 23 24 Capı́tulo 2 Un muy breve repaso a la Estadı́stica Sólo pretendemos fijar notación y recordar algunos de los conceptos básicos. Es más que recomendable consultar algún texto de introducción a la Estadı́stica. Hay tantos y, muchos, tan buenos que es casi un pecado recomendar alguno. El que se tenga a mano será bueno. Teniendo en cuenta que este texto está muy orientado al uso de la Estadı́stica con R ? serı́a bueno consultar Verzani [2005] en donde se presenta la estadı́stica básica con el programa. 2.1. Algo de Estadı́stica Descriptiva, poco Cuando tenemos un banco de datos lo primero y conveniente es describir de un modo sencillo dichos datos, bien mediante unos resúmenes numéricos o bien mediante unos resúmenes gráficos. Esto es lo que se conoce como Estadı́stica descriptiva. Veamos algún ejemplo para recordar estos conceptos. Nota de R 6 (Análisis descriptivo de unos datos de hospitalización ambulatoria) Vamos a realizar un análisis descriptivo de unos datos relativos a hospitalización ambulatoria. Empezamos cargando el fichero de datos. load("../data/scoremaster") Lo que acabamos de cargar es un data frame cuyo nombre es scoremaster. Hemos de saber cuáles son las variables que lo componen. names(scoremaster) ## [1] "score" ## [6] "score2" ## [11] "score3" ## [16] "score4" ## [21] "asa" "eg1" "eg2" "eg3" "score5" "sexo" "d1" "d2" "d3" "especialidad" "T.TOTALP" "t1" "t2" "t3" "intensidad" "T.QUIRUR" "s1" "s2" "s3" "tipoanes" "edad" Para poder trabajar con los nombres de las variables hemos de adjuntar el banco de datos attach(scoremaster) Podemos ver los primeros diez valores de la variable score. 25 score[1:10] ## [1] 6 4 5 6 7 6 7 8 6 5 ## Levels: 3 < 4 < 5 < 6 < 7 < 8 De las variables consideradas algunas son categóricas como puede ser la especialidad o tipoanes (tipo de anestesia), otras son ordinales como score, score2, score3, . . . mientras que otras son continuas como T.TOTALP o T.QUIRUR. Es interesante utilizar la función extractora summary sobre un data frame. summary(scoremaster) ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## score 3: 13 4: 89 5:199 6:276 7:219 8:126 eg1 0: 18 1:545 2:359 d1 0: 18 1:360 2:544 t1 0: 50 1:359 2:513 s1 0: 17 1:307 2:598 score2 eg2 d2 t2 3 : 7 0 : 27 0 : 36 0 : 11 4 : 33 1 :377 1 :359 1 : 59 5 :133 2 :359 2 :366 2 :691 6 :234 NA's:159 NA's:161 NA's:161 7 :192 8 :162 NA's:161 s2 score3 eg3 d3 t3 s3 score4 0 : 3 3 : 2 0 : 9 0 : 10 0 : 0 0 : 0 Min. :5.0 1 :237 4 : 3 1 : 78 1 : 76 1 : 9 1 : 45 1st Qu.:6.0 2 :522 5 : 34 2 : 51 2 : 51 2 :127 2 : 92 Median :6.5 NA's:160 6 : 45 NA's:784 NA's:785 NA's:786 NA's:785 Mean :6.4 7 : 34 3rd Qu.:7.0 8 : 20 Max. :8.0 NA's:784 NA's :902 score5 especialidad intensidad tipoanes asa sexo T.TOTALP Min. :4.0 1 :325 1:168 General:746 1:555 0 :329 Min. : 900 1st Qu.:5.5 2 :163 2:426 Plexo :108 2:332 1 :590 1st Qu.: 6060 Median :6.5 4 :136 3:328 CAM : 65 3: 35 NA's: 3 Median : 8790 Mean :6.0 5 : 55 NA's : 3 Mean : 9881 3rd Qu.:7.0 7 :157 3rd Qu.:12420 Max. :7.0 8 : 74 Max. :35160 NA's :918 NA's: 12 T.QUIRUR edad Min. : 600 Min. : 4.0 1st Qu.: 2640 1st Qu.:31.0 Median : 3600 Median :43.0 Mean : 3903 Mean :43.5 3rd Qu.: 4860 3rd Qu.:56.0 Max. :16200 Max. :84.0 NA's :194 En el resumen anterior vemos que cuando se trata de una variable categórica nos muestra los conteos asociados a cada uno de los valores posibles (si hay muchas categorı́as solo pone algunas y las demás las agrupa en una última categorı́a). En las variables numéricas saca unas descriptivas numéricas. Observemos la descriptiva numérica de T.TOTALP. summary(T.TOTALP) ## ## Min. 1st Qu. 900 6060 Median 8790 Mean 3rd Qu. 9880 12400 26 Max. 35200 Nos aparece el mı́nimo, el primer cuartil (o percentil 0,25), la mediana, la media, el tercer cuartil (o percentil 0,75) y el máximo de las observaciones. Para una variable categórica podemos pedirle una tabla de frecuencias. table(tipoanes) ## tipoanes ## General ## 746 Plexo 108 CAM 65 La tabla anterior es algo parca en su presentación. Si queremos un diagrama de barras (que es lo mismo pero en dibujo) lo podemos conseguir haciendo 0 100 200 300 400 500 600 700 barplot(table(tipoanes)) General 2.2. Plexo CAM Verosimilitud Sea y = (y1 , . . . , yn ) una realización del vector aleatorio Y = (Y1 , . . . , Yn ). Es habitual asumir que Y tiene una función de densidad conjunta f en una cierta familia F. Para una función dada f , el valor f (y) nos muestra cómo varı́a la densidad dentro del espacio muestral de valores posibles de y. Y viceversa, si consideramos unos datos y y lo que hacemos variar es la función de densidad entonces estamos 27 viendo cómo de verosı́mil es cada una de las funciones dados los datos y. Esta función recibe el nombre de verosimilitud de f dados los datos y y se suele denotar como V erosimilitud[f ; y] = L(f ; y) = f (y). (2.1) Con frecuenica, es conveniente trabajar con el logaritmo natural de la función anterior y hablaremos de la log-verosimilitud. l[f ; y] = log f (y). (2.2) Una simplificación adicional (que es habitual en las aplicaciones) supone que la función de densidad f pertenece a una familia paramétrica F, esto es, cada elemento de la familia es conocido completamente salvo un número finito de parámetros θ = (θ1 , . . . , θp ) de modo que denotaremos f (y; θ) o fY (y; θ). Al conjunto de valores posibles de θ se le llama espacio paramétrico y lo denotaremos por Θ. En este caso, la logverosimilitud es una función de θ y denotaremos V erosimilitud[θ; y] = l(θ; y) = log f (y; θ). (2.3) Supongamos una transformación 1-1 de Y a Z, Z = g(Y ). Las densidades de ambos vectores se relacionan según la siguiente relación ∂y fZ (z) = fY (y) , ∂z donde ∂y ∂z es el jacobiano de la transformación de z a y. Se tiene la siguiente relación entre las verosimilitudes ∂y LZ (θ; z) = LY (θ; y). ∂z Esto sugiere que es mejor trabajar con el cociente de las verosimilitudes para dos vectores de parámetros θ1 y θ2 en lugar de los valores aislados. Si asumimos que los distintos Y1 , . . . , Yn son independientes entonces LY (θ; y) = fY (y) = n Y fYi (yi ), i=1 y ly (θ; y) = n X log fYi (yi ) = i=1 n X LYi (θ; yi ). i=1 Veamos algunos ejemplos de verosimilitud. Ejemplo 2 (Pruebas Bernoulli) Y1 , . . . , Yn son independientes y con la misma distribución (i.i.d.) P (Yi = yi ) = θyi (1 − θ)1−yi y L(θ; y) = θ Pn i=1 yi (1 − θ)n− Pn i=1 yi Ejemplo 3 (Número de éxitos en n pruebas Bernoulli) Nuestros datos son ahora el número total de éxitos en un número dado de pruebas de Bernoulli, r. Entonces la variable correspondiente R tiene una distribución binomial con n pruebas y una probabilidad de éxito θ. La verosimilitud viene dada por n r L(θ; r) = θ (1 − θ)n−r r 28 Ejemplo 4 (Muestreo Bernoulli inverso) Nuestros datos son ahora el número total de pruebas necesarias para alcanzar un número previamente especificado de éxitos. La variable aleatoria correspondiente N tendrá una distribución binomial negativa con r éxitos y una probabilidad de éxito θ. La función de verosimilitud correspondiente viene dada por n−1 r L(θ; n) = θ (1 − θ)n−r r−1 Consideremos los tres ejemplos anteriores 2, 3 y 4. Si consideramos dos valores del parámetro θ1 y θ2 entonces el cociente de las verosimilitudes calculados en ambos valores tiene el mismo valor en los tres ejemplos. 2.3. Estimación Denotamos por Θ el espacio formado por los valores que puede tomar θ o espacio paramétrico. Un estimador del parámetros o vector paramétrico θ es cualquier función de la muestra X1 , . . . , Xn que toma valores en el espacio paramétrico. Si δ(X1 , . . . , Xn ) es un estimador del parámetro θ entonces se define el error cuadrático medio como M SE(δ) = E[δ(X1 , . . . , Xn ) − θ]2 (2.4) En el caso en que se verifique que Eδ(X1 , . . . , Xn ) = µδ = θ, es decir, que el estimador sea insesgado entonces: M SE(δ) = E[δ(X1 , . . . , Xn ) − θ]2 = E[δ(X1 , . . . , Xn ) − µδ ]]2 = var(δ). Y el error cuadrático medio no es más que la varianza del estimador. Consideremos la siguiente cadena de igualdades. Denotamos M SE(δ) = E[δ − θ]2 = E[δ − µδ + µδ − θ]2 = E[δ − µδ ]2 + [µδ − θ]2 (2.5) La diferencia entre la media del estimador y el parámetro, µδ − θ, recibe el nombre de sesgo. Finalmente lo que nos dice la ecuación anterior es que el error cuadrático medio M SE(δ) lo podemos expresar como la suma de la varianza del estimador, E[δ − µδ ]2 , más el sesgo al cuadrado, [µδ − θ]2 . A la raı́z cuadrada de la varianza de un estimador, es decir, a su desviación tı́pica o estándar se le llama error estándar. La expresión error estándar se usa en ocasiones indistintamente para referirse o bien dicha desviación tı́pica o bien al estimador de la misma. 2.3.1. Estimación insesgada de media y varianza Dada una muestra Y1 , . . . , Yn de una variable. Un estimador habitualmente utilizado para estimar µ = EYi es la media muestral dada por n 1X Yi . Ȳ = n i=1 (2.6) Notemos que n n n 1X 1X 1X E Ȳ = E[ Yi ] = EYi = µ = µ. n i=1 n i=1 n i=1 En definitiva, la media muestral es un estimador que no tiene ningún sesgo cuando estima la media de Yi (la media poblacional) o, lo que es lo mismo, es un estimador insesgado. 29 Para estimar de un modo insesgado la varianza σ 2 a partir de una muestra Y1 , . . . , Yn se utiliza la varianza muestral dada por n S2 = 1 X (Yi − Ȳ )2 . n − 1 i=1 (2.7) La razón de la división por n − 1 en lugar de dividir por n viene de las siguientes igualdades. n X E (Yi − Ȳ )2 = i=1 E n n X X [(Yi − µ) − (Ȳ )2 − µ)]2 = E(Yi − µ)2 − nE(Ȳ − µ)2 , (2.8) i=1 i=1 pero E(Yi − µ)2 = σ 2 y E(Ȳ − µ)2 = var(Ȳ ) = σ 2 /n. En consecuencia, E n X σ2 = nσ 2 − σ 2 = (n − 1)σ 2 , (Yi − Ȳ )2 = nσ 2 − n i=1 de donde, n ES 2 = E 1 X (Yi − Ȳ )2 = σ 2 , n − 1 i=1 es decir, S 2 estima la varianza σ 2 sin sesgo. Nota de R 7 (Estimación insesgada de media y varianza) Vamos a estimar la media y la varianza de un modo insesgado. Empezamos leyendo los datos scoremaster. load("../data/scoremaster") attach(scoremaster) La media muestral del tiempo total quirúrgico (en segundos) lo obtenemos con mean(T.QUIRUR) ## [1] 3903 Mientras que la varianza y desviación tı́pica muestral vienen dadas por var(T.QUIRUR) ## [1] 3107898 sd(T.QUIRUR) ## [1] 1763 2.3.2. Estimación insesgada del vector de medias y la matriz de covarianzas Ahora consideramos una muestra de un vector de dimensión d, Y1 , . . . , Yn i.i.d. con vector de medias µ = EYi y matriz de covarianzas Σ = cov(Yi ). Los estimadores insesgados de µ y Σ son las versiones multivariantes de la media y varianza 30 muestrales. Si Yi1 Yi = ... Yip Entonces podemos representar toda la muestra como la siguiente matriz 0 Y11 . . . Y1d Y1 .. .. Y = ... = ... . . Yn0 Yn1 ... Ynd mientras que los datos observados, la matriz de datos, vendrı́a dada por 0 y11 . . . y1d y1 .. .. y = ... = ... . . yn0 yn1 . . . ynd El vector de medias muestral viene dado por la siguiente expresión en términos de la matriz Y , n 1X 1 Ȳ = Yi = Y 0 1n . (2.9) n i=1 n siendo 1n el vector n × 1 con todos los valores iguales a uno. También denotaremos Ȳ·1 Ȳ = ... Ȳ·p El estimador de la matriz de covarianzas (poblacional) Σ serı́a la matriz de covarianzas muestral que tiene en la posición (j, k) la covarianza muestral entre las componentes j y k, n Sjk 1 X (Yij − Ȳ·j )(Yik − Ȳ·k ), = n − 1 i=1 de modo que S11 .. S= . ... .. . S1d .. = . Sd1 ... Sdd n 1 1 X (Yi − Ȳ )(Yi − Ȳ )0 = Q. n − 1 i=1 n−1 Es inmediato que E Ȳ = µ porque componente a componente hemos visto que se verifica la igualdad. A partir de los vectores Yi consideramos Xi = Yi − µ de modo que se verifica X̄ = X̄ − µ. Se sigue que n X 0 (Yi − Ȳ )(Yi − Ȳ ) = i=1 n X 0 (Xi − X̄)(Xi − X̄) = i=1 n X Xi Xi0 − nX̄ X̄ 0 . i=1 Los vectores X1 , . . . , Xn tienen vector de medias nulo y matriz de covarianzas Σ, la misma que los Yi . En consecuencia, E X̄ X̄ 0 = Σ y EQ = n X cov(Yi ) − n cov(Ȳ ) = nΣ − n cov(Ȳ ) = nΣ − n i=1 31 Σ = (n − 1)Σ. n Tenemos pues que S es un estimador insesgado de la matriz Σ. Finalmente, si denotamos por rjk el coeficiente de correlación entre las variables j y k, es decir, Pn (Yij − Ȳ·j )(Yik − Ȳ·k ) Sjk =p (2.10) rjk = qP i=1 P n n Sjj Skk 2 2 (Y − Ȳ ) (Y − Ȳ ) ik ·k ij ·j i=1 i=1 Denotaremos por R la matriz de correlaciones muestrales R = [rjk ]. Nota de R 8 (Matrices de covarianza y correlación muestrales) Vamos a estimar la media y la varianza de un modo insesgado. Empezamos leyendo los datos scoremaster. load("../data/scoremaster") attach(scoremaster) La covarianza y la correlación muestrales entre el timepo total quirúrgico y el tiempo total postquirúrgico los obtenemos con cov(T.QUIRUR, T.TOTALP) ## [1] 2308272 cor(T.QUIRUR, T.TOTALP) ## [1] 0.2365 La matriz de covarianzas muestral vendrı́a dada por cov(cbind(T.QUIRUR, T.TOTALP)) ## T.QUIRUR T.TOTALP ## T.QUIRUR 3107898 2308272 ## T.TOTALP 2308272 30659874 y la de correlaciones serı́a cor(cbind(T.QUIRUR, T.TOTALP)) ## T.QUIRUR T.TOTALP ## T.QUIRUR 1.0000 0.2365 ## T.TOTALP 0.2365 1.0000 2.4. Estimador máximo verosı́mil El método de estimación que vamos a utilizar en este curso el método de máxima verosimilitud. El estimador máximo verosı́mil de θ, que denotaremos por θ̂, se obtienen máximizando la función de verosimilitud o, equivalentemente, la transformación monótona de dicha función que es la función de logverosimilitud. Utilizaremos para denotar el estimador máximo verosı́mil la notación inglesa MLE. L(θ̂) = máx L(θ), (2.11) θ̂ = argmaxθ∈Θ L(θ), (2.12) θ∈Θ o también 32 Ejemplo 5 (Bernoulli) Se puede comprobar sin dificultad que p̂ = Pn i=1 n xi . Una propiedad importante de los estimadores máximo verosı́miles consiste en que si θ∗ = f (θ) siendo f una biyección entonces el estimador máximo verosı́mil de θ∗ es verifica que θˆ∗ = f (θ̂). (2.13) c2 = n−1 S 2 = Ejemplo 6 (Normal) En este caso se comprueba que µ̂ = X̂n y que σ n Pn 1 2 ) . Teniendo en que cuenta la propiedad enunciada en 2.13 teni=1 (Xi − X̄nq n 2 dremos que σ̂ = n−1 n S . En muchas situaciones la función L(θ) es cóncava y el estimador máximo verosı́mil θ̂ es la solución de las ecuaciones de verosimilitud ∂L(θ ∂θ = 0. Si cov(θ̂) denota la matriz de covarianzas de θ̂ entonces, para un tamaño muestral grande y bajo ciertas condiciones de regularidad (ver Rao [1967], página 364), se verifica que cov(θ̂) es la inversa de la matriz de información cuyo elemento (j, k) viene dado por 2 ∂ l(θ) −E (2.14) ∂θj ∂θk Notemos que el error estándar de θ̂j será el elemento que ocupa la posición (j, j) en la inversa de la matriz de información. Cuanto mayor es la curvatura de la logverosimilitud menores serán los errores estándar. La racionalidad que hay detrás de esto es que si la curvatura es mayor entonces la logverosimilitud cae rápidamente cuando el vector θ se aleja de θ̂. En resumen, es de esperar que θ esté más próximo a θ̂. Ejemplo 7 (Binomial) Supongamos que una muestra en una población finita y consideremos como valor observado el número de éxitos. Entonces la verosimilitud serı́a n y L(p) = p (1 − p)n−y , (2.15) y y la logverosimilitud viene dada como n l(p) = log + y log p + (n − y) log(1 − p), y (2.16) La ecuación de verosimilitud serı́a y n−y y − np ∂l(p) = − = . ∂p p 1−p p(1 − p) (2.17) Igualando a cero tenemos que la solución es p̂ = ny que no es más que la proporción muestral de éxitos en las n pruebas. La varianza ası́ntótica serı́a y n−y n ∂ 2 l(p) −E =E 2 + = . 2 2 ∂p p (1 − p) p(1 − p) (2.18) En consecuencia asintóticamente p̂ tiene varianza p(1−p) lo cual era de prever pues n si consideramos la variable Y que nos da el número de éxitos entonces sabemos que EY = np y que var(Y ) = np(1 − p). 33 2.5. Contraste de hipótesis Genéricamente vamos a considerar situaciones en donde particionamos el espacio paramétrico Θ en dos conjuntos Θ0 y Θ1 , es decir, Θ0 ∩ Θ1 = ∅ (son disjuntos) y y Θ0 ∪ Θ1 = Θ (cubren todo el espacio paramétrico). Consideramos el contraste de hipótesis siguiente. H0 :θ ∈ Θ0 (2.19) H1 :θ ∈ Θ1 (2.20) Basándonos en una muestra aleatoria X1 , . . . , Xn hemos de tomar una decisión. Las decisiones a tomar son una entre dos posibles: (i) Rechazar la hipótesis nula o bien (ii) no rechazar la hipótesis nula. Notemos que, una vez hemos tomado una decisión, podemos tener dos posibles tipos de error como recoge la siguiente tabla. En las columnas indicamos la realidad mientras que en las filas indicamos la decisión que tomamos. Rechazamos H0 No rechazamos H0 H0 Error tipo I H1 Error tipo II Supongamos que Rn es el conjunto de valores que puede tomar el vector aleatorio (X1 , . . . , Xn ). Entonces el contraste de hipótesis se basa en tomar un estadı́stico o función de la muestra que denotamos δ(X1 , . . . , Xn ) de modo que si δ(X1 , . . . , Xn ) ∈ C entonces rechazamos la hipótesis nula mientras que si δ(X1 , . . . , Xn ) ∈ / C entonces no rechazamos la hipótesis nula. Notemos que simplemente estamos particionando el espacio muestral (que suponemos) Rn en dos partes, C y C c , de modo que tomamos una decisión basándonos en si el estadı́stico δ está en C o bien está en el complementario de C. Al conjunto C se le suele llamar la región crı́tica. La función potencia se define como π(θ) = P (δ ∈ C|θ). (2.21) Contraste de la media en la poblaciones normales Si tenemos una muestra X1 , . . . , Xn de una población normal con media µ y varianza σ 2 donde ambos parámetros se asumen desconocidos un test habitualmente considerado es si la media toma un valor dado. El test formalmente planteado serı́a: Siendo S 2 = Pn 2 i=1 (Xi −X̄) n−1 H0 :µ = µ0 , (2.22) H1 :µ 6= µ0 . (2.23) , el estadı́stico habitualmente utilizado es el siguiente T = X̄ − µ0 √ . S/ n Bajo la hipótesis nula este estadı́stico sigue una distribución t de Student con n − 1 grados de libertad, T ∼ t(n − 1). Si suponemos que trabajamos con un nivel de significación α la región crı́tica en la cual rechazamos la hipótesis nula serı́a |T | > tn−1,1− α2 . 34 2.5.1. Test del cociente de verosimilitudes El cociente de verosimilitudes para contrastar estas hipótesis se define como Λ= máxθ∈Θ0 L(θ) máxθ∈Θ L(θ) (2.24) Es razonable pensar que en la medida en que Λ tome valores menores entonces la hipótesis alternativa sea más plausible que la hipótesis nula y por lo tanto rechacemos la hipótesis nula. Realmente se suele trabajar con −2 log Λ pues bajo la hipótesis nula tiene una distribución asintótica ji-cuadrado donde el número de grados de libertad es la diferencia de las dimensiones de los espacios paramétricos Θ = Θ0 ∪ Θ1 y Θ0 . Si denotamos L0 = máxθ∈Θ0 L(θ) y L1 = máxθ∈Θ L(θ) entonces 0 Λ= L L1 y L0 − 2 log λ = −2 log = −2(l0 − l1 ) (2.25) L1 siendo l0 y l1 los logaritmos de L0 y L1 respectivamente que también corresponden con los máximos de la logverosimilitud sobre Θ0 y sobre Θ. 2.5.2. Test de Wald Supongamos que el θ es un parámetro y θ̂ denota su estimador máximo verosı́mil. Supongamos que queremos contrastar las siguientes hipótesis: H0 :θ = θ0 , (2.26) H1 :θ 6= θ0 . (2.27) Denotamos por SE(θ̂) el error estándar bajo la hipótesis alternativa de θ̂. Entonces el estadı́stico θ̂ − θ0 z= (2.28) SE(θ̂) tiene, bajo la hipótesis nula, aproximadamente una distribución normal estándar, z ∼ N (0, 1). Este tipo de estadı́sticos donde se utiliza el error estándar del estimador bajo la hipótesis alternativa recibe el nombre de estadı́stico de Wald. Supongamos que θ es un vector de parámetros y queremos contrastar las hipótesis dadas en 2.26. La versión multivariante del estadı́stico dado en 2.28 viene dada por W = (θ̂ − θ0 )0 [cov(θ̂)]−1 (θ̂ − θ0 ), (2.29) donde cov(θ̂) se estima como la matriz de información observada en el MLE θ̂. La distribución asintótica de W bajo la hipótesis nula es una distribución ji-cuadrado donde el número de grados de libertad coincide con el número de parámetros no redundantes en θ. 2.5.3. Intervalos de confianza Empezamos recordando el concepto de intervalo de confianza con un ejemplo muy conocido como es la estimación de la media en poblaciones normales. Ejemplo 8 (Intervalo de confianza para la media de una normal) Veámoslo con un ejemplo y luego planteamos la situación más general. Tenemos una muestra aleatoria X1 , . . . , Xn i.i.d. tales que Xi ∼ N (µ, σ2). Entonces es conocido que X̄n − µ √ ∼ tn−1 . S/ n 35 (2.30) −µ n√ depende tanto de la muestra que conocemos como de un parámeVemos cómo X̄ S/ n tro (la media µ) que desconocemos. Fijamos un valor de α (habitualmente tomaremos α = 0,05) y elegimos un valor tn−1,1−α/2 tal que P (−tn−1,1−α/2 ≤ X̄n − µ √ ≤ tn−1,1−α/2 ) = 1 − α. S/ n (2.31) La ecuación anterior la podemos reescribir como S S P (X̄n − tn−1,1−α/2 √ ≤ µ ≤ X̄n + tn−1,1−α/2 √ ) = 1 − α. n n (2.32) Tenemos una muestra aleatoria X1 , . . . , Xn y por lo tanto tenemos un intervalo aleatorio dado por [X̄n − tn−1,1−α/2 √Sn , X̄n + tn−1,1−α/2 √Sn ]. Este intervalo tiene una probabilidad de 1 − α de contener a la verdadera media. Tomemos ahora la muestra y consideremos no los valores aleatorios de X̄n y de S 2 sino los valores observados x̄n y s. Tenemos ahora un intervalo [x̄n − tn−1,1−α/2 √sn , x̄n + tn−1,1−α/2 √sn ] fijo. Es posible que µ esté en este intervalo y es posible que no lo esté. Sabemos que antes de tomar la muestra tenı́amos una probabilidad de 1 − α de contener a la verdadera media pero después de tomar la muestra tenemos una confianza de 1 − α de contener a la verdadera media. Al intervalo [x̄n − tn−1,1−α/2 √sn , x̄n + tn−1,1−α/2 √sn ] se le llama intervalo de confianza para µ con nivel de confianza 1 − α. Vamos a ver un planteamiento más general del problema. Supongamos que tenemos un test para contrastar la hipótesis simple H0 : θ = θ0 frente a la alternativa H1 : θ 6= θ0 . Supongamos que elegimos un nivel de significación α para contrastar las hipótesis anteriores y consideramos el siguiente conjunto formado por todos los θ0 tales que no rechazamos la hipótesis nula al nivel α. Este conjunto es un conjunto de confianza al nivel 1 − α. Cuando el conjunto de confianza es un intervalo hablamos de intervalo de confianza. Supongamos que consideramos el test del cociente de verosimilitudes. Denotemos por χ2k (1 − α) el percentil 1 − α de una distribución ji-cuadrado con k grados de libertad. Entonces el intervalo de confianza al nivel 1 − α serı́a el conjunto {θ0 : −2[l(θ0 ) − l(θ̂)] < χ2k (1 − α)} (2.33) Consideremos ahora un test de Wald. En este caso, el intervalo de confianza de Wald vendrı́a dado por el siguiente conjunto: {θ0 : |θ̂ − θ0 | SE(θ̂) < Z1−α/2 } (2.34) donde SE(θ̂) es el error estándar estimado de θ̂ bajo la hipótesis alternativa. 36 Capı́tulo 3 Componentes principales 3.1. Introducción En este tema nos ocupamos de problemas de reducción de dimensión. ¿Qué significa reducir la dimensión? Responder a esta pregunta es obvio si nos fijamos en los datos que tenemos. Trabajando con expresión de genes tenemos tantas filas como genes y tantas columnas como muestras. En resumen miles de filas y decenas o centenares de columnas. En temas anteriores hemos visto como seleccionar filas, esto es, seleccionar genes es una tarea incluso previa. Hemos de quedarnos con genes que tengan una expresión diferencial si consideramos alguna caracterı́stica fenotı́pica o bien con genes que tengan una expresión mı́nima o bien con genes que tengan un cierto nivel de variación. ¿Qué hacemos con las columnas? O de otro modo: ¿qué hacemos con las muestras? Quizás la respuesta natural serı́a: si tenemos miles de filas, ¿por qué preocuparse de unas decenas de filas? No es una buena respuesta. Realmente tener 50 o 100 columnas son muchas a la hora de visualizar resultados o bien de aplicar tratamientos estadı́sticos. En este tema tratamos el tema de cómo reducir el número de columnas. 3.2. Componentes principales Para ilustrar los conceptos vamos a considerar unos datos sencillos. Tomamos los datos golub y nos fijamos en los genes que tienen que ver con “Cyclin” (tienen esta palabra en su nombre). Vamos a considerar las dos primeras muestras, esto es, las dos primeras columnas. library(multtest) data(golub) sel <- grep("Cyclin", golub.gnames[, 2]) golub.red <- golub[sel, 1:2] Los datos aparecen en el siguiente dibujo. Cada punto corresponde con uno de los genes seleccionados. plot(golub.red) 37 1.5 ● 0.5 ● ● ● 0.0 golub.red[,2] 1.0 ● ● ●● −0.5 ● −1.5 −1.0 ● ● −1.5 −1.0 −0.5 0.0 0.5 1.0 1.5 2.0 golub.red[,1] Para la fila i (para el gen i) denotamos las expresiones observadas en las dos muestras como xi = (xi1 , xi1 ). Tenemos n filas y por lo tanto nuestros datos son xi con i = 1, . . . , n. Vamos a repetir el dibujo anterior mostrando el nombre del gen. 38 1.5 CCND2 Cyclin D2 0.5 Cyclin−selective ubiquitin carrier protein mRNA CDK6 Cyclin−dependent kinase 6 0.0 CDK2 Cyclin−dependent kinase 2 Cyclin G2 mRNA Cyclin−dependentkinase kinaseinhibitor 4 (CDK4) CDKN1A Cyclin−dependent 1Agene (p21, Cip1) Cyclin G1 mRNA −0.5 Segunda muestra 1.0 CCND3 Cyclin D3 −1.5 −1.0 CCNH Cyclin H Cyclin CCNFA1 Cyclin mRNA F −1.5 −1.0 −0.5 0.0 0.5 1.0 1.5 2.0 Primera muestra Centramos los datos. Esto es, le restamos a cada columna la media de la columna. Para ello, primero calculamos las medias. El vector de medias lo vamos a denotar por x̄ = (x̄1 , x̄2 ) donde n X xij x̄j = n i=1 es decir, cada componente es la media de las componentes. En resumen el primer valor es la expresión media en la primera muestra para todos los genes. Podemos calcular fácilmente el vector de medias. Una función especı́fica es la siguiente. medias <- colMeans(golub.red) También podemos usar la función genérica apply que nos hace lo mismo. medias <- apply(golub.red, 2, mean) Le restamos a cada columna su media. golub.red <- sweep(golub.red, 2, medias) En la siguiente figura reproducimos los datos centrados. Mostramos los ejes de coordenadas en rojo. 39 plot(golub.red) abline(v = mean(golub.red[, 1]), col = "red") abline(h = mean(golub.red[, 2]), col = "red") 1.5 ● 0.5 ● ● ● 0.0 golub.red[,2] 1.0 ● ● ●● −0.5 ● −1.0 ● ● −1.5 −1.0 −0.5 0.0 0.5 1.0 1.5 golub.red[,1] Hemos trasladado los datos de modo que las medias de cada variable valen cero ahora. Esto es lo que se conoce como centrar los datos. Hemos centrado los datos. Podemos comprobar que los nuevos datos tienen una media nula. colMeans(golub.red) ## [1] -3.007e-17 1.070e-17 Nuestros datos (filas) corresponden a las expresiones correspondientes a los genes. Los datos originales tienen dimensión 2 (dos variables correspondientes a las dos muestras) y supongamos que pretendemos reducir la dimensión a solo una, esto es, representar cada gen mediante un único número. La idea de las componentes principales es considerar una combinación lineal de los valores originales. Es decir, se pretende elegir un vector (de dimensión dos) a1 = (a11 , a12 ) de modo que en lugar de utilizar xi consideremos (el resumen) ui = a11 xi1 + a12 xi2 . ¿Qué a1 elegimos? La idea es lograr que los valores ui tengan la mayor variabilidad que se pueda con objeto de no perder información. Mantener la variabilidad original indica que mantenemos la información que los datos originales tienen. En concreto se elige a1 40 de modo que maximizamos n 1X (ui − ū)2 . n i=1 El vector a1 nos indica la dirección sobre la cual proyectamos los datos originales. Las proyecciones sobre a1 , los valores ui son la mejor descripción univariante de los datos. La segunda mejor descripción que sea ortogonal a la anterior serı́an las proyecciones sobre la lı́nea ortogonal a la primera que pasa por el origen de coordenadas. Obtengamos las componentes principales. a.pca <- prcomp(golub.red) Vamos a representar los vectores directores de las lı́neas sobre las que proyectamos. 1.5 ● 0.5 ● ● ● 0.0 golub.red[,2] 1.0 ● ● ●● −0.5 ● −1.0 ● ● −1.5 −1.0 −0.5 0.0 0.5 1.0 1.5 golub.red[,1] Estos vectores los podemos ver con a.pca$rotation ## PC1 PC2 ## [1,] -0.7620 0.6476 ## [2,] -0.6476 -0.7620 Y las lı́neas sobre las que proyectamos aparecen en el siguiente dibujo en azul. 41 1.5 ● 0.5 ● ● ● 0.0 golub.red[,2] 1.0 ● ● ●● −0.5 ● −1.0 ● ● −1.5 −1.0 −0.5 0.0 0.5 1.0 1.5 golub.red[,1] Y finalmente podemos ver las proyecciones. En verde mostramos las proyecciones sobre la primera componente. 42 1.5 ● 0.5 ● ● 0.0 ● ● ●● −0.5 ● ● −1.0 golub.red[,2] 1.0 ● ● −1.5 −1.0 −0.5 0.0 0.5 1.0 1.5 golub.red[,1] Y ahora consideremos la proyección sobre la segunda componente. 43 1.5 ● 0.5 ● ● ● 0.0 golub.red[,2] 1.0 ● ● ●● −0.5 ● −1.0 ● ● −1.5 −1.0 −0.5 0.0 0.5 1.0 1.5 golub.red[,1] Los valores de estas proyecciones los obtenemos con predict(a.pca) ## ## [1,] ## [2,] ## [3,] ## [4,] ## [5,] ## [6,] ## [7,] ## [8,] ## [9,] ## [10,] ## [11,] ## [12,] PC1 -2.50309 0.01369 -2.38702 0.33490 0.76608 0.27145 0.31170 2.22052 -0.93221 -0.39946 0.08294 2.22052 PC2 -1.542e-01 -2.024e-01 3.714e-03 -6.847e-05 2.806e-01 2.900e-02 -2.876e-01 -8.232e-02 1.837e-01 -7.240e-03 3.192e-01 -8.232e-02 Las desviaciones estándar de la primera y segunda componente principal son las siguientes 44 ## [1] 1.469 0.185 Y las varianzas son los cuadrados de las desviaciones estándar. a.pca$sdev^2 ## [1] 2.15730 0.03421 ¿Cómo de variables son nuestros datos? Podemos cuantificar el total de la variación de los datos sumando las varianzas de cada una de las dos coordenadas var(golub.red[, 1]) ## [1] 1.267 var(golub.red[, 2]) ## [1] 0.9246 cuya suma es var(golub.red[, 1]) + var(golub.red[, 2]) ## [1] 2.192 Las nuevas coordenadas tienen la misma varianza total. sum(a.pca$sdev^2) ## [1] 2.192 ¿Y qué proporción de la varianza es atribuible a la primera componente? ¿Y a la segunda? Podemos dividir la varianza de cada componente por la suma total. variacion.total <- sum(a.pca$sdev^2) a.pca$sdev^2/variacion.total ## [1] 0.98439 0.01561 La primera componente explica un 98.44 % de la variación total. ¿Para qué necesitamos utilizar dos números por gen si con uno tenemos esencialmente la misma información. 3.3. Componentes principales de los datos golub Hemos visto las componentes principales con dos variables (en nuestro caso dos muestras) con efecto de poder ver el significado geométrico de las componentes principales. Vamos a trabajar con el banco de datos completo: todos los datos golub que tienen 38 muestras (27 de un tipo de leucemia y 11 de otro tipo). Obtengamos las componentes principales. golub.pca <- prcomp(golub, scale = TRUE, center = TRUE) 45 El argumento center=TRUE centra los datos restando la media de la columna de modo que las variables tengan medias nulas. El argumento scale=TRUE hace que las variables originales sean divididas por su desviación estándar de modo que la varianza (y la desviación estándar) de las nuevas variables sea la unidad. Diferentes criterios podemos aplicar a la hora de decidir con cuántas componentes nos quedamos. 1. Uno puede ser la proporción total explicada. Fijar un nivel mı́nimo y quedarnos con el número de componentes necesario para superar este valor mı́nimo. 2. El segundo puede ser que una componente no puede tener una desviación estándar menor que una de las variables originales. Si hemos escalado cada variable original dividiendo por su desviación estándar entonces la desviación estándar de cada componente ha de ser mayor que uno. 3. Otro criterio puede ser ver en qué momento se produce un descenso de la desviación estándar muy notable. Quedarnos con las componentes previas. Un resumen de las componentes nos puede indicar con cuántas nos quedamos. summary(golub.pca) ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Importance of components: PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 Standard deviation 5.044 1.4407 1.1173 1.0351 0.8582 0.7440 0.7210 0.6923 0.6382 Proportion of Variance 0.669 0.0546 0.0328 0.0282 0.0194 0.0146 0.0137 0.0126 0.0107 Cumulative Proportion 0.669 0.7240 0.7569 0.7851 0.8045 0.8190 0.8327 0.8453 0.8561 PC10 PC11 PC12 PC13 PC14 PC15 PC16 PC17 Standard deviation 0.6363 0.56700 0.55263 0.53868 0.52011 0.49568 0.48402 0.47719 Proportion of Variance 0.0106 0.00846 0.00804 0.00764 0.00712 0.00647 0.00617 0.00599 Cumulative Proportion 0.8667 0.87518 0.88321 0.89085 0.89797 0.90443 0.91060 0.91659 PC18 PC19 PC20 PC21 PC22 PC23 PC24 PC25 Standard deviation 0.47068 0.45421 0.43795 0.43410 0.42475 0.41582 0.40718 0.40066 Proportion of Variance 0.00583 0.00543 0.00505 0.00496 0.00475 0.00455 0.00436 0.00422 Cumulative Proportion 0.92242 0.92785 0.93290 0.93786 0.94260 0.94715 0.95152 0.95574 PC26 PC27 PC28 PC29 PC30 PC31 PC32 PC33 Standard deviation 0.3948 0.38731 0.38417 0.37882 0.37124 0.36957 0.3596 0.3593 Proportion of Variance 0.0041 0.00395 0.00388 0.00378 0.00363 0.00359 0.0034 0.0034 Cumulative Proportion 0.9598 0.96379 0.96767 0.97145 0.97508 0.97867 0.9821 0.9855 PC34 PC35 PC36 PC37 PC38 Standard deviation 0.35276 0.34218 0.33228 0.32572 0.30667 Proportion of Variance 0.00327 0.00308 0.00291 0.00279 0.00247 Cumulative Proportion 0.98875 0.99183 0.99473 0.99753 1.00000 Atendiendo al segundo criterio nos quedarı́amos con las cuatro primeras componentes. La quinta tiene una desviación inferior a uno. Atendiendo al tercer criterio vemos que a partir de la quinta es muy estable la desviación estándar. Si nos quedamos con las cinco primeras componentes estamos explicando un 80.44 % de la variación total. Puede ser una buena elección y una solución intermedia. Los nuevos datos los obtenemos con la función predict. a <- predict(golub.pca) Podemos ver todas las componentes para el primer gen (primera fila). 46 a[1, ] ## PC1 PC2 PC3 ## -7.037558 -1.611153 -0.580508 ## PC10 PC11 PC12 ## 0.863368 -0.199101 -0.661874 ## PC19 PC20 PC21 ## 0.484427 -0.413978 0.861061 ## PC28 PC29 PC30 ## -0.022861 -0.267373 0.223251 ## PC37 PC38 ## 0.451057 0.873975 PC4 PC5 PC6 0.008742 0.538498 0.217864 PC13 PC14 PC15 0.098494 1.167026 -0.080884 PC22 PC23 PC24 0.412109 -0.169220 -0.042500 PC31 PC32 PC33 0.004499 -0.066890 -0.420015 PC7 PC8 PC9 0.095230 -0.918847 0.512902 PC16 PC17 PC18 0.019310 0.311826 -0.734193 PC25 PC26 PC27 0.392160 -0.810611 -0.724087 PC34 PC35 PC36 0.043023 0.325942 -0.095873 Y ahora nos quedamos con las primeras cinco columnas correspondientes con las cinco primeras componentes principales como hemos decidido previamente. a <- a[, 1:5] Podemos representar, como es habitual, las dos primeras componentes. plot(a[, 1], a[, 2], xlab = "Primera componente", ylab = "Segunda componente") ● ● ● ● 5 ● ● ● 0 −5 Segunda componente ●●● ● ● ● ● ● ● ●●●● ● ●● ● ● ● ● ●● ●● ● ● ● ● ● ● ●●●● ●● ●●● ● ● ● ●● ●●●●● ● ● ● ● ● ● ● ● ●● ● ● ● ●●●● ●● ● ● ● ● ●● ● ● ● ● ●●● ●● ●● ● ● ● ●● ●●●● ●● ● ●●●●● ● ●● ●●●●●●● ●● ●● ● ● ● ●●● ●●●● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ●● ●● ● ●● ● ● ●● ● ● ● ● ●● ●● ●● ●● ●● ● ●● ●● ●● ● ● ●● ●●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●●●● ●●●● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ●● ●●●● ● ●● ● ● ● ● ●● ●●●●●●●● ● ● ● ● ● ● ●●● ●●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●●●●●● ●● ●●● ●● ● ●● ● ● ●●●● ●● ● ●● ●●●● ●● ●● ●● ● ● ● ● ● ● ● ●● ●● ● ●● ●● ● ● ● ● ● ●● ●● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ●● ●●● ● ●●● ● ● ● ●● ●●●●●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●●● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ●● ● ●●● ● ● ●● ●●● ● ● ●● ●● ● ●● ● ●● ● ●● ●● ●● ● ●● ●● ● ●● ●●● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ●● ●● ● ● ● ● ● ●● ● ● ● ●●● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ● ● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ● ● ● ● ●● ● ●●● ● ●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●●●● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●●●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ●●●●●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ●● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●●● ● ●●●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ●● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●● ●●● ● ● ● ●● ● ● ● ●● ● ● ● ●● ●● ● ●● ●● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ●● ●● ●● ● ● ● ● ●● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●●●● ●● ● ● ● ● ●● ● ● ●● ● ●● ● ● ● ●●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ●● ● ● ●● ● ● ● ●● ● ● ● ● ●● ● ●● ● ● ● ●●● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●●●●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ●●●● ● ● ●● ● ● ● ●● ● ● ● ●● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●●●● ● ● ● ● ●● ●● ● ●●● ●●● ● ●● ● ● ●● ● ● ●● ● ●● ●● ● ● ● ●●●● ●● ● ● ● ● ●● ●●●● ● ● ●●● ● ● ●● ●● ● ● ●● ● ●●● ●●●●● ● ● ● ●● ●● ● ●● ● ● ●●● ● ●● ● ● ●●●● ● ●● ● ●● ●● ● ● ●● ●● ● ●● ● ●● ● ● ● ● ● ● ●● ● ●● ●● ● ●● ●● ● ● ●●● ●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●●● ● ●● ● ● ● ●●●●● ● ●●● ●●● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ●●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●●● ● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● −5 0 5 10 15 20 Primera componente Es interesante observar los valores del vector asociado a la primera componente. 47 golub.pca$rotation[, 1] ## [1] 0.1715 0.1691 0.1650 0.1727 0.1659 0.1669 0.1686 0.1602 0.1649 0.1688 0.1654 0.1694 ## [13] 0.1629 0.1661 0.1648 0.1721 0.1559 0.1600 0.1677 0.1492 0.1273 0.1621 0.1644 0.1653 ## [25] 0.1659 0.1690 0.1540 0.1689 0.1541 0.1517 0.1691 0.1682 0.1452 0.1675 0.1638 0.1509 ## [37] 0.1476 0.1520 Podemos ver que son coeficientes muy parecidos, todos positivos. Básicamente tenemos la media muestral de todos los niveles de expresión en las 38 muestras. La primera componente es básicamente la media sobre las 38 muestras. ¿Y la segunda componente? golub.pca$rotation[, 2] ## [1] 0.104190 -0.036887 0.069109 0.100701 0.170952 0.028349 0.032391 0.000506 ## [9] 0.093594 0.023533 0.075376 -0.089381 0.233400 0.077939 0.237951 0.184072 ## [17] 0.078197 0.041608 0.114629 0.247148 0.201580 -0.014148 0.037859 0.210586 ## [25] -0.044465 0.122287 0.021439 -0.189279 -0.174593 -0.243776 -0.165316 -0.150156 ## [33] -0.344035 -0.157688 -0.130649 -0.277921 -0.344829 -0.222766 Si observamos los coeficientes vemos que las primeros 27 valores son positivos y los 11 últimos son negativos. Además no hay una gran diferencia entre los 27 primeros y tampoco entre los 11 últimos. Básicamente estamos comparando, para cada gen, la media de los niveles de expresión sobre los datos ALL (leucemia linfoblástica aguda) con la media sobre los datos AML (leucemia mieloide aguda). 3.4. Un poco de teorı́a ⇑ Cuando tomamos medidas sobre personas, objetos, empresas, unidades experimentales de un modo genérico, se tiende a recoger el máximo de variables posible. En consecuencia tenemos dimensiones del vector de caracterı́sticas X grandes. Una opción consiste en sustituir la observación original, de dimensión d, por k combinaciones lineales de las mismas. Obviamente pretendemos que k sea mucho menor que d. El objetivo es elegir k de modo que expresen una proporción razonable de la dispersión o variación total cuantificada como la traza de la matriz de covarianza muestral, tr(S), Sea X un vector aleatorio de dimensión d con vector de medias µ y matriz de covarianzas Σ. Sea T = (t1 , t2 , . . . , td ) (los ti indican la i-ésima columna de la matriz) la matriz ortogonal tal que T 0 ΣT = Λ = diag(λ1 , . . . , λd ), (3.1) donde λ1 ≥ λ2 ≥ . . . ≥ λd ≥ 0 son los valores propios de la matriz Σ. Sea Y = T 0 (X − µ). (3.2) Si denotamos la j-ésima componente de Y como Yj entonces Yj = t0j (X − µ) con j = 1, . . . , d. A la variable Yj la llamamos la j-ésima componente principal de p Y . La variable Zj = λj Yj es la j-ésima componente principal estandarizada de Y . Estas componentes tienen algunas propiedades de gran interés. Notemos que el vector tj tiene longitud unitaria y, por lo tanto, Yj no es más que la proyección ortogonal de X − µ en la dirección tj . Proposición 1 1. Las variables Yj son incorreladas y var(Yj ) = λj . 48 2. Las variables Zj son incorreladas y con varianza unitaria. Demostración. En cuanto al apartado primero tenemos que var(Y ) = var(T 0 (X − µ) = T 0 var(Y )T = T 0 ΣT = Λ. El segundo apartado es directo a partir del primero. Se verifica el siguiente resultado. Teorema 2 Las componentes principales Yj = t0j (X − µ) con j = 1, . . . , d tienen las siguientes propiedades: 1. Para cualquier vector a1 de longitud unitaria, var(a01 X) alcanza su valor máximo λ1 cuando a1 = t1 . 2. Para cualquier vector aj de longitud unitaria tal que a0j ti = 0 para i = 1, . . . , j − 1, se tiene que var(a0j X toma su valor máximo λj cuando aj = tj . Pd Pd 3. j=1 var(Yj ) = j=1 var(Xj ) = traza(Σ). La versión muestral de las componentes principales la obtenemos sustituyendo en lo anterior µ y Σ por X̄ y Σ̂ respectivamente. Es importante considerar el estimador de Σ que estamos utilizando (o bien el estimador insesgado donde dividimos por n − 1 o bien el estimador en donde dividimos por n). Si denotamos por λ̂1 ≥ . . . ≥ λ̂d los valores propios ordenados de Σ̂ y la matriz T̂ = (t̂1 , . . . , t̂d ) es la matriz tal que cada columna es el correspondiente vector propio entonces tenemos las componentes principales muestrales dadas por yj = T̂ 0 (xi − x̄). La nueva matriz de datos viene dada por Y 0 = (y1 , . . . , yn ) = T̂ 0 (x1 − x̄, . . . , xn − x̄) (3.3) Finalmente, si las variables vienen dadas en unidades muy distintas puede ser conveniente sustituir la matriz de covarianzas (poblacional o muestral) por la correspondiente matriz de correlaciones. De hecho, una de los inconvenientes de las componentes principales como un modo de reducir la dimensión de los datos es precisamente que obtenemos resultados distintos si utilizamos las componentes principales obtenidas a partir de la matriz de covarianzas o bien las componentes principales obtenidas a partir de la matriz de correlaciones. A partir de las d variables originales podemos obtener hasta d componentes principales. Sin embargo, hemos dicho que pretendemos reducir la dimensión del vector de datos. La pregunta a responder es: ¿con cuántas componentes nos quedamos? Supongamos que estamos trabajando PdΣ. Hemos Pd con la matriz Pd de covarianzas de recordar que var(yj ) = λj y que j=1 var(xj ) = j=1 var(yj ) = j=1 λj . En consecuencia se suelen considerar los siguientes cocientes Pk j=1 λj , con k = 1, . . . , d, Pd j=1 λj de modo que, cuando para un cierto valor de k, estamos próximos a la unidad nos quedamos con ese valor de k. En la versión muestral trabajaremos o bien con los valores propios de la matriz de covarianzas muestral o la matriz de correlaciones muestrales. Una referencia muy interesante sobre componentes principales es Abdi and Williams [2010]. 49 50 Capı́tulo 4 Análisis cluster En este tema vamos a tratar lo que en la literatura estadı́stica recibe el nombre de análisis cluster 1 o, en mejor castellano, análisis de conglomerados. En la literatura de Inteligencia Artificial se utiliza la expresión clasificación no supervisada. Tenemos una muestra de observaciones multivariantes de dimensión d. ¿Qué pretendemos hacer con ellos? Encontrar grupos. Muy breve la respuesta pero: ¿qué son grupos? Imaginemos una imagen aérea fija de un patio de un colegio. En esta imagen los datos son las posiciones de los niños. ¿Se agrupan los niños formando grupos o todos están jugando con todos y los grupos son una consecuencia pasajera del juego (delanteros y defensas que aparecen agrupados en un ataque)? Parece claro y simple el problema. Sı́, lo parece. ¿Qué es un grupo? ¿Cómo defino un grupo? ¿Cuántos grupos distingo en los datos? Estamos viendo el efecto del ruido o realmente hay una estructura debajo que la vemos en un entorno con ruido. ¿Qué quiere decir encontrar grupos? Se trata de clasificar las observaciones en grupos de modo que las observaciones de un mismo grupo sean lo más similares que podamos y que los grupos entre sı́ sean muy distintos. El número de procedimientos que se han propuesto en la literatura es muy grande. La mayor parte de ellos no tienen un modelo probabilı́stico debajo, no son procedimientos basados en modelo. Son métodos que esencialmente utilizan el concepto de proximidad. Valoran de distintas formas lo próximos, lo cercanos que están los puntos, dentro de un mismo grupo y entre distintos grupos. Es pues, el primer punto a tratar: ¿cómo cuantificamos lo cerca o lejos que están los distintos puntos? En la sección 4.2 nos ocupamos de este punto. También será necesario, como veremos en el tema, valorar cuando dos conjuntos de puntos son más o menos parecidos, proximos, similares. En la misma sección nos ocupamos de ello. Supongamos que ya hemos clasificado en distintos grupos. ¿Hemos tenido éxito al hacerla? Cuando tenemos un análisis discriminante tenemos una muestra donde sabemos a qué grupo pertenece el individuo y dónde lo hemos clasificado. Esto nos permitı́a valorar si nuestro procedimiento clasifica bien o no. Aquı́ no vamos a tener esta referencia que nos da la muestra de entrenamiento. ¿Cómo valorarlo? Un concepto conocido por silueta y debido a Rousseeuw [Kaufman and Rousseeuw, 1990] nos va a servir para ello. No es ni tan simple ni tan satisfactorio como en análisis discriminante (como es de esperar si tenemos menos información para trabajar). Lo estudiamos en la sección 4.5. Entre los muchos procedimientos de obtener los grupos a partir de los datos, los más utilizados son dos tipos: procedimientos jerárquicos y métodos de particionamiento. De los jerárquicos nos ocupamos en la sección 4.3. El método de las k-medias y el método de las k-mediodes (el castellano como siempre es muy sufrido 1 Por cierto que la palabra cluster no existe en castellano 51 pues no existe la palabra) son métodos de particionamiento y los tratamos en la sección 4.4. Una referencia muy adecuada que se puede consultar es el texto de [Kaufman and Rousseeuw, 1990]. Cualquier texto de reconocimiento de patrones es adecuado. En lo que sigue vamos a basarnos fundamentalmente en la librerı́a cluster [?] y denotaremos los datos a agrupar con xi con i = 1, . . . n siendo xi = xi1 , . . . , xid . 4.1. Algunos ejemplos Empezamos viendo un conjunto de datos que nos sugieran el problema y cómo tratarlo. Nota de R 9 (Un ejemplo de datos a agrupar) Generamos tres muestras correspondientes a distribuciones bivariates normales. La matriz de covarianzas vamos a suponer que es la matriz identidad. Los vectores de medias son µ1 = c(1, 1), µ2 = c(3, 3) y µ2 = c(7, 7). Es resumen un vector Xi ∼ Nd (µi , I2×2 . Vamos a generar cien datos de cada grupo. Vamos a utilizar el paquete mvtnor ? para simular las distintas normales bivariantes. library(mvtnorm) x1 <- rmvnorm(n = 100, mean = c(1, 1)) x2 <- rmvnorm(n = 100, mean = c(3.3, 4.1)) x3 <- rmvnorm(n = 100, mean = c(6, 5.5)) El siguiente dibujo muestra los datos generados. limite.x <- c(-1, 8) limite.y <- limite.x plot(x1, xlim = limite.x, ylim = limite.y) points(x2, pch = 2) points(x3, pch = 3) 52 8 6 4 x1[,2] ● ● ● ● ● 2 ● ● ● ● 0 ●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ●● ● ●● ● ● ● ● ●●● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0 2 4 6 8 x1[,1] Se ve que hay tres grupos pero estos no estan muy claramente delimitados. Nosotros no disponemos de esta información. Conocemos los valores que componen los vectores de datos pero no conocemos el grupo al que podrı́a pertenecer cada uno de ellos. Tampoco tenemos porqué tener prefijado el número de grupos. Los datos son artificiales pero ilustran bien el problema. Nota de R 10 (Un ejemplo artificial: los datos Ruspini) Son unos datos conocidos, los datos Ruspini. Están en el paquete cluster ?. Cargamos el paquete y los datos. library(cluster) data(ruspini) Representamos los puntos que pretendemos clasificar. plot(ruspini) 53 150 ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 100 ●● ● ● ● y ● ● ● ● ● ● ● ● ● ● ● 50 ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0 ● 0 20 40 60 80 100 120 x Son datos bivariantes. Visualmente vemos cómo se agrupan los puntos. Parece claro que podemos distinguir cuatro grupos. Nota de R 11 (Un ejemplo con los datos golub) Empezamos cargando los datos. library(multtest) data(golub) Previamente hemos visto que los valores de expresión de los genes “CCND3 Cyclin D3” y “Zyxin” permiten diferenciar entre ALL y AML. Localicemos las expresiones correspondientes a estos genes. grep("CCND3 Cyclin D3", golub.gnames[, 2]) ## [1] 1042 grep("Zyxin", golub.gnames[, 2]) ## [1] 2124 Los datos aparecen en estas filas. Por lo tanto podemos construir la matriz de datos correspondiente. 54 cz.data <- data.frame(golub[1042, ], golub[2124, ]) colnames(cz.data) <- c("CCND3 Cyclin D3", "Zyxin") Este será un segundo ejemplo para analizar. Veamos los datos. plot(cz.data) ● 2 ● ● ● ● ● ● ● ● 1 ● ● ● Zyxin ● ● ● ● ● ● ● ● ● ● 0 ● ● ● ● ● ● ● ● −1 ● ● ● ● ● ● ● ● −0.5 0.0 0.5 1.0 1.5 2.0 2.5 CCND3 Cyclin D3 En este caso las observaciones corresponden a las muestras y las variables son los niveles de expresión de dos genes. ¿Hay grupos? Esto no son datos artificiales como los de Ruspini y ya no es tan claro. 4.2. 4.2.1. Disimilaridades Disimilaridades entre observaciones Empezamos tratando el problema de cuantificar el grado de proximidad, de similaridad entre dos puntos en el espacio de dimensión d. Tradicionalmente este tema en Matemáticas se ha formalizado a través del concepto de distancia o métrica. Una métrica es una función que a cada par de puntos x, y ∈ Rd le asocia un valor positivo de modo que cuando mayor es más distantes son, más alejados están. Como siempre la formalización matemática de un concepto intuitivo ha de ser prudente y pedir que se verifiquen ciertos axiomas que resulten razonables y generalmente 55 admisibles. En concreto la función d definida en el espacio producto Rd × Rd se dice que es una métrica si verifica: No negativa d(x, y) ≥ 0. Un punto dista 0 de sı́ mismo d(x, x) = 0. Simetrı́a d(x, y) = d(y, x). Desigualdad triangular d(x, z) ≤ d(x, y) + d(y, z), para todo x, y, z ∈ Rd . Las distancias más utilizadas en análisis cluster son la distancia euclı́dea y la distancia de Manhattan. Para dos vectores x e y (en Rd ) entonces la distancia euclı́dea se define como v u d uX (4.1) d(x, y) = t (xk − yk )2 , k=1 d con x, y ∈ R . La distancia de Manhattan viene dada por d(x, y) = d X |xk − yk |. (4.2) k=1 Las distancias euclı́dea y de Manhattan son adecuadas cuando trabajamos con variables continuas y que además estén en una misma escala. 2 Notemos que cada una de las componentes del vector pesan igualmente. Si tenemos variables que no están igualmente escaladas estas distancias pueden pesar más unas variables que otras no por lo diferentes que sean entre los individuos sino simplemente por su escala. Con mucha frecuencia nos encontramos trabajando con variables que aún siendo continuas están medidas en escalas muy diversas o bien tenemos variables que son continuas, otras que son binarias, otras categóricas con más de dos categorı́as o bien variable ordinales. En resumen, todos los posibles tipos de variables simultáneamente considerados. Es lo habitual. Una variable binaria la codificamos habitualmente como 1 y 0 indicando presencia o ausencia del atributo que estemos considerando. En una variable categórica la codificación es completamente arbitraria y por lo tanto no tiene sentido la aplicación de una de estas distancias. Todo esto plantea el hecho de que no es recomendable, ni tampoco fácil, en un banco de datos con distintos tipos de variables considerar una métrica o distancia, esto es, algo que verifique las propiedades anteriores. Son demasiado exigentes estas propiedades. Lo que se hace es proponer medidas entre los vectores de caracterı́sticas que tienen algunas de las propiedades y son, además, razonables. Por ello no hablaremos, en general, de una distancia o una métrica, sino de una medida de disimilaridad. Finalmente, valores grandes estarán asociados con vectores de caracterı́sticas que tienen una mayor diferencia. Se han propuesto distintas medidas de disimilaridad entre variables cualitativas (binarias simétricas o asimétricas, cualitativas, ordinales) y cuantitativas. En lo que sigue comentamos con algún detalle la que lleva la función daisy de la librerı́a cluster ?. Es una opción muy genérica y razonable. Consideramos el problema cuando solo tenemos un tipo de variable. Finalmente combinaremos todo en una sola medida de disimilaridad. Supongamos descrita al individuo o caso mediante d variables binarias. Es natural construir la tabla de contingencia 2×2 que aparece en la tabla 4.1 donde las filas corresponden con el individuo i y las columnas con el individuo j. Según la tabla 2 La función dist de ? es una buena opción para el cálculo de estas y otras distancias. También lo es la función daisy del paquete cluster ?. 56 Cuadro 4.1: Conteos asociados a dos casos descritos por variables binarias 1 0 1 A C A+C 0 B D B+D A+B C+D d=A+B+C+D los individuos i y j coincidirı́an en la presencia de A atributos y en la no presencia de D atributos. Tenemos B atributos en i que no están en j y C atributos que no están en i pero sı́ que están en j. El total de variables binarias es de d = A + B + C + D. Basándonos en esta tabla se pueden definir distintas medidas de disimilaridad. Vamos a considerar dos situaciones distintas. En la primera trabajamos con variables binarias simétricas y otra para variables binarias no simétricas. Una variable binaria es simétrica cuando las dos categorı́as que indica son intercambiables, cuando no tenemos una preferencia especial en qué resultado lo codificamos como 1 y qué resultado codificamos como 0. Un ejemplo frecuente es el sexo de la persona. Si las variables son todas binarias simétricas es natural utilizar como disimilaridad el coeficiente de acoplamiento simple definido como d(i, j) = A+D B+C =1− . A+B+C +D A+B+C +D La interpretación de esta medida de disimilaridad es simple. Dos individuos son tanto más disimilares cuantas más variables binarias tienen distintas. Notemos que la presencia o ausencia de un atributo tienen el mismo peso. Supongamos que las variable que describen al individuo son binarias asimétricas. Ejemplos de esto pueden ser la presencia o ausencia de un atributo muy poco frecuente. Por ejemplo, tener o no tener sida. Dos personas que tienen el sida, tienen más es común, están más próximas, que dos personas que no lo tienen. Supongamos que codificamos el atributo menos frecuente como 1 y el más frecuente como 0. Está claro que un acoplamiento 1-1 o acoplamiento positivo es más significativo que un acoplamiento negativo o acoplamiento 0-0 por lo que A, número de acoplamientos positivos, ha de tener más peso que d o número de acoplamientos negativos. El más conocido es el coeficiente de Jaccard que se define como d(i, j) = B+C A =1− A+B+C A+B+C en el que simplemente no consideramos los acoplamientos negativos. Consideremos ahora el caso de variables categóricas con más de dos categorı́as. Si todas las variables son de este tipo y tenemos un total de d variables entonces los individuos i y j son tanto más disimilares cuanto más variables categóricas son distintas. Si denotamos por u el número de variables en las que coinciden los dos individuos entonces la medida de disimilaridad serı́a d(i, j) = d−u . d Finalmente veamos cómo tratar las variables ordinales. Lo que haremos para variables de este tipo es transformarlas al intervalo [0, 1]. Si xij denota la j-ésima variable del i-ésimo individuo entonces consideramos la transformación yik = xik − 1 Mk − 1 57 siendo 1, . . . , Mk los valores que puede tomar la j-ésima variable ordinal. Lo que estamos haciendo con este procedimiento es transformar la variable ordinal es una variable numérica con una escala común. En la medida en que el número de categorı́as sea mayor esta transformación tendrá más sentido. Hemos visto cómo tratar cada tipo de variable aisladamente. El problema es combinar todas ellas en una sola medida de disimilaridad. La función daisy del paquete cluster ? utiliza la siguiente medida: Pd (k) (k) k=1 δij dij , (4.3) d(i, j) = Pd (k) k=1 δij donde: (k) δij vale uno cuando las medidas xik y xjk no son valores faltantes y cero en otro caso; (k) δij vale 0 cuando la variable k es binaria asimétrica y tenemos entre los individuos i y j un acoplamiento 0-0; (k) el valor dij es lo que contribuye a la disimilaridad entre i y j la variable k. (k) • Si la variable k es binaria o categórica entonces dij es definida como (k) dij = 1 si xik 6= xjk y 0 en otro caso. • Si la variable k es numérica entonces (k) dij = |xik − xjk | Rk siendo Rk el rango de la variable k definido como Rk = máx xhk − mı́n xhk h h donde h varı́a entre todos los individuos con valor no faltante de la variable k. Si todas las variables son categóricas entonces 4.3 nos da el número de acoplamientos del total de pares disponibles, en definitiva, el coeficiente de acoplamiento simple. Si todas son variables binarias simétricas entonces obtenemos otra vez el coeficiente de acoplamiento simple. Si las variables son binarias asimétricas entonces obtenemos el coeficiente de Jaccard. Cuando todas las variables con las que trabajamos son numéricas la medida de disimilaridad es la distancia de Manhattan donde cada variable está normalizada. Dado un conjunto de datos xi con i = 1, . . . , n tendremos, utilizando algunas de las medidas de disimilaridades comentadas, una matriz de dimensión n × n que tiene en la posición (i, j) la disimilaridad entre xi y xj , d(i, j): [d(i, j)]i,j=1,...,n . Con esta matriz cuantificamos la disimilaridad que hay entre los elementos originales de la muestra. Algunos de los procedimientos de agrupamiento que vamos a considerar en lo que sigue no necesitan conocer los datos originales. Pueden aplicarse con solo conocer esta matriz de disimilaridades. Otros no. Otros utilizan los datos a lo largo de las distintas etapas de aplicación del procedimiento. 4.2.2. Disimilaridades entre grupos de observaciones En algunos procedimientos de agrupamiento (en particular, los jerárquicos) vamos a necesitar calcular disimilaridades entre conjuntos disjuntos de las observaciones originales. Estas disimilaridades las podemos calcular a partir de las disimilaridades originales punto a punto que hemos comentado en la sección 4.2.1. 58 Supongamos que tenemos un banco de datos con n individuos cuyos ı́ndices son {1, . . . , n}. Sean A y B dos subconjuntos disjuntos del conjunto de ı́ndices de la muestra {1, . . . , n}, esto es, dos subconjuntos de observaciones disjuntos. ¿Cómo podemos definir una disimilaridad entre A y B partiendo de las disimilaridades entre los datos individuales? Se han propuesto muchos procedimientos. Si denotamos la disimilaridad entre A y B como d(A, B) entonces las disimilaridades más habitualmente utilizadas son las siguientes: Enlace simple La disimilaridad entre los dos grupos es el mı́nimo de las disimilaridades entre las observaciones de uno y de otro. Tomamos la disimilaridad de los objetos que más se parecen en uno y otro grupo. d(A, B) = mı́n a∈A,b∈B d(a, b) Enlace completo Ahora tomamos como disimilaridad entre los grupos como el máximo de las disimilaridades, en definitiva, la disimilaridad entre los objetos más alejados o más distintos. d(A, B) = máx d(a, b) a∈A,b∈B Promedio La disimilaridad es el promedio de las disimilaridades entre todos los posibles pares. X 1 d(a, b) d(A, B) = |A| × |B| a∈A,b∈B donde |A| es el cardinal del conjunto A. Es importante notar que solamente necesitamos conocer las disimilaridades entre los individuos para poder calcular las disimilaridades entre grupos de individuos. En la siguiente sección nos vamos a ocupar de los métodos jerárquicos en los cuales es fundamental el procedimiento que elijamos para calcular distintas entre grupos. 4.3. Cluster jerárquico La idea de estos procedimientos es construir una jerarquı́a de particiones del conjunto de ı́ndices. Sea {1, . . . , n} el conjunto de ı́ndices que indexan las distintas observaciones. Supongamos que {C1 , . . . , Cr } es una partición de este conjunto de ı́ndices: Ci ⊂ {1, . . . , n}; son disjuntos dos a dos, Ci ∩Cj = ∅ si i 6= j con i, j = 1, . . . , n y ∪ri= Ci = {1, . . . , n}. Dada una partición del conjunto de ı́ndices podemos calcular la matriz r × r que en la posición (i, j) tiene la disimilaridad entre el conjunto Ci y Cj , d(Ci , Cj ) según alguno de los procedimientos antes indicados. Veamos los procedimientos jerárquicos aglomerativos. En estos procedimientos vamos a iniciar el agrupamiento con la partición: Ci = {i} con i = 1, . . . , n, es decir, cada grupo es un individuo. En cada iteración vamos agrupando el par de conjuntos (elementos de la partición que tengamos en esa iteración) que estén más próximos según la disimilaridad entre grupos que estemos utilizando. El proceso continúa hasta que tengamos un único grupo. Un esquema algorı́tmico del procedimiento indicado puede ser el siguiente: 59 Paso 0 Tenemos grupos unitarios formados por cada una de las observaciones. Tenemos pues una partición inicial Ci = {i} con i = 1, . . . , n. En un principio, cada dato es un grupo. Paso 1 Calculamos las disimilaridades entre los elementos de la partición. Para ello utilizamos cualquiera de los procedimientos antes indicados. Paso 2 Agrupamos los dos conjuntos de la partición más próximos y dejamos los demás conjuntos igual. Tenemos ahora Ci con i = 1, . . . , k. Paso 3 Si tenemos un solo conjunto en la partición paramos el procedimiento. Paso 4 Volvemos al paso 1. Hay una representación gráfica muy utilizada para describir los resultados de un cluster jerárquico aglomerativo como el que acabamos de describir. Esta representación tiene el nombre de dendograma. En el dendograma se va mostrando a qué valor de la medida de disimilaridad se produce la unión de los grupos y simultáneamente qué grupos se están uniendo para esa disimilaridad. También nos permite una valoración rápida de cuántos grupos puede haber en el banco de datos. Simplemente trazando una linea horizontal a la altura en que tengamos el número de grupos que pensamos que puede haber. Nota de R 12 Veamos un ejemplo de análisis cluster. Los datos han sido obtenidos de esta página. Tenemos cuatro variables que nos dan las puntuaciones obtenidas en 25 escuelas de New Haven en aritmética y lectura al principio del cuarto curso y al principio del sexto curso. Empezamos cargando el paquete cluster ? y leyendo los datos. library(cluster) x <- read.table("../data/achieve.txt") names(x) <- c("centro", "lec4", "aritme4", "lec6", "aritme6") attach(x) Eliminamos la primera columna en que aparece el nombre de la escuela. y <- x[, -1] Hacemos un análisis cluster jerárquico utilizando la función agnes del paquete cluster. y.ag <- agnes(y) Veamos el dendograma. plot(y.ag, which = 2) 60 1.5 23 11 17 6 24 4 8 12 19 5 21 16 1 14 20 15 22 18 0.0 2 3 7 9 0.5 25 10 13 1.0 Height 2.0 2.5 3.0 Dendrogram of agnes(x = y) y Agglomerative Coefficient = 0.84 Observando el dendograma parece razonable considerar tres grupos. @ Nota de R 13 (Un ejemplo con votos republicanos) Veamos un análisis cluster jerárquico. Los datos son los porcentajes de votas que recibió el candidato republicano en las elecciones americanas entre los años 1856 y1976. Cada observación corresponde a un estado y las variables corresponden con las distintas elecciones. library(cluster) data(votes.repub) agn1 <- agnes(votes.repub, metric = "manhattan", stand = TRUE) El dendograma serı́a el siguiente plot(agn1, which = 2) 61 20 Alabama Georgia Arkansas Louisiana Mississippi South Carolina Alaska Vermont Arizona Montana Nevada Colorado Idaho Wyoming Utah California Oregon Washington Minnesota Connecticut New York New Jersey Illinois Ohio Indiana Michigan Pennsylvania New Hampshire Wisconsin Delaware Kentucky Maryland Missouri New Mexico West Virginia Iowa South Dakota North Dakota Kansas Nebraska Maine Massachusetts Rhode Island Florida North Carolina Tennessee Virginia Oklahoma Hawaii Texas 0 40 Height 60 80 Dendrogram of agnes(x = votes.repub, metric = "manhattan", stand = TRUE) votes.repub Agglomerative Coefficient = 0.8 Pasamos ahora la matriz de distancias cambiamos el procedimiento para el cálculo de las disimilaridades entre grupos. agn2 <- agnes(daisy(votes.repub), diss = TRUE, method = "complete") plot(agn2, which = 2) 62 Alabama Georgia Louisiana Arkansas Florida Texas Mississippi South Carolina Alaska Michigan Connecticut New York New Hampshire Indiana Ohio Illinois New Jersey Pennsylvania Minnesota North Dakota Wisconsin Iowa South Dakota Kansas Nebraska Arizona Nevada Montana Oklahoma Colorado Idaho Wyoming Utah California Oregon Washington Missouri New Mexico West Virginia Delaware Kentucky Maryland North Carolina Tennessee Virginia Hawaii Maine Massachusetts Rhode Island Vermont 100 0 50 Height 150 200 250 Dendrogram of agnes(x = daisy(votes.repub), diss = TRUE, method = "complete") daisy(votes.repub) Agglomerative Coefficient = 0.88 Nota de R 14 Consideremos los datos ruspini. Apliquemos un cluster jerárquico aglomerativo utilizando como disimilaridad entre grupos el promedio de las disimilaridades y como medida de disimilaridad la distancia euclı́dea. ruspini.ag <- agnes(ruspini, metric = "euclidean", method = "average") Representamos el dendograma. plot(ruspini.ag, which = 2) 63 40 1 2 3 5 4 6 8 7 9 10 14 15 17 16 18 1911 12 13 20 61 62 66 63 64 6865 67 69 70 71 72 75 73 74 21 22 23 24 27 28 29 30 25 26 32 3531 36 39 40 33 34 37 38 41 42 43 44 45 49 5153 50 54 52 55 5657 59 60 58 46 47 48 0 20 Height 60 80 100 Dendrogram of agnes(x = ruspini, metric = "euclidean", method = "average") ruspini Agglomerative Coefficient = 0.95 Supongamos que decidimos quedarnos con cuatro grupos. Las clasificaciones de los datos son las siguientes. cutree(ruspini.ag, 4) ## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ## [44] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 Y ahora podemos representar los datos de modo que ponemos en un mismo color los datos que hemos clasificado en un grupo. plot(ruspini, col = cutree(ruspini.ag, 4)) 64 150 ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 100 ●● ● ● ● y ● ● ● ● ● ● ● ● ● ● ● 50 ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0 ● 0 20 40 60 80 100 120 x Un procedimiento jerárquico aglomerativo tiene interés cuando el banco de datos no tiene muchos individuos. En otro caso es muy difı́cil de interpretar un dendograma o de seleccionar el número de grupos que hay. En todo caso lo hemos de ver como un análisis exploratorio para decidir el número de grupos y posteriormente utilizar algún método de particionamiento como los que vamos a ver. 4.4. Métodos de particionamiento Suponemos ahora que tenemos una idea de cuántos grupos hay. Posiblemente hemos realizado un análisis jerárquico previo con todos los datos o, si eran muchos, con una selección aleatoria de los datos. Tenemos pues una idea de cuántos grupos tendremos que considerar. Obviamente podemos luego evaluar los resultados modificando el número de grupos. En principio, vamos a suponer que fijamos el número de grupos a considerar. Suponemos pues que sabemos el número de grupos y lo denotamos por k. 4.4.1. Método de las k-medias El primer procedimiento que vamos a ver es el método de las k-medias (que por alguna extraña razón en la literatura de Inteligencia Artificial se le llama de las c-medias lo que demuestra que cada persona copia a sus amigos o, simplemente, conocidos). Supongamos que tenemos C1 , . . . , Ck una partición de {1, . . . , n}. Un 65 modo bastante natural de valorar la calidad de del agrupamiento que la partición nos indica serı́a simplemente considerar la siguiente función. k X X dE (xj , x̄Ci )2 , (4.4) i=1 j∈Ci donde dE denota aquı́ la distancia euclı́dea y x̄Ci = 1 X xj , |Ci | (4.5) j∈Ci es el vector de medias del grupo cuyos ı́ndices están en Ci . Una partición será tanto mejor cuanto menor sea el valor de la función dada en 4.4. El procedimiento de agrupamiento de las k-medias simplemente se basa en elegir como partición de los datos aquella que nos da el mı́nimo de la función objetivo considerada en ecuación 4.4. Notemos que en muchos textos se hablan del algoritmo de las k-medias y se identifica con un procedimiento concreto para encontrar el mı́nimo de la función. Aquı́ entendemos el procedimiento como la minimización de la función objetivo. De hecho, R ofrece hasta cuatro posibles procedimientos de los muchos que cabe proponer. Hay que diferenciar claramente el procedimiento del método de aplicación del mismo, del método de obtención de dicho mı́nimo. Es importante darnos cuenta de que el procedimiento que acabamos de ver está basado en la utilización de la distancia euclı́dea y en que, dado un grupo, podemos calcular el vector de medias y esto solo lo podemos hacer si todas las variables son cuantitativas. Nota de R 15 Aplicamos el k-medias. ruspini.km <- kmeans(ruspini, 4) Las clasificaciones son ruspini.km$cluster ## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ## 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 ## 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ## 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ## 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 ## 2 2 2 1 2 2 1 1 1 1 1 1 1 1 1 Y representamos los resultados. 66 plot(ruspini, col = ruspini.km$cluster) 150 ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 100 ●● ● ● ● y ● ● ● ● ● ● ● ● ● ● ● 50 ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0 ● 0 20 40 60 80 100 120 x Como vemos buenos resultados. Con ruspini todo va bien. Nota de R 16 (cz.data) Empezamos con el k-medias. cz.km <- kmeans(cz.data, 2) Las clasificaciones son cz.km$cluster ## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 Y representamos los resultados. plot(cz.data, col = cz.km$cluster) 67 ● 2 ● ● ● ● ● ● ● ● 1 ● ● ● Zyxin ● ● ● ● ● ● ● ● ● ● 0 ● ● ● ● ● ● ● ● −1 ● ● ● ● ● ● ● ● −0.5 0.0 0.5 1.0 1.5 CCND3 Cyclin D3 Supongamos que probamos con tres grupos. cz.km <- kmeans(cz.data, 3) plot(cz.data, col = cz.km$cluster) 68 2.0 2.5 ● 2 ● ● ● ● ● ● ● ● 1 ● ● ● Zyxin ● ● ● ● ● ● ● ● ● ● 0 ● ● ● ● ● ● ● ● −1 ● ● ● ● ● ● ● ● −0.5 0.0 0.5 1.0 1.5 CCND3 Cyclin D3 Y finalmente con cuatro. cz.km <- kmeans(cz.data, 4) plot(cz.data, col = cz.km$cluster) 69 2.0 2.5 ● 2 ● ● ● ● ● ● ● ● 1 ● ● ● Zyxin ● ● ● ● ● ● ● ● ● ● 0 ● ● ● ● ● ● ● ● −1 ● ● ● ● ● ● ● ● −0.5 0.0 0.5 1.0 1.5 2.0 2.5 CCND3 Cyclin D3 4.4.2. Particionamiento alrededor de los mediodes ¿Y si no podemos calcular el vector de medias? ¿Y si no tiene sentido calcular el vector de medias? ¿Cómo promediar dos configuraciones de puntos distintas? ¿Cómo promediamos dos formas distintas descritas numéricamente? Cuando el concepto de promedio aritmético no tiene sentido podemos generalizar el procedimiento anterior y hablar de (perdón por el neologismo) de k-mediodes. La idea ahora es sustituir esos centros calculados como vectores de medias de los individuos de un mismo grupo por individuos bien centrados, por individuos tı́picos, que sustituyan a las medias. Supongamos que tomamos k individuos de la muestra que denotamos por mi con i = 1, . . . , k. Particionamos la muestra en k grupos de modo que el grupo Ci está formado por los individuos más próximos a mi que a cualquier otro mj con j 6= i, Ci = {l : d(l, i) = mı́n d(l, j)}. j6=i Consideremos la siguiente cantidad: k X X d(j, mi ). (4.6) i=1 j∈Ci En el método de particionamiento alrededor de los mediodes nos planteamos encontrar las observaciones m1 , . . . , mk que minimizan el valor dado en 4.6. 70 Nota de R 17 (ruspini) Aplicamos PAM. ruspini.pam <- pam(ruspini, 4) Y representamos los resultados. plot(ruspini, col = ruspini.pam$cluster) 150 ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 100 ●● ● ● ● y ● ● ● ● ● ● ● ● ● ● ● 50 ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0 ● 0 20 40 60 80 x Lo dicho, con ruspini todo va bien. Nota de R 18 (cz.data) Empezamos con el k-medias. cz.pam <- pam(cz.data, 2) Y representamos los resultados. plot(cz.data, col = cz.pam$cluster) 71 100 120 ● 2 ● ● ● ● ● ● ● ● 1 ● ● ● Zyxin ● ● ● ● ● ● ● ● ● ● 0 ● ● ● ● ● ● ● ● −1 ● ● ● ● ● ● ● ● −0.5 0.0 0.5 1.0 1.5 CCND3 Cyclin D3 Supongamos que probamos con tres grupos. cz.pam <- pam(cz.data, 3) plot(cz.data, col = cz.pam$cluster) 72 2.0 2.5 ● 2 ● ● ● ● ● ● ● ● 1 ● ● ● Zyxin ● ● ● ● ● ● ● ● ● ● 0 ● ● ● ● ● ● ● ● −1 ● ● ● ● ● ● ● ● −0.5 0.0 0.5 1.0 1.5 CCND3 Cyclin D3 Y finalmente con cuatro. cz.pam <- pam(cz.data, 4) plot(cz.data, col = cz.pam$cluster) 73 2.0 2.5 ● 2 ● ● ● ● ● ● ● ● 1 ● ● ● Zyxin ● ● ● ● ● ● ● ● ● ● 0 ● ● ● ● ● ● ● ● −1 ● ● ● ● ● ● ● ● −0.5 0.0 0.5 1.0 1.5 2.0 2.5 CCND3 Cyclin D3 4.5. Silueta Veamos cómo se construye la silueta. Para la observación i y el grupo C consideramos X ¯ C) = 1 d(i, d(i, j), |C| j∈C la disimilaridad media i con los elementos del grupo C. Para cada observación i, sea A el cluster al cual lo ha asignado el procedimiento cluster que empleamos y calculamos a(i) la disimilaridad media de i con todos los demás individuos del ¯ A). Obviamente estamos asumiendo que A contiene al menos grupo A, a(i) = d(i, ¯ C) para todos los grupos C 6= A y seleccionemos el otro objeto. Consideremos d(i, que tiene el mı́nimo valor: ¯ C). b(i) = mı́n d(i, C6=A 74 Cuadro 4.2: Silueta media y estructura en un conjunto de datos SC 0,71 − 1,00 0,51 − 0,70 0,26 − 0,50 ≤ 0,25 Interpretación Fuerte estructura Estructura razonable Estructura débil. Probar otros métodos No se encuentra estructura ¯ B) = b(i) se le llama vecino El grupo B donde se alcanza este mı́nimo, es decir, d(i, 3 del objeto i. Definimos s(i) como s(i) a(i) si a(i) < b(i), b(i) = 0 si a(i) = b(i), b(i) = − 1 si a(i) > b(i). a(i) = 1− (4.7) (4.8) (4.9) Esto se puede expresar en una única ecuación como s(i) = b(i) − a(i) . máx{a(i), b(i)} En el caso en que el grupo A contenga un único objeto no está muy claro cómo definir a(i). Tomaremos s(i) = 0 que es una elección arbitraria. Se comprueba con facilidad que −1 ≤ s(i) ≤ 1 para cualquier objeto i. Para interpretar el significado de s(i) es bueno ver los valores extremos. Si s(i) es próximo a uno significa que a(i) es mucho menor que b(i) o lo que es lo mismo, que el objeto i está bien clasificado pues la disimilaridad con los de su propio grupo es mucho menor que la disimilaridad con los del grupo más próximo que no es el suyo. Un valor próximo a cero significa que a(i) y b(i) son similares y no tenemos muy claro si clasificarlo en A o en B. Finalmente un valor de s(i) próximo a −1 significa que a(i) es claramente mayor que b(i). Su disimilaridad media con B es menor que la que tiene con A. Estarı́a mejor clasificado en B que en A. No está bien clasificado. Los valores de s(i) aparecerán representados para cada cluster en orden decreciente. Para cada objeto se representa una barra horizontal con longitud proporcional al valor s(i). Una buena separación entre grupos o cluster viene indicada por unos valores positivos grandes de s(i). Además de la representación gráfica se proporciona un análisis descriptivo. En concreto la media de los valores de la silueta dentro de cada cluster y la media de la silueta para todo el conjunto de datos. La clasificación será tanto mejor cuanto mayor sean estos valores medios. De hecho, se puede decidir el número de grupos en función del valor medio de las silueta sobre toda la muestra. Vamos probando distintos números de grupos y nos quedamos con el número que nos da la silueta media máxima. ¿Cuándo podemos decir que hay estructura de grupos en los datos que estamos analizando? Experiencias con datos sugieren la tabla 4.2. Nota de R 19 (ruspini) Veamos el resumen de la silueta. 3 No parece un nombre inadecuado. 75 ruspini.pam <- pam(ruspini, 4) summary(silhouette(ruspini.pam)) ## Silhouette of 75 units in 4 clusters from pam(x = ruspini, k = 4) : ## Cluster sizes and average silhouette widths: ## 20 23 17 15 ## 0.7262 0.7548 0.6691 0.8042 ## Individual silhouette widths: ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 0.420 0.714 0.764 0.738 0.798 0.855 También podemos representarla gráficamente. plot(silhouette(ruspini.pam)) Silhouette plot of pam(x = ruspini, k = 4) 4 clusters Cj j : nj | avei∈Cj si n = 75 1 : 20 | 0.73 2 : 23 | 0.75 3 : 17 | 0.67 4 : 15 | 0.80 0.0 0.2 0.4 0.6 0.8 1.0 Silhouette width si Average silhouette width : 0.74 Nota de R 20 (cz.data) Para estos datos vamos a evaluar el procedimiento kmedias. cz.km <- kmeans(cz.data, 4) summary(silhouette(cz.km$cluster, dist(cz.data))) ## Silhouette of 38 units in 4 clusters from silhouette.default(x = cz.km$cluster, dist = dis ## Cluster sizes and average silhouette widths: 76 ## 11 12 11 4 ## 0.5254 0.4158 0.3751 0.5815 ## Individual silhouette widths: ## Min. 1st Qu. Median Mean 3rd Qu. ## 0.0113 0.3480 0.5220 0.4530 0.6000 Max. 0.6700 plot(silhouette(cz.km$cluster, dist(cz.data))) Silhouette plot of (x = cz.km$cluster, dist = dist(cz.data)) 4 clusters Cj j : nj | avei∈Cj si n = 38 32 36 30 37 34 33 28 31 29 35 38 7 9 23 27 8 22 11 24 1 3 21 6 18 17 25 10 20 14 5 19 12 2 16 13 15 4 26 1 : 11 | 0.53 2 : 12 | 0.42 3 : 11 | 0.38 4 : 4 | 0.58 0.0 0.2 0.4 0.6 0.8 1.0 Silhouette width si Average silhouette width : 0.45 4.6. Un ejemplo completo Nota de R 21 (Un análisis completo de ALL) En esta sección vamos a ver un análisis cluster completo. Lo tomamos de https://wiki.cgb.indiana.edu/display/r/4.+Bioconductor+Clustering+and+Visualization+Script. Como siempre empezamos cargando los datos. library("ALL") data("ALL") Veamos los tipos de biologı́a molecular y las frecuencias de cada tipo. 77 table(ALL$mol.biol) ## ## ALL1/AF4 ## 10 BCR/ABL E2A/PBX1 37 5 NEG 74 NUP-98 1 p15/p16 1 En concreto vamos a quedarnos con dos tipos. selSamples <- is.element(ALL$mol.biol, c("ALL1/AF4", "E2A/PBX1")) Nos quedamos con las muestras (columnas) que corresponden a esa biologı́a molecular. ALLs <- ALL[, selSamples] No vamos a trabajar con todos los genes. En lugar de ello vamos a filtrar atendiendo a criterios basados en sus niveles de expresión. Quizás podrı́amos decir que filtramos de acuerdo con criterios estadı́sticos. Obviamente otro filtraje de genes podrı́a basarse en criterios biológicos atendiendo a algún conocimiento previo sobre los mismos. En concreto los criterios estadı́sticos serán que el nivel medio de expresión sea mayor que un cierto valor mı́nimo tanto en un tipo de biologı́a molecular como en el otro. Podemos utilizar la función apply para calcular las medias. Notemos que la matriz que usamos son las expresiones de ALLs exprs(ALLs) y consideramos las columnas donde se verifica ALLs$mol.bio == "ALL1/AF4", es decir, donde la biologı́a molecular es la primera de las consideradas. m1 <- apply(exprs(ALLs)[, ALLs$mol.bio == "ALL1/AF4"], 1, mean) Ahora podemos considerar qué filas son tales que esta media (calculada para cada gen) es mayor que el valor log2 (100). s1 <- (m1 > log2(100)) ¿Cuántos genes verifican este criterio? table(s1) ## s1 ## FALSE ## 9186 TRUE 3439 Vemos que hay 3439. Hacemos lo mismo con el segundo tipo de biologı́a molecular. m2 <- apply(exprs(ALLs)[, ALLs$mol.bio == "E2A/PBX1"], 1, mean) s2 <- (m2 > log2(100)) Podemos ver la tabla de los genes que verifican y no la condición. table(s2) ## s2 ## FALSE ## 9118 TRUE 3507 78 Podemos ver la tabla de contingencia en donde mostramos el número de genes que verifican las dos condiciones, solamente una o bien ninguna. table(s1, s2) ## s2 ## s1 FALSE TRUE ## FALSE 8863 323 ## TRUE 255 3184 A partir de ahora nos quedamos con los genes que verifican los dos criterios. Notemos que s1 es TRUE cuando se verifica la primera condición y s2 es TRUE cuando se verifica la segunda. Mediante el signo | indicamos la intersección, esto es, ha de darse la primera y la segunda. ALLs <- ALLs[s1 | s2, ] Podemos ver el número de filas y columnas de ALLs para comprobar que vamos bien. dim(ALLs) ## Features ## 3762 Samples 15 Y vamos bien. Vamos a considerar también que los niveles de expresión sean suficientemente variables. En concreto la condición será que la desviación absoluta respecto de la mediana (o simplemente mad) supere un cierto valor. Primero hemos de calcular la desviación absoluta respecto de la mediana de cada fila. gen.mad <- apply(exprs(ALLs), 1, mad) En concreto nos quedamos con los genes que tienen un valor de la desviación absoluta respecto de la mediana superior a 1.4. ALLs <- ALLs[gen.mad > 1.4, ] Otra vez, veamos qué datos tenemos. dim(ALLs) ## Features ## 58 Samples 15 Pocos. No tenemos muchos ahora. Mejor. Menos problemas para clasificar. Vemos un cluster jerárquico aglomerativo de los genes. genes.ag <- agnes(exprs(ALLs)) plot(genes.ag, which = 2) 79 5 10 1065_at 34583_at 40468_at 32184_at 41401_at 38037_at 41779_at 1118_at 31472_s_at 35127_at 38413_at 33358_at 36873_at 37558_at 37283_at 931_at 37809_at 36575_at 547_s_at 37251_s_at 34721_at 41470_at 1150_at 41577_at 37701_at 33274_f_at 41827_f_at 39929_at 38194_s_at 40117_at 38514_at 39318_at 1675_at 32111_at 40615_at 33219_at 36511_at 35995_at 32035_at 35961_at 40936_at 38604_at 266_s_at 36941_at 37225_at 40726_at 37493_at 40088_at 38052_at 33412_at 40365_at 40396_at 39182_at AFFX−BioDn−5_at 40951_at 38585_at 38355_at 0 Height 31525_s_at 15 Dendrogram of agnes(x = exprs(ALLs)) exprs(ALLs) Agglomerative Coefficient = 0.75 O un análisis jerárquico de las muestras. Observemos que aplicamos la función agnes a la matriz transpuesta de las expresiones t(exprs(ALLs)). muestras.ag <- agnes(t(exprs(ALLs))) plot(muestras.ag, which = 2) 80 t(exprs(ALLs)) Agglomerative Coefficient = 0.51 81 LAL5 28003 24019 36001 31007 16004 08018 24005 8 15004 26008 04006 19005 6 12 63001 28032 28028 10 Height 14 16 18 20 Dendrogram of agnes(x = t(exprs(ALLs))) 82 Capı́tulo 5 Análisis discriminante o de cómo clasificar con muestra de entrenamiento Discriminar es clasificar. Es una palabra mal vista. Cuando una persona le dice a otra: “Usted me discrimina” está indicando algo negativo en la medida en que piensa que lo está separando para perjudicarle. Se asume la discriminación como algo que se realiza en un sentido negativo. Pues no. El análisis discriminante simplemente se refiere al problema de clasificar en distintos grupos un conjunto de observaciones vectoriales. Clasificar y discriminar se usan como sinónimos. Tenemos distintos conjuntos de datos multivariantes. ¿Qué quiere que tenemos grupos y qué pretendemos hacer con ellos? Una bióloga ha recogido una serie de animales y ha observado en cada uno unas caracterı́sticas numéricas. Esta bióloga ha podido clasificar a los animales en distintas especies utilizando las variables x de las que dispone y, posiblemente, algunas otras cuya consecución ya no es tan simple y, en ocasiones, ni posible. Está interesada en diseñar un procedimiento que, partiendo de las variables de las que siempre dispone x, le permita decidir la especie a la que pertenece un animal futuro del cual solamente tiene las caracterı́sticas x. Tiene esta persona un problema de clasificación que pretende hacer bien y clasificar a cada animal en su especie con un esfuerzo pequeño. Otro ejemplo puede ser el siguiente. Una persona ha pasado una enfermedad (como la hidatidosis) y por lo tanto guarda en su organismo anticuerpos frente al virus que lo infectó y le causó la enfermedad. A este individuo se le controla a lo largo de los años. Cuando se le aplica un procedimiento diagnóstico el resultado puede ser positivo debido a dos razones: el individuo ha recaı́do en la enfermedad y por lo tanto ha de ser tratado. Sin embargo, si el procedimiento es muy sensible el resultado positivo del test puede ser simplemente producidos por los anticuerpos que la persona conserva. Diferenciar una situación de la otra supone otra exploración (placas del tórax) y, por ello, una complicación adicional. En la realización del test se han recogido la presencia o ausencia de una serie de aminoácidos. Tenemos que nuestro vector de caracterı́sticas son variables binarias o dicotómicas y pretendemos poder decidir a partir de ellas si la persona está sana sin anticuerpos, sana con anticuerpos o finalmente enferma utilizando la presencia o ausencia de los distintos anticuerpos. Este es un segundo problema de interés a tratar aquı́. Pretendemos clasificar a un individuo dado utilizando algunas caracterı́sticas del mismo. Pero para poder hacerlo tenemos que conocer para una muestra, que podemos llamar muestra de entrenamiento (training sample), en qué grupo está cada individuo con los que trabajamos. Esto hace bastante natural el nombre más 83 utilizado en el contexto de la Informática de clasificación supervisada. Nota de R 22 (Cristales en la orina) Tenemos pacientes de los cuales se conocen algunas variables obtenidas de un análisis de orina. En concreto las variables nos dan la gravidez especı́fica (grav), la osmolaridad (osmo), la conductibilidad (conduc), la concentración de urea (urea) y la concentración de calcio (calcio). También tenemos una variable que nos indica la presencia o ausencia de cristales en la orina del individuo (grupo donde 1 indica ausencia y 2 indica presencia). El problema que nos planteamos es diseñar un procedimiento de clasificación de modo que, dado el vector de caracterı́sticas de la orina, nos permita clasificar a un individuo en uno de los dos posibles grupos, esto es, que va a desarrollar cristales en la orina o no. En el diseño del procedimiento pretendemos utilizar la información que ya tenemos, esto es, conocemos para una serie de individuos si tiene o no cristales y los vectores de caracterı́sticas asociados. En una observación futura tendremos el vector de caracterı́sticas pero no conoceremos la clasificación. Leemos los datos de un fichero de SPSS utilizando el paquete foreign ? y mostramos las seis primeras observaciones. library(foreign) x <- read.spss(file = "../data/cristal.sav", to.data.frame = T) x[x == -1] <- NA cc <- complete.cases(x) x <- x[cc, ] Veamos algunos datos. head(x) ## ## ## ## ## ## ## IND 2 3 4 5 6 7 2 3 4 5 6 7 ausencia ausencia ausencia ausencia ausencia ausencia de de de de de de GRUPO cristales cristales cristales cristales cristales cristales GRAV 1.017 1.008 1.011 1.005 1.020 1.012 PH OSMO CONDUC UREA CALCIO 5.74 577 20.0 296 4.49 7.20 321 14.9 101 2.36 5.51 408 12.6 224 2.15 6.52 187 7.5 91 1.16 5.27 668 25.3 252 3.34 5.62 461 17.4 195 1.40 Incluimos un análisis descriptivo de los datos. summary(x) ## ## ## ## ## ## ## ## ## ## ## ## ## ## IND Min. : 2.0 1st Qu.:21.0 Median :40.0 Mean :40.3 3rd Qu.:60.0 Max. :79.0 CONDUC Min. : 5.1 1st Qu.:14.3 Median :21.4 Mean :20.9 3rd Qu.:27.0 Max. :38.0 GRUPO ausencia de cristales :44 presencia de cristales:33 UREA Min. : 10 1st Qu.:159 Median :255 Mean :262 3rd Qu.:362 Max. :620 CALCIO Min. : 0.17 1st Qu.: 1.45 Median : 3.16 Mean : 4.16 3rd Qu.: 6.19 Max. :14.34 84 GRAV Min. :1.00 1st Qu.:1.01 Median :1.02 Mean :1.02 3rd Qu.:1.02 Max. :1.04 PH Min. :4.76 1st Qu.:5.53 Median :5.94 Mean :6.04 3rd Qu.:6.40 Max. :7.94 OSMO Min. : 187 1st Qu.: 410 Median : 594 Mean : 614 3rd Qu.: 803 Max. :1236 Nota de R 23 (Diabetes) Los datos corresponden a una serie de personas de las cuales conocemos información que previsiblemente nos permitirá predecir si son diabéticos o no. Incluso dentro de los diabéticos pretendemos discriminar (distinguir) entre diabetes clı́nica y diabetes manifiesta. La variable tipo nos indica en qué grupo está la persona observada de los tres grupos indicados. El resto de variables nos describen al paciente: peso es el peso relativo, gpb es la glucosa plasmática en ayunas, garea el área bajo la curva de la glucosa, iarea el área bajo la curva de insulina y sspg la glucosa plasmática en estado estacionario. Pretendemos clasificar a un individuo en uno de los tres grupos posibles teniendo en cuenta las variables consideradas. library(foreign) x <- read.spss(file = "../data/diabetes.sav", to.data.frame = T) head(x) ## ## ## ## ## ## ## IND 1 2 3 4 5 6 1 2 3 4 5 6 PESO GPB GAREA IAREA SSPG TIPO LIAREA 0.81 80 356 124 55 control 4.820 0.95 97 289 117 76 control 4.762 0.94 105 319 143 105 control 4.963 1.04 90 356 199 108 control 5.293 1.00 90 323 240 143 control 5.481 0.76 86 381 157 165 control 5.056 Veamos un breve análisis descriptivo de los datos. summary(x) ## ## ## ## ## ## ## ## ## ## ## ## ## ## IND Min. : 1 1st Qu.: 37 Median : 73 Mean : 73 3rd Qu.:109 Max. :145 PESO GPB Min. :0.710 Min. : 70 1st Qu.:0.880 1st Qu.: 90 Median :0.980 Median : 97 Mean :0.977 Mean :122 3rd Qu.:1.080 3rd Qu.:112 Max. :1.200 Max. :353 TIPO LIAREA diabetes manifiesta:33 Min. :2.30 diabetes quimica :36 1st Qu.:4.77 control :76 Median :5.05 Mean :5.02 3rd Qu.:5.40 Max. :6.62 GAREA Min. : 269 1st Qu.: 352 Median : 413 Mean : 544 3rd Qu.: 558 Max. :1568 IAREA Min. : 10 1st Qu.:118 Median :156 Mean :186 3rd Qu.:221 Max. :748 El capı́tulo está organizado del siguiente modo. Empezamos (sección 5.1) recordando el teorema de Bayes con un ejemplo muy simple de urnas (no funerarias). De este modo vemos la idea básica del método de clasificación basado en probabilidades a posteriori. Consideramos, en la sección 5.2, el caso (de interés puramente académico) de dos poblaciones normales univariantes con la misma varianza y con los parámetros conocidos 1 . En la sección 5.3 abordamos la situación con dos poblaciones normales multivariantes. Allı́ consideramos tanto el caso en que las matrices de covarianzas son la misma como cuando son distintas. En la sección 5.4 nos planteamos la estimación de los vectores de medias y las matrices de covarianzas y vemos la implementación práctica del método. El problema de la reducción de la dimensión dentro del problema de la clasificación es considerado en la sección 5.7 1 En datos reales los parámetros no son conocidos. 85 SSPG Min. : 29 1st Qu.:100 Median :159 Mean :184 3rd Qu.:257 Max. :480 5.1. Un problema de probabilidad sencillo Veamos un problema de probabilidad básico que nos servirá para introducir el procedimiento de clasificación que vamos a utilizar. No le falta ningún detalle y muchos lo hemos resuelto. Tenemos dos urnas. En la primera de ellas hay una bola blanca y dos negras mientras que en la segunda urna hay dos bolas blancas y una negra. Elegimos al azar una urna (no sabemos cuál es la elegida). Posteriormente de la urna elegida, elegimos a su vez una bola. Resulta que la bola elegida es blanca. La pregunta que nos hacemos es: ¿De qué urna la hemos elegido? La solución es una aplicación del teorema de Bayes (ver 1.2.3). Denotamos Bi el suceso consistente en que la bola ha sido extraı́da de la i-ésima urna y por el A el suceso de que la bola es blanca. A priori, antes de realizar el experimento, las dos urnas tenı́an la misma probabilidad (elegimos al azar una de las urnas) y por tanto la probabilidad (previa o a priori) de los sucesos Bi serı́an P (Bi ) = 1/2. No sabemos si la urna elegida ha sido la primera o la segunda pero nos podemos plantear qué probabilidad tenemos de que sea blanca si efectivamente es la urna 1 la elegida y lo mismo para la dos. Es obvio que P (A | B1 ) = 1/3 y P (A | B2 ) = 2/3. Esta información se puede combinar aplicando el teorema de Bayes para determinar la probabilidad de que sea la primera o la segunda urna la elegida sabiendo (teniendo pues una información adicional sobre el experimento) que ha salido blanca. En concreto tenemos que i )P (Bi ) . Finalmente podemos comprobar que P (B1 | A) = P (Bi | A) = PkP (A|B P (A|B )P (B ) j=1 j j 1/3 y P (B2 | A) = 2/3. Las probabilidades P (B1 ) y P (B2 ) reciben el nombre de probabilidades a priori. Vamos a denotarlas en lo que sigue por πi , esto es, la probabilidad de la urna i. Nuestra información consiste en la ocurrencia del suceso A (la bola ha sido blanca) de modo que las probabilidades P (A | B1 ) y P (A | B2 ) serı́an las verosimilitudes de que ocurra lo que ha ocurrido si la urna es la primera o la segunda. Finalmente tenemos P (B1 | A) y P (B2 | A) que nos darı́an las probabilidades a posteriori. Hemos de tomar una decisión: ¿cuál fue la urna elegida? Parece natural elegir aquella que tiene a posteriori una máxima probabilidad y quedarnos con la segunda urna. Vamos a reescribir lo que acabamos de hacer que nos acerque al planteamiento más genérico del problema. Supongamos que describimos el color de la bola elegida mediante una variable dicotómica o binaria. Consideramos la variable aleatoria X que vale uno si es blanca la bola y cero en otro caso. Es lo que se llama una variable indicatriz pues nos indica si se ha producido el suceso que nos interesa. 2 El comportamiento aleatorio de X, su distribución de probabilidad, depende que estemos extrayendo una bola de la primera o de la segunda urna. En concreto en la primera urna X sigue una distribución Bernoulli con probabilidad de éxito p1 = 1/3 mientras que en la segunda urna tenemos una Bernoulli con probabilidad de éxito p2 = 2/3. Cada urna es una población distinta donde el comportamiento aleatorio de la misma cantidad es distinto. X en la i-ésima población tiene una función de probabilidad fi (x) = pxi (1 − pi )1−x con x = 0, 1. Tenı́amos unas probabilidades a priori de que X estuviera siendo observada en la población i-ésima que denotamos por π(i) donde π(1) + π(2) = 1 y π(1), π(2) ≥ 0. Las probabilidades a posteriori obtenidas por la aplicación del teorema de Bayes vienen dadas por fi (x)π(i) . π(i | x) = f1 (x)π(1) + f2 (x)π(2) 2 Si A es el suceso de interés entonces X(ω) = 1 si ω ∈ A y cero en otro caso. A veces se denota como X(ω) = 1A (ω). 86 Finalmente nos hemos quedado con la población i tal que tenı́a un valor de π(i | x) mayor, aquella que, una vez observado el valor de X = x, hacı́a más probable la población. 5.2. Dos poblaciones normales Supongamos ahora que tenemos que decidir entre dos poblaciones basándonos en un valor aleatorio continuo con distribución normal. En concreto supondremos que en la primera población X es normal con media µ1 y varianza σ 2 . En la segunda población X tiene distribución normal con media µ2 y varianza σ 2 . Gráficamente en la figura ?? aparece la situación con la que nos encontramos. Supongamos conocidos los valores de las media y la varianza común. Observamos un valor de la variable X = x: ¿cuál de las dos distribuciones lo ha generado? De otro modo: ¿a qué población pertenece este valor generado? La idea para clasificar este valor generado es la misma de antes. Ahora tendremos 1 1 exp − 2 (x − µi )2 , fi (x) = f (x | µi , σ 2 ) = √ 2σ 2πσ aunque fi (x) no es la probabilidad del valor x asumiendo que estamos en la población i. No obstante, fi (x)dx sı́ que tiene este sentido. Hablando en un sentido amplio tenemos una interpretación similar. La observación x la clasificarı́amos en la población 1 si π(1)f (x | µ1 , σ 2 ) > 1, π(2)f (x | µ2 , σ 2 ) Fácilmente comprobamos que esto equivale con que 1 1 π(2) (µ − µ ) x − (µ + µ ) > log . 1 2 1 2 σ2 2 π(1) 5.3. Dos normales multivariantes En la sección 5.2 nos planteábamos la situación de dos normales univariantes. En las aplicaciones es más habitual el caso en que trabajamos con varias caracterı́sticas simultáneamente. En particular, vamos a asumir ahora que X puede pertenecer a una de dos poblaciones normales multivariantes. La primera con vector de medias µ1 y matriz de covarianzas Σ y la segunda con vector de medias µ2 y matriz de covarianzas Σ. Dada una observación multivariante x, la clasificaremos en la población 1 si π(1)f (x | µ1 , Σ) > 1, π(2)f (x | µ2 , Σ) pero, f (x | µ1 , Σ) = f (x | µ2 , Σ) 1 1 exp − (x − µ1 )0 Σ−1 (x − µ1 ) + (x − µ2 )0 Σ−1 (x − µ2 ) = 2 2 1 exp (µ1 − µ2 )0 Σ−1 x − (µ1 − µ2 )0 Σ−1 (µ1 + µ2 ) . (5.1) 2 Sea λ = Σ−1 (µ1 − µ2 ), entonces la observación es asignada a la primera población si 1 π(2) 0 D(x) = λ x − (µ1 + µ2 ) > log . (5.2) 2 π(1) 87 π(2) Notemos que la ecuación D(x) = log π(1) nos define un hiperplano que separa las dos poblaciones. ¿Qué ocurre si no asumimos que tenemos una misma matriz de covarianzas? En este caso se tiene que: f (x | µ1 , Σ1 ) = f (x | µ2 , Σ2 ) 1 |Σ2 | 1 1 0 −1 log − (x − µ1 )0 Σ−1 1 (x − µ1 ) + (x − µ2 ) Σ2 (x − µ2 ) = 2 |Σ1 | 2 2 |Σ2 | 1 0 −1 1 −1 −1 0 log − x (Σ1 − Σ−1 )x − 2x (Σ µ − Σ µ ) 1 2 . (5.3) 2 1 2 2 |Σ1 | 2 Q(x) = log Como en el caso anterior asignamos la observación x a la primera población si Q(x) > log Notemos que ahora Q(x) = log superficie no plana. 5.4. π(2) π(1) π(2) . π(1) no es un hiperplano sino que tenemos una Dos poblaciones normales multivariantes con parámetros desconocidos Lo visto en las secciones anteriores tenı́a como objeto mostrar de un modo suave la transición desde el resultado probabilı́stico básico, el teorema de Bayes, y su aplicación en el problema de la clasificación. Sin embargo, no es real asumir que conocemos completamente la distribución de las observaciones en cada población o clase. En las aplicaciones los vectores de medias y la matriz o matrices de covarianzas no son conocidas. Hemos de estimarlas a partir de los datos. Veamos primero cómo hacerlo y luego cómo usar estos parámetros en el procedimiento de clasificación. Empezamos por el caso en que tenemos dos poblaciones normales con vectores de medias µ1 y µ2 y matrices de covarianzas Σ1 y Σ2 . Lo que tenemos son dos muestras aleatorias correspondientes a cada una de las poblaciones. Supongamos que tenemos ni individuos de la población i y los vectores de caracterı́sticas son los vectores columna xij ∈ Rd (con i = 1, 2 y j = 1, . . . , ni ). Denotamos Pni P2 Pni j=1 xij i=1 j=1 xij x̄i· = , x̄·· = (5.4) ni n donde n = n1 + n2 . Sea Si la matriz de varianzas o de dispersión de la población i, es decir, Pni 0 j=1 (xij − x̄i· )(xij − x̄i· ) . (5.5) Si = ni − 1 El vector µi es estimado mediante µ̂i = x̄i· . La matriz Σi la estimamos mediante Si . En el caso particular en que asumamos que Σ = Σ1 = Σ2 entonces la matriz de covarianzas común la estimamos con P2 (ni − 1)Si Sp = i=1 . n−2 ¿Cómo clasificamos? Las distribuciones teóricas que suponı́amos conocidas son reemplazadas por las distribuciones normales con los parámetros estimados. 88 Si asumimos una matriz de covarianza común a ambas poblaciones entonces asignamos x a la primera población si Ds (x) > log donde π(2) , π(1) (5.6) 1 Ds (x) = λ̂0 (x − (x̄1· + x̄2· ) 2 (5.7) λ̂ = S−1 p (x̄1· − x̄2· ). (5.8) y La función Ds recibe el nombre de función discriminante lineal. La razón es obvia: clasificamos en uno o en otro grupo utilizando una función lineal de las distintas variables. En el caso particular en que π(1) = π(2), esto es, consideramos a priori igualmente probables ambos grupos entonces la regla de clasificación propuesta serı́a: clasificamos en la población o clase 1 si, λ̂0 x > 1 0 (λ̂ x̄1· + λ̂0 x̄2· ). 2 Es es el procedimiento que propuso R.A. Fisher en 1936. Notemos que las probabilidades de pertenencia a posteriori a cada una de las poblaciones pueden ser estimadas mediante π̂(i|x) = π(i)f (x|x̄i· , Sp ) . π(1)f (x|x̄1· , Sp ) + π(2)f (x|x̄2· , Sp ) (5.9) Una vez tenemos las probabilidades a posteriori estimadas el individuo es clasificado en el grupo que tiene una mayor probabilidad a posteriori. En la situación más general no asumiremos una misma matriz de covarianzas en las dos poblaciones. En este caso estimamos la matriz Σi mediante la matriz Si dada en la ecuación 5.5. Las probabilidades a posteriori las estimamos como π̂(i|x) = π(i)f (x|x̄i· , Si ) . π(1)f (x|x̄1· , S1 ) + π(2)f (x|x̄2· , S2 ) (5.10) Nota de R 24 Vamos a trabajar con los datos de cristales en la orina. Esta nota es un ejemplo de análisis discriminante lineal con dos grupos. Consideramos dos casos. En el primero las probabilidades a priori de cada grupo se asumen iguales entre sı́ y, por lo tanto, iguales a 0,5. En el segundo caso, las probabilidades a priori coinciden con las proporciones observadas dentro de la muestra de cada una de las poblaciones o clases. Leemos los datos. library(foreign) x <- read.spss(file = "../data/cristal.sav", to.data.frame = T) Definimos el valor -1 como dato faltante. x[x == -1] <- NA Eliminamos del estudio todos los casos en los que hay algún dato faltante. cc <- complete.cases(x) attach(x[cc, ]) Suponemos matrices de covarianzas iguales y probabilidades a priori iguales. 89 library(MASS) z <- lda(GRUPO ~ CALCIO + CONDUC + GRAV + OSMO + PH + UREA, prior = c(1, 1)/2) Veamos cómo recuperar los distintos elementos del análisis. attributes(z) ## $names ## [1] "prior" ## [9] "terms" ## ## $class ## [1] "lda" "counts" "means" "xlevels" "scaling" "lev" "svd" "N" "call" Las probabilidades a priori vienen dadas por z$prior ## ## ausencia de cristales presencia de cristales 0.5 0.5 El número de datos por grupo es z$counts ## ## ausencia de cristales presencia de cristales 44 33 El vector de medias estimado en cada grupo lo obtenemos con z$means ## CALCIO CONDUC GRAV OSMO PH UREA ## ausencia de cristales 2.629 20.55 1.015 561.7 6.126 232.4 ## presencia de cristales 6.202 21.38 1.022 682.9 5.927 302.4 Vamos a obtener las probabilidades a posteriori. Observar la opción CV=TRUE. z <- lda(GRUPO ~ CALCIO + CONDUC + GRAV + OSMO + PH + UREA, prior = c(1, 1)/2, CV = TRUE) attributes(z) ## $names ## [1] "class" "posterior" "terms" "call" Obtengamos las probabilidades a posteriori. head(z$posterior) ## ## ## ## ## ## ## 1 2 3 4 5 6 ausencia de cristales presencia de cristales 0.6411 0.35893 0.8700 0.12997 0.8484 0.15162 0.9053 0.09466 0.5762 0.42381 0.8968 0.10321 90 "xlevels" y las clasificaciones para cada los distintos casos. head(z$class) ## [1] ausencia de cristales ausencia de cristales ausencia de cristales ## [4] ausencia de cristales ausencia de cristales ausencia de cristales ## Levels: ausencia de cristales presencia de cristales Las probabilidades a priori corresponden con proporciones observadas. z1 <- lda(GRUPO ~ CALCIO + CONDUC + GRAV + OSMO + PH + UREA, CV = TRUE) Las probabilidades a posteriori son ahora head(z1$posterior) ## ## ## ## ## ## ## 1 2 3 4 5 6 5.5. ausencia de cristales presencia de cristales 0.7043 0.29573 0.8992 0.10075 0.8818 0.11820 0.9273 0.07272 0.6445 0.35553 0.9205 0.07946 Análisis discriminante con más de dos poblaciones normales Supongamos que tenemos unas probabilidades Pga priori π(i) de que el caso pertenezca al grupo i con i = 1, . . . , g (obviamente i=1 π(i) = 1). Si x son las caracterı́sticas de un caso entonces vamos a asumir que x tiene una distribución normal multivariante con media µi y matriz de varianzas Σi en la clase i. Su densidad de probabilidad viene dada por 1 f (x | µi , Σi ) = (2π)−d/2 | Σi |−1/2 exp{− (x − µi )0 Σ−1 i (x − µi )}. 2 (5.11) Utilizando el teorema de Bayes tenemos que las probabilidades a posteriori vienen dadas por π(i)f (x | µi , Σi ) π(i | x) = Pg . (5.12) j=1 π(j)f (x | µj , Σj ) Un método de clasificación consiste en clasificar al individuo con caracterı́sticas x en la clase o grupo tal que la probabilidad a posteriori π(i | x) es máxima o lo que es lo mismo: clasificamos en el grupo tal que π(i)f (x|µi , Σi ) = máx πj f (x|µj , Σj ). j Obviamente, habitualmente no conocemos los parámetros (µi , Σi ) de las distintas clases por lo que hemos de estimarlos. Supongamos que tenemos ni individuos en la clase i y los vectores de caracterı́sticas son los vectores columna xij ∈ Rd (con i = 1, . . . , g y j = 1, . . . , ni ). Denotamos Pni Pg Pni j=1 xij i=1 j=1 xij x̄i· = , x̄·· = (5.13) ni n 91 donde n = decir, Pg i=1 ni . Sea Si la matriz de varianzas o de dispersión de la clase i, es Pni Si = j=1 (xij − x̄i· )(xij − x̄i· )0 ni − 1 . (5.14) El vector µi es estimado mediante µ̂i = x̄i· . En cuanto a la estimación de las matrices Σi se utilizan dos estimadores. En el caso en que asumamos que todas son iguales entonces el estimador de Σ = Σ1 = . . . = Σg es Σ̂ = Sp donde Pg (ni − 1)Si Sp = i=1 . n−g Si no asumimos que las distintas matrices de varianzas son iguales entonces cada Σi es estimada mediante Si . Es claro que el procedimiento indicado en la ecuación 5.5 no es aplicable pues no conocemos los parámetros. Veamos como queda el procedimiento en las dos situaciones posibles: asumiendo igualdad de las matrices de covarianzas y asumiendo que son distintas. Bajo la hipótesis de matriz de covarianza común tendremos que 1 log[π(i)f (x|x̄i· , Sp )] = log π(i) + c − (x − x̄i· )0 S−1 p (x − x̄i· ). 2 Le quitamos a log[π(i)f (x|x̄i· , Sp )] la parte que no depende de i dada por c− 21 x0 S−1 p x y obtenemos la función 1 Li (x) = log π(i) + x̄0i· S−1 p (x − x̄i· ). 2 Asignamos x al grupo que tiene un valor mayor de la función Li (x). Estas funciones reciben el nombre de funciones discriminantes. Observemos que las diferencias entre distintas funciones Li son hiperplanos y por ello se habla de análisis discriminante lineal. En el caso en que no se asume una matriz de varianzas común entonces la regla de clasificación consiste en clasificar donde es máxima la siguiente función Qi (x) = 2 log π(i) − log |Si | − (x − x̄i· )0 Si−1 (x − x̄i· ). (5.15) Notemos que el último término no es más que la distancia de Mahalanobis de x al centro estimado de la clase, x̄i· . La diferencia entre las funciones Qi para dos clases distintas es una función cuadrática y por ello el método recibe el nombre de análisis discriminante cuadrático. 5.6. Valoración del procedimiento de clasificación Nuestros datos son (xi , yi ) con i = 1, . . . , n siendo xi el vector de caracterı́stica del individuo y denotando yi la clase población o grupo al que pertenece realmente el individuo. Tenemos unas probabilidades a posteriori π̂(j|x) para cada x que nos queramos plantearla. Clasificamos x en la clase j tal que tiene máxima probabilidad de las posibles. Pero el método ası́ construido, ¿va bien o es un desastre? Parece que todos coincidimos en que ir bien quiere decir clasificar a los individuos en los grupos a los que realmente pertenecen. Una primera práctica que pretende valorar la probabilidad (y por lo tanto la frecuencia de veces que ocurre) de una clasificación correcta es, una vez estimadas las probabilidades a posteriori para los propios elementos de la muestra. Esto es, nos planteamos clasificar a los individuos utilizados para construir el procedimiento 92 de clasificación. Tendremos para cada data, yi , el grupo al que pertenece e yi∗ el grupo en el que lo clasificamos. Podemos considerar una valoración del resultado de la clasificación la siguiente cantidad, I= n X δyi ,y∗ i i=1 n , (5.16) donde δy,y∗ = 1 si y = y ∗ y cero en otro caso. La cantidad definida en 5.16 es de uso habitual en la literatura de reconocimiento de patrones. Es, sin duda, un modo razonable de valorar la calidad del procedimiento de clasificación. Se queda pobre. Al menos parece insuficiente. ¿Cómo nos equivocamos cuando clasificamos? La siguiente opción habitual es utilizar la tabla de clasificación en donde cruzamos los valores (yi , yi∗ ). En esta tabla tendremos en la fila (r, c) el número de casos que originalmente son de la clase r y los hemos clasificado en el grupo c. Valorando la tabla de clasificación podemos valorar el método de clasificación. Es importante tener en cuenta aquı́ que no todos los errores de clasificación tienen la misma importancia. Independientemente de la valoración numérica que hagamos del procedimiento de clasificación hemos de tener en cuenta sobre qué casos estamos realizando esta valoración. Si un mismo caso lo utilizamos para construir el procedimiento de valoración y lo volvemos a utilizar para clasificarlo estamos sesgando la valoración del procedimiento a favor del mismo. Un procedimiento de clasificación siempre irá mejor con los casos que utilizamos para construirlo y peor sobre otros casos. Hemos de intentar corregirlo. Una primera idea es dejar uno fuera cada vez. Para cada j consideramos toda la muestra menos xj . Utilizando el resto de la muestra estimamos los vectores de medias y las matrices de covarianzas y, finalmente, las probabilidades a posteriori del individuo j en cada clase. Lo clasificamos del modo habitual. Repetimos el procedimiento para cada j y construimos la tabla correspondiente. En inglés es la técnica conocida como leaving one out. Realmente el método de clasificación que valoramos en cada ocasión no es exactamente el mismo pero no es muy diferente. En cada ocasión solamente estamos prescindiendo de un caso y los vectores de medias y matrices de covarianzas no se modifican mucho. Estamos valorando esencialmente el mismo método. Una segunda opción; mejor en su validez peor en sus necesidades. Si tenemos una muestra de tamaño n elegimos una muestra sin reemplazamiento de tamaño m. Los m datos seleccionados son utilizadas para estimar las probabilidades a posteriori y los n − m restantes son clasificados y podemos valorar las distintas proporciones de error. Es una estimación del error basada en un método de aleatorización. Si elegimos las sucesivas muestras con reemplazamiento tendrı́amos un método bootstrap. Nota de R 25 (Los datos iris de Fisher) Consideremos los datos iris tratados originalmente por Fisher. Vemos cómo se utiliza una muestra para estimar las matrices de covarianzas y los vectores de medias mientras que clasificamos a los individuos no utilizados en la estimación de los parámetros. Se utilizan los datos iris de Fisher. library(MASS) data(iris3) Iris <- data.frame(rbind(iris3[, , 1], iris3[, , 2], iris3[, , 3]), Sp = rep(c("s", "c", "v"), rep(50, 3))) Tomamos una muestra y con esta muestra estimamos los vectores de medias y la matriz de covarianzas. 93 train <- sample(1:150, 75) table(Iris$Sp[train]) z <- lda(Sp ~ ., Iris, prior = c(1, 1, 1)/3, subset = train) Con los estimadores podemos ahora clasificar los demás datos de la muestra. predict(z, Iris[-train, ])$class ## [1] s s s s s s s s s s s s s s s s s s s s s s s s s s c c c c c c c c c c c c c c c v c ## [44] c c c c c c v v v v v v v v v v v v v v v v v v c v v v v v v v ## Levels: c s v Nota de R 26 Seguimos con los datos de la orina. Notemos que consideramos probabilidades a priori correspondientes a las proporciones en la muestra. Nos limitamos a construir la tabla de clasificación. Suponemos matrices de covarianzas iguales y probabilidades a priori dadas por las proporciones de cada clase en la muestra. library(foreign) x <- read.spss(file = "../data/cristal.sav", to.data.frame = T) x[x == -1] <- NA cc <- complete.cases(x) x <- x[cc, ] attach(x) Realizamos un análisis discriminante lineal. z1 <- lda(GRUPO ~ CALCIO + CONDUC + GRAV + OSMO + PH + UREA, CV = TRUE) Construimos la tabla de clasificaciones. table(GRUPO, z1$class) ## ## GRUPO ausencia de cristales presencia de cristales ## ausencia de cristales 42 2 ## presencia de cristales 14 19 Nota de R 27 (Correo basura) Consideramos unos datos de correo electrónico. El objetivo del análisis es decidir si el correo es basura o no basándonos en información de dicho correo. Estos datos se pueden encontrar en D.J. Newman and Merz [1998]. Los datos los podemos encontrar en http: // mlearn. ics. uci. edu/ databases/ spambase/ y en particular la descripción de estos datos la tenemos en http: // mlearn. ics. uci. edu/ databases/ spambase/ spambase. DOCUMENTATION . Realizamos un análisis discriminante linear y un análisis cuadrático. Vemos que el lineal nos proporciona mejores resultados. library(MASS) x <- read.table(file = "../data/spambase_data", sep = ",") attach(x) xnam <- paste("V", 1:57, sep = "") (fmla <- as.formula(paste("y ~ ", paste(xnam, collapse = "+")))) y <- x[, 58] 94 Realizamos el análisis discriminante lineal. z <- lda(fmla, data = x, prior = c(1, 1)/2, CV = T) La tabla de clasificación es la siguiente. table(V58, z$class) ## ## V58 0 1 ## 0 2625 163 ## 1 265 1548 Realizamos el análisis discriminante cuadrático y obtenemos la nueva tabla de clasificación. z <- qda(fmla, data = x, prior = c(1, 1)/2, CV = T) table(V58, z$class) ## ## V58 0 1 ## 0 2086 695 ## 1 86 1723 Vamos a realizar una valoración de los resultados de clasificación con el análisis discriminante lineal utilizando remuestreo. Elegimos la muestra de entrenamiento como una selección aleatoria de los datos. entrenamiento <- sample(nrow(x), 2000) Vemos la distribución del correo en la muestra de entrenamiento. table(y[entrenamiento]) ## ## 0 ## 1207 1 793 Realizamos el análisis discriminante lineal. z <- lda(fmla, data = x, prior = c(1, 1)/2, subset = entrenamiento) Vemos la tabla de clasificación sobre los datos de entrenamiento. table(predict(z, x[entrenamiento, ])$class, y[entrenamiento]) ## ## ## ## 0 0 1149 1 58 1 108 685 Vemos la tabla de clasificación sobre el resto de los datos. 95 table(predict(z, x[-entrenamiento, ])$class, y[-entrenamiento]) ## ## ## ## 0 0 1486 1 95 1 162 858 Repetimos en muestras con reemplazamiento. entrenamiento <- sample(nrow(x), 2000, replace = T) table(y[entrenamiento]) ## ## 0 ## 1220 1 780 z <- lda(fmla, data = x, prior = c(1, 1)/2, subset = entrenamiento) Vemos la tabla de clasificación sobre los datos de entrenamiento. table(predict(z, x[entrenamiento, ])$class, y[entrenamiento]) ## ## ## ## 0 0 1155 1 65 1 112 668 Vemos la tabla de clasificación sobre el resto de los datos. table(predict(z, x[-entrenamiento, ])$class, y[-entrenamiento]) ## ## ## ## 5.7. 0 0 1687 1 101 1 190 978 Variables discriminantes canónicas o discriminantes lineales Vamos a estudiar una técnica de reducción de la dimensión relacionada con el planteamiento que del análisis discriminante lineal hizo Fisher. Consideramos las matrices W y B definidas como g X g ni X X 0 W = (xij − xi· )(xij − x̄i· ) = (ni − 1)Si , i=1 j=1 (5.17) i=1 y B= g X g ni X X (x̄i· − x̄·· )(x̄i· − x̄·· )0 = ni (x̄i· − x̄·· )(x̄i· − x̄·· )0 i=1 j=1 (5.18) i=1 Notemos que Sp = W n−g 96 (5.19) Estas matrices reciben el nombre de matrices intra grupos y entre grupos respectivamente. Son las versiones matriciales de las sumas de cuadrados intra y entre grupos habituales en análisis de la varianza. Es claro que cuando más agrupados estén los datos dentro de los grupos y más separados estén para grupos distintos tendremos que la magnitud de W ha de ser menor que la de B. Supongamos que reducimos las observaciones multivariantes xij a datos univariantes mediante tomando zij = c0 xij . Las sumas de cuadrados intra y entre vendrı́an dadas por c0 W c y c0 Bc. El cociente Fc = c0 Bc/c0 W c nos compara la variabilidad intra con la variabilidad entre. Fisher (1936) introdujo el análisis discriminante lineal buscando el vector c tal que el cociente Fc sea el mayor posible. Ese fue su objetivo inicial. La matriz W es suma de matrices semidefinidas positivas por lo que es definida positiva y consideramos su descomposición de Cholesky dada por W = T 0 T . Tomamos b = T c. Se tiene Fc = b0 (T 0 )−1 BT −1 b b0 Ab c0 Bc = = 0 = a0 Aa, 0 0 c Wc bb bb (5.20) donde a = b/ k b k, esto es, a tiene módulo unitario y A = (T 0 )−1 BT −1 . Se nos plantea el problema de maximizar a0 Aa con la restriccion de k a0 a k= 1. Por resultados estándar del álgebra lineal se tiene que a1 es el vector propio de A con el mayor propio λ1 verificando que λ1 = a01 Aai . Hemos encontrado una combinación lineal que, en el sentido que hemos indicado, es óptima a la hora de separar los grupos. Parece lógico buscar la siguiente combinación lineal que verifique el mismo criterio de optimalidad pero que el vector correspondiente sea ortogonal al ya calculado. Nos planteamos pues maximizar a0 Aa con la restriccion de k a k= 1 y que sea ortogonal con el anterior. La solución viene dada por el vector propio de A asociado a su segundo valor propio por orden de magnitud, λ2 (Aa2 = λ2 a2 por lo que λ2 = a02 Aa2 ). Procedemos del mismo modo obteniendo k direcciones ortogonales que nos dan las combinaciones óptimas que separan a los grupos. El valor de k es el mı́nimo entre el número de grupos menos uno, g − 1 y el número de datos n, k = mı́n g − 1, n. Notemos que los sucesivos ar constituyen una base ortonormal tales que (T 0 )−1 BT −1 ar = Aar = λr ar , con λ1 ≥ λ2 ≥ . . . ≥ λk . Si multiplicamos por la izquierda por la matriz T −1 (n − g)1/2 se deduce que W −1 Bcr = λr cr , donde cr = (n − g)1/2 T −1 ar . En consecuencia W −1 B tiene valores propios λr y vectores propios cr con r = 1, . . . , k. Además los vectores ar = T cr (n − g)−1/2 constituyen una base ortonormal. Consideremos la matriz C que tiene por fila résima el vector cr . Sea zij = Cxij . Estos valores reciben el nombre de coordenadas discriminantes. Vemos que estas coordenadas pretenden destacar las diferencias entre los grupos con un orden decreciente de relevancia. Tenemos que decidir cón cuantas de ellas nos quedamos. Es habitual estudiar los cocientes Pj i=1 λi (5.21) Pk i=1 λi como función de j y quedarse con las coordenadas discriminantes hasta un j próximo a uno. Es muy importante darse cuenta que las coordenadas discriminantes están tipificadas y son independientes entre ellas. Recordemos que W = T 0 T y que la matriz de covarianzas agrupada viene dada por Sp = W/(g − 1). Por tanto tendremos que c0r Sp cs = (n − g)−1 c0r T 0 T cs = a0r as = δrs , 97 (5.22) donde δrs = 1 si r = s y cero en otro caso. Tenemos pues que CSp C 0 = Ik . Asumiendo que las matrices de dispersión son iguales para los distintos grupos tendremos que cov(c0r xij , c0s xij ) = c0r Σcs y reemplazando Σ por Sp tenemos que los zij tienen covarianzas muestrales nulas y varianzas muestrales unitarias. Nota de R 28 (Variables discriminantes canónicas) Repetimos el análisis discriminante tanto para los datos de cristales en la orina como para los datos de la diabetes. En la siguietne figura vemos un histograma de la primera variable discriminante canónica en el primer y segundo grupo. 0.0 0.4 0.8 plot(z) −2 −1 0 1 2 3 4 3 4 0.0 0.4 0.8 group ausencia de cristales −2 −1 0 1 2 group presencia de cristales Para los datos de las diabetes podemos tendremos dos variables discriminantes canónicas. Mostramos dos posibles representaciones gráficas. plot(z) 98 4 diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta 2 diabetes manifiesta diabetes manifiesta control control diabetes manifiesta 0 control control control control diabetes control control control diabetesmanifiesta manifiesta control control control control control control control control control diabetes manifiesta manifiesta controlcontrol diabetes manifiestadiabetes control control control diabetes manifiesta control control control control control control control control control control control control control control control control control control diabetes manifiesta control diabetes quimica control control control control diabetes manifiesta diabetes quimica diabetes manifiesta control diabetes manifiesta control control control control control control control diabetes quimica control control diabetes manifiesta diabetes manifiesta control control diabetes manifiesta control control diabetes quimicaquimicacontrol control control control diabetes diabetes manifiesta diabetes manifiesta control diabetes quimica control diabetes quimica diabetes quimica control controlcontrol control diabetesquimica quimica diabetes diabetes control diabetesmanifiesta manifiesta diabetes quimica diabetes quimica diabetes manifiesta diabetes manifiesta diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes manifiesta control control diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes manifiesta diabetes quimica manifiesta diabetes manifiesta diabetes diabetes quimica diabetes quimica −2 LD2 diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes quimica control diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica −4 diabetes quimica −6 −4 −2 0 LD1 pairs(z) 99 2 −2 0 2 4 −4 0 2 control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control control diabetes quimica control control control diabetes quimica control diabetes quimica diabetes quimica control diabetes quimica diabetes quimica control diabetes quimica diabetes quimica manifiesta control diabetes diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes manifiesta diabetes quimica diabetes manifiesta diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes manifiesta diabetes quimica diabetes manifiesta diabetes quimica diabetes quimica manifiesta diabetesdiabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta manifiesta diabetes diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta manifiesta diabetesdiabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta −2 0 2 diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta diabetes manifiesta control control diabetes manifiesta diabetes manifiesta control diabetes manifiesta control control control control diabetes control control diabetesmanifiesta manifiesta control diabetes manifiesta control control control control control control control diabetes manifiesta diabetes manifiesta control control diabetes manifiesta control control diabetes manifiesta control control control control control control control control control control control control control control control control control control diabetes manifiesta control diabetes quimica control control control control diabetes manifiesta diabetes quimica diabetes manifiesta control diabetes manifiesta control control control control control control control diabetes quimica control control diabetes diabetesmanifiesta manifiesta control control diabetes manifiesta control control control diabetes quimica control control diabetes quimica diabetes manifiesta diabetes manifiesta control diabetes quimica diabetes quimica control diabetes quimica control control control control diabetes quimica diabetes manifiesta diabetes quimica control diabetes manifiesta diabetes quimica diabetes quimica diabetes manifiesta diabetes manifiesta diabetes quimica diabetes quimica diabetes quimica diabetes quimica quimica diabetes quimica diabetes quimica diabetes manifiesta diabetes control control diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes quimica diabetes manifiesta diabetes quimica diabetes manifiesta diabetes manifiesta diabetes diabetes quimica quimica −6 −4 −2 LD1 diabetes quimicacontrol diabetes quimica diabetes quimica diabetes quimica diabetes quimica −4 diabetes quimica diabetes quimica diabetes quimica −6 5.8. LD2 −4 −2 0 2 4 Algunos ejemplos Nota de R 29 En la sección ?? tenemos una descripción de los mismos. Realizamos un análisis discriminante en donde a partir de las caracterı́sticas morfológicas pretendemos saber si es una abeja reina o bien es una obrera. library(MASS) x <- read.table(file = "../data/wasp.dat", header = T) attach(x) Aplicamos un análisis discriminante lineal y mostramos los histogramas de la variable discriminante canónica. z <- lda(caste ~ TL + WL + HH + HW + TH + TW + G1L + G2Wa, prior = c(1, 1)/2) plot(z) 100 0.4 0.2 0.0 −4 −2 0 2 4 2 4 0.0 0.2 0.4 group Q −4 −2 0 group W Los histogramas muestran que los valores de la variable discriminante son claramente distintos en cada grupo. La tabla de clasificación es la siguiente. z <- lda(caste ~ TL + WL + HH + HW + TH + TW + G1L + G2Wa, prior = c(1, 1)/2, CV = TRUE) table(caste, z$class) ## ## caste Q W ## Q 49 1 ## W 1 49 Mostrando que los resultados de la clasificación son realmente buenos. Nota de R 30 (Datos wbca) En la sección ?? tenemos la descripción de los datos. Básicamente tenemos personas enfermas de cáncer y no enfermos y pretendemos clasificar en estos dos posibles grupos. Pretendemos clasificar a la paciente como enferma o no de cáncer utilizando el resto de las variables. library(faraway) library(MASS) attach(wbca) Realizamos para ello un análisis discriminante lineal y, como tenemos solamente dos grupos, mostramos los histogramas de la variable discriminante canónica en cada uno de los grupos. 101 wbca.lda <- lda(Class ~ Adhes + BNucl + Chrom + Epith + Mitos + NNucl + Thick + UShap + USize CV = T) table(Class, wbca.lda$class) ## ## Class 0 1 ## 0 219 19 ## 1 7 436 Tenemos una muestra bastante grande. Elegimos una muestra de entrenamiento para estimar las probabilidades a posteriori. Para ellos elegimos al azar 400 mujeres de la muestra inicial. Mostramos la tabla de clasificación. train <- sample(1:nrow(wbca), 400) wbca.lda0 <- lda(Class ~ Adhes + BNucl + Chrom + Epith + Mitos + NNucl + Thick + UShap + USiz subset = train, CV = T) table(wbca.lda0$class[train], Class[train]) ## ## ## ## 0 1 0 36 53 1 65 91 102 Capı́tulo 6 Regresión El problema que se trata en este tema es básico. Estudiar relaciones entre una variable que llamaremos variable respuesta y una (o más de una) variable que llamaremos variables predictoras. También se utilizan las denominaciones de variable dependiente para la variable respuesta y variables independientes en lugar en predictoras. Si denotamos a la variable respuesta por Y (al valor observado lo denotaremos por y) y a la variable predictora por X nuestro problema es intentar conocer el valor de Y cuando conocemos el valor de la variable X. Nota de R 31 (notaR100) El primer conjunto de datos fueron publicados por Fisher[Fisher, 1947]. El fichero contiene tres variables correspondientes al peso del corazón, el peso del cuerpo y el sexo de una muestra de gatos. Tenemos 47 hembras y de 97 machos. library(MASS) attach(cats) names(cats) Empezamos representando el peso del corazón frente al peso del cuerpo para las hembras. plot(Bwt[Sex == "F"], Hwt[Sex == "F"]) 103 13 12 ● 11 ● ● ● ● ● 10 ● ● ● ● 9 ● ● ● ● ● ● 8 Hwt[Sex == "F"] ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 7 ● ● ● ● ● ● ● 2.0 2.2 2.4 2.6 Bwt[Sex == "F"] Repetimos el dibujo para los machos. plot(Bwt[Sex == "M"], Hwt[Sex == "M"]) 104 2.8 3.0 18 20 ● ● ● ● ● ● ● ● 14 ● ● ● ● ● ● ● ● 10 ● ● ● ● ● ● ● ● ● ● ● ● 8 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 12 Hwt[Sex == "M"] 16 ● ● ● ● ● ● ● ● ● ● ● ● 6 ● 2.0 2.5 3.0 3.5 Bwt[Sex == "M"] Nuestro problema es intentar predecir el peso del corazón a partir del peso del cuerpo. Además parece razonable plantearse si esta relación es similar para machos y hembras. Nota de R 32 Tenemos velocidades y tiempos de parada de una serie de vehı́culos. require(stats) En abscisas consideramos las velocidades y en ordenadas los tiempos de parada. plot(cars, xlab = "Speed (mph)", ylab = "Stopping distance (ft)", las = 1) 105 120 ● 100 ● ● ● Stopping distance (ft) ● 80 ● ● ● ● ● 60 ● ● ● ● ● ● ● ● 40 ● ● ● ● ● ● ● ● ● ● 20 0 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 5 10 15 20 25 Speed (mph) La pregunta es si podemos predecir de algún modo el tiempo de parada a partir de la velocidad del vehı́culo. En este tema utilizamos de un modo importante el paquete faraway [?]. 6.1. Regresión lineal simple En todos los ejemplos antes comentados el problema común es determinar el valor de Y a partir del valor de X. Obviamente la respuesta más simple serı́a buscar una función que podemos denotar por f de modo que para un valor dado x simplemente calculamos y = f (x). Un poco de imaginación y conocimiento de la posible relación entre x e y podrı́an darnos una idea de qué función f buscar. Este planteamiento es de base muy restrictivo. ¿Por qué? Pues en primer lugar porque estamos asumiendo que, para un valor de x, existe un único valor de y asociado. Y esto nunca (o casi) es ası́. Un detalle, a veces X es una variable aleatoria que observamos simultáneamente con Y , en otras ocasiones es un valor que nosotros prefijamos (dosis de medicación, tratamiento en un problema de diseño de experimentos). Sin embargo, desde el punto de vista de la regresión X siempre lo consideramos fijo y estudiamos cómo se comporta Y dado el valor de X = x. Es decir, de la distribución condicionada de Y al valor de X = x. Un ejemplo muy famoso de Galton. Se tomaba como variable predictora la estatura del padre y como variable respuesta o a predecir, la estatura de un hijo. Es claro que para un mismo padre la estatura de sus hijos es variable. No todos 106 los hijos de un mismo padre miden lo mismo. No tiene ningún sentido asumir una relación funcional entre la estatura de un padre y la de un hijo. Tan tontos no son los estadı́sticos (que no estadistas). De hecho, lo que se modeliza es la relación entre el valor x y el valor medio de la variable Y dado ese valor x. Siguiendo con el ejemplo de Galton. Si consideramos un padre de estatura X = 178 centı́metros. Supondremos que la media de la variable Y que nos da la estatura aleatoria de un hijo es la que se relaciona con x. Denotemos por E[Y | x] esta media (estatura media de todos los hijos de un padre con estatura 178 centı́metros). Hemos de admitir que además de lo que mide el padre, algo tendrá que decir la madre, y también otros muchos factores que todos podemos imaginar. De modo que Y , conocida la estatura del padre, sigue siendo una cantidad aleatoria. De hecho, se asume que la distribución de Y es normal cuya media depende de Y , E[Y | x], pero cuya varianza no depende de x, es decir, es una cantidad constante que denotaremos por σ 2 . En resumen, estamos asumiendo que Y ∼ N (E[Y | x], σ 2 ). (6.1) En el modelo de regresión más simple con el que se trabaja se asume que la media condicionada E[Y | x] es una función lineal de x, en otras palabras, se asume que E[Y | x] = β0 + β1 x. (6.2) Las hipótesis asumidas en 6.1 y 6.2, podemos expresarlas conjuntamente diciendo que la variable respuesta Y se puede expresar como Y = β0 + β1 x + , (6.3) ∼ N (0, σ 2 ). (6.4) donde En la formulación de 6.3 expresamos el valor aleatorio de Y como suma de una parte que sistemáticamente depende de x (la componente sistemática del modelo) y un término aleatorio con distribución normal, un término de error o desajuste del modelo. En esta variable normal con media cero y varianza constante σ 2 estamos incluyendo todas las posibles causas que influyen el valor de Y y que no vienen dadas por la variable predictora. No consideramos un solo valor aleatorio de Y dado un valor fijo de x. Realmente, tenemos n valores observados cuyos valores son independientes entre sı́ pero no tienen la misma distribución. Hemos de pensar que cad a Yi tiene una variable predictora distinta que influye en la distribución de Yi . Tenemos pares (xi , Yi ) donde la xi viene dada y consideramos la distribución de Yi condicionada a xi , es decir, Yi | xi . Resumiendo, estamos asumiendo que Yi ∼ N (β0 +β1 xi , σ 2 ) y que los distintos Yi son independientes entre si. Utilizando propiedades de la distribución normal multivariante tenemos que estas hipótesis las podemos expresar conjuntamente diciendo que Y ∼ Nn (Xβ, σ 2 In×n ), (6.5) donde Y1 Y = ... Yn 1 .. X = . 1 x1 .. . xn Si consideramos que 1 .. =. n 107 β β= 0 β1 donde los i ∼ N (0, σ 2 ) e independientes entre si. Entonces el modelo dado en 6.5 lo podemos reescribir como Y = Xβ + , (6.6) con ∼ Nn (0, σ 2 In×n ). Este modelo probabilı́stico es conocido como el modelo de regresión lineal simple. No lo estudiaremos en más detalle porque nos vamos a ocupar de la situación más general en que tenemos más de una variable predictora. No es más que un caso particular y sin mucha dificultad adicional se puede estudiar el situación general de regresión lineal múltiple. 6.2. Regresión lineal múltiple Pretendemos determinar la relación que liga a una variable respuesta Y como función de p − 1 variables predictoras, x1 , . . . , xp−1 . Siguiendo el razonamiento anterior podemos plantearnos un modelo muy general como el que sigue. Y = f (x1 , . . . , xn ) + , (6.7) donde f es una función desconocida y es el término del error. Vamos a asumir una situación más simple. En concreto que la función f es lineal de modo que la relación serı́a Y = β0 + β1 x1 + . . . + βp−1 xp−1 . Realmente observamos n vectores (yi , xi1 , . . . , xi,p−1 ) en consecuencia nuestro modelo estocástico ha de considerar el modelo para los n valores aleatorios Yi , donde cada Yi tiene asociado un vector xi . Vamos a suponer que para una combinación de valores (xi1 , . . . , xi,p−1 ) vamos a observar un valor aleatorio Yi con distribución normal cuya media es β0 + β1 xi1 + . . .+βp−1 xi,p−1 y cuya varianza va a ser constante e igual a σ 2 . Además los distintos Yi son independientes entre si. Vamos a formular conjuntamente estas hipótesis. Denotaremos β0 1 x11 . . . x1,p−1 1 Y1 β1 .. .. . . . .. .. Y = . X = . β = .. = .. . 1 xn1 . . . xn,p−1 n Yn βp−1 El modelo estocástico básico es el que sigue Y = Xβ + . (6.8) En este modelo a Xβ le llamaremos la parte sistemática mientras que es la componente aleatoria del modelo. Estamos expresando los datos como la suma de una parte sistemática más una parte aleatoria. La parte sistemática es la media del vector Y . Notemos que la dimensión del espacio en que estamos trabajando es n, el número de observaciones. El vector de medias o parte sistemática del modelo tiene dimensión p por lo que la parte no explicada, el residuo, tiene dimensión n − p. 6.3. Estimación de β ¿Cómo estimamos los parámetros β? Nuestros datos son (yi , xi1 , . . . , xi,p−1 ) con i = 1, . . . , n. Nuestro objetivo es estimar los coeficientes β de modo que Xβ esté próximo a y. En concreto vamos a minimizar n X 2i = 0 = (y − Xβ)0 (y − Xβ). i=1 108 (6.9) y Residuo Espacio engendrado por X Valor ajustado Figura 6.1: Expresamos la observación y como suma ortogonal de una parte sistemática más un residuo. Si desarrollamos la expresión anterior tendremos que (y − Xβ)0 (y − Xβ) = y 0 y − 2β 0 X 0 y + +β 0 X 0 Xβ. Diferenciando respecto de los distintos βj e igualando a cero nos da el siguiente sistema de ecuaciones normales: X 0 X β̂ = X 0 y. (6.10) Si asumimos que la matriz X 0 X es una matriz no singular entonces tendremos que β̂ = (X 0 X)−1 X 0 y, (6.11) X β̂ = X(X 0 X)−1 X 0 y = Hy. (6.12) y en consecuencia se sigue que La matriz H = X(X 0 X)−1 X 0 y = Hy es la matriz de proyección de y sobre el espacio engendrado por los p vectores columna de la matriz X. Es una matriz n × n. Utilizando la matriz H podemos calcular las predicciones para cada una de los xi originales. Vienen dadas por ŷ = Hy = X β̂. (6.13) También tenemos los residuos, esto es, las diferencias entre los valores observados originalmente y las predicciones que de ellos hacemos. Los residuos en términos de la matriz H vienen dados por ˆ = y − Hy = (I − H)y. (6.14) Finalmente, hemos determinado los coeficientes que nos minimizaban la suma de cuadrados. El valor mı́nimo que hemos obtenido que recibe el nombre de suma de cuadrados residual o suma de cuadrados del error que viene dada por SS(Error) = n X (yi − ŷi )2 , (6.15) i=1 y serı́a, como función de la matriz H, ˆ0 ˆ = y 0 (I − H)(I − H)y = y 0 (I − H)y. 109 (6.16) Veamos una interpretación geométrica que nos ayude a entender qué son los estimadores mı́nimo cuadráticos que utilizamos. Estamos minimizando (y −Xβ)0 (y −Xβ). Si vemos la figura 6.1 el valor de β que nos da el mı́nimo coincide con el punto que nos da la proyección ortogonal de y sobre el plano que viene engendrado por las columnas de la matriz X. De este modo es claro que (y − ȳ1n )0 (y − ȳ1n ) = (y − X β̂)0 (y − X β̂) + (ŷ − ȳ1n )0 (ŷ − ȳ1n ). (6.17) o de otro modo la ecuación anterior la podemos expresar como n X (yi − ȳ)2 = i=1 n X (yi − yˆi )2 + i=1 n X (yˆi − ȳ)2 . (6.18) i=1 Las sumas de cuadrados que acabamos de considerar reciben la siguiente denominación: Suma de cuadrados total SS(T otal) = (y − ȳ1n )0 (y − ȳ1n ) = n X (yi − ȳ)2 . (6.19) (yi − yˆi )2 . (6.20) i=1 Suma de cuadrados del error SS(Error) = (y − X β̂)0 (y − X β̂) = n X i=1 Suma de cuadrados de la regresión SS(Regresion) = (ŷ − ȳ1n )0 (ŷ − ȳ1n ) = n X (yˆi − ȳ)2 . (6.21) i=1 6.4. Algunos casos particulares Supongamos en primer lugar la situación en que no tenemos ningún predictor. Esto es, nuestro modelo es Y = µ + . En este caso se tiene que la matriz de diseño X = 1n = (1, . . . , 1)0 , X 0 X = n y, finalmente, β̂ = (X 0 X)−1 X 0 y = n1 10n y = ŷ. El segundo ejemplo que podemos considerar serı́a con una sola variable predictora o lo que es lo mismo, el modelo de regresión lineal simple. En este caso, tendremos Y1 1 x1 1 .. .. β0 .. . . . = . . β1 + . Yn 1 xn n Notemos que podemos hacer Yi = β0 + β1 x̄ + β1 (xi − x̄) + i . Nuestra matriz de diseño serı́a 1 .. X = . 1 x1 − x̄ .. . xn − x̄ con n P 0 XX= n 2 0 i=1 (xi − x̄) 0 Finalmente se comprueba sin dificultad que Pn (xi − x̂)yi β̂ = Pi=1 n 2 i=1 (xi − x̂) 110 (6.22) 6.5. Verosimilitud Dados los datos (xi , yi ) con i = 1, . . . , n la verosimilitud de y = (y1 , . . . , yn )0 vendrı́a dada por 1 1 exp{− 2 (y − Xβ)0 (y − Xβ)} n 2σ (2π) 2 σ n (6.23) n 1 log(2π) − n log σ − 2 (y − Xβ)0 (y − Xβ). 2 2σ (6.24) L(β, σ) = y la logverosimilitud serı́a l(β, σ) = El estimador máximo verosı́mil de β se obtiene maximizando cualquiera de las dos funciones anteriores. Es obvio que el máximo respecto de β se obtiene como el valor que minimiza (y − Xβ)0 (y − Xβ), en definitiva, que los estimadores máximo verosı́miles no son más que los estimadores mı́nimo cuadráticos. 6.6. Algunos ejemplos Nota de R 33 (Un ejemplo de regresión lineal simple) En este banco de datos (Orange) tenemos la variable predictora que nos da la edad del árbol y como variable respuesta la circunferencia del árbol. Obtenemos el ajuste de regresión lineal simple con la función lm. La salida básica que produce nos muestra los estimadores mı́nimo cuadráticos de los coeficientes β. Vemos también cómo obtener las predicciones y los residuos observados. Finalmente mostramos los residuos frente a las predicciones de los valores. En principio, bajo la hipótesis de que el error tiene varianza constante no debiéramos de observar residuos mayores cuando las predicciones son mayores. En este caso parece que es esto lo que observamos. Leemos los datos. data(Orange) attach(Orange) Representamos en abscisas la edad y en ordenadas el número de anillos. Ajustamos el modelo de regresión lineal simple y añadimos la recta de regresión a los datos. plot(age, circumference) lm(circumference ~ age, data = Orange) ## ## ## ## ## ## ## Call: lm(formula = circumference ~ age, data = Orange) Coefficients: (Intercept) 17.400 age 0.107 abline(lm(circumference ~ age, data = Orange)) 111 ● 200 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 100 circumference 150 ● ● ● ● ● 50 ● ● ● ● ● ● ● 500 1000 1500 age Vamos a explorar la información que podemos obtener del ajuste. orange.lm <- lm(circumference ~ age, data = Orange) attributes(orange.lm) ## ## ## ## ## ## ## $names [1] "coefficients" [6] "assign" [11] "terms" "residuals" "qr" "model" "effects" "df.residual" "rank" "xlevels" "fitted.values" "call" $class [1] "lm" Los valores ajustados o predicciones los obtenemos con orange.lm$fitted.values ## 1 2 3 4 5 6 7 8 9 10 11 12 ## 30.00 69.08 88.30 124.60 148.83 163.89 186.31 30.00 69.08 88.30 124.60 148.83 ## 13 14 15 16 17 18 19 20 21 22 23 24 ## 163.89 186.31 30.00 69.08 88.30 124.60 148.83 163.89 186.31 30.00 69.08 88.30 ## 25 26 27 28 29 30 31 32 33 34 35 ## 124.60 148.83 163.89 186.31 30.00 69.08 88.30 124.60 148.83 163.89 186.31 Y los residuos observados se obtiene con 112 orange.lm$residuals ## 1 2 3 4 5 6 7 8 ## 0.001451 -11.076488 -1.295146 -9.597057 -28.833920 -21.888536 -41.310304 3.001451 ## 9 10 11 12 13 14 15 16 ## -0.076488 22.704854 31.402943 23.166080 39.111464 16.689696 0.001451 -18.076488 ## 17 18 19 20 21 22 23 24 ## -13.295146 -16.597057 -33.833920 -24.888536 -46.310304 2.001451 -7.076488 23.704854 ## 25 26 27 28 29 30 31 32 ## 42.402943 30.166080 45.111464 27.689696 0.001451 -20.076488 -7.295146 0.402943 ## 33 34 35 ## -6.833920 10.111464 -9.310304 Nota de R 34 (Precio de la vivienda) Vamos a trabajar con un banco de datos relativo a precios de la vivienda. Es un fichero que viene con el paquete SPSS. Tenemos las siguientes variables: VALTERR Valor de tasación del terreno. VALMEJOR Valor de tasación de las mejoras. VALTOT Valor de tasación total. PRECIO Precio de venta. TASA Razón del precio de venta sobre el valor de tasación total. BARRIO Barrio en el que se encuentra la vivienda. Nos planteamos predecir el precio de venta de la vivienda utilizando como variables predictoras el valor de tasación del terreno y de las mejoras. Notemos que el valor total no es más que la suma de la tasación del terreno más el valor de las mejoras. Comenzamos leyendo los datos. Notemos que por estar en formato de SPSS utilizamos el paquete foreign ?. library(foreign) x <- read.spss(file = "../data/venta_casas.sav", to.data.frame = T) attach(x) Nos planteamos predecir el precio de la vivienda utilizando como variables predictoras el precio de terreno y el valor de las mejoras. (casas.lm <- lm(precio ~ valterr + valmejor)) ## ## ## ## ## ## ## Call: lm(formula = precio ~ valterr + valmejor) Coefficients: (Intercept) 767.408 valterr 3.192 valmejor 0.478 113 6.7. Distribución muestral de β̂ Hemos visto que β̂ = (X 0 X)−1 X 0 Y . Aplicando propiedades simples de la media tenemos que E β̂ = (X 0 X)−1 X 0 (EY ) = β, (6.25) o, lo que es lo mismo, que β̂ es un estimador insesgado de β, el estimador tiene por vector de medias el vector de parámetros que estima. Es una buena propiedad. La matriz de covarianzas del error se obtiene fácilmente como var(β̂) = (X 0 X)−1 X 0 (σ 2 I)X(X 0 X)−1 = (X 0 X)−1 σ 2 . (6.26) Esta matriz de covarianzas depende de la varianza desconocida del error σ 2 . Si estimamos esta varianza tendremos un estimador de dicha matriz de covarianzas. Se puede probar que E[SS(Error)] = (n − p)σ 2 (6.27) de donde, un estimador insesgado para la varianza σ 2 viene dado por σ̂ 2 = ˆ0 ˆ . n−p (6.28) Ya podemos estimar var(β̂). Este estimador serı́a vd ar(β̂) = (X 0 X)−1 σ̂ 2 . (6.29) Si (X 0 X)−1 = [aij ]i,j=1,...,p entonces el estimador de la varianza de β̂i , var(β̂i ), serı́a aii σ̂ 2 . Recordemos que β̂i es un estimador insesgado de βi y por lo tanto su varianza coincide con su error cuadrático medio. Finalmente el error estándar de β̂i , es decir, su desviación tı́pica (raı́z cuadrada de su varianza) serı́a d β̂i ) = √aii σ̂. SE( (6.30) Realmente de β̂ sabemos más cosas: β̂ = (X 0 X)−1 X 0 Y y puesto que Y ∼ Nn (Xβ, σ 2 In×n ) entonces, por propiedades básicas de la distribución normal multivariante (ver apartado 1.4) se tiene que β̂ ∼ Np (β, (X 0 X)−1 σ 2 ). (6.31) Nota de R 35 Una vez realizado el ajuste con la función summary podemos observar los valores estimados de σ (etiquetado como Residual standard error y los errores estándar de β̂i . Veamos el resumen básico del ajuste de regresión donde la respuesta es el precio de la vivienda y los predictores son el valor del terreno y el valor de las mejoras. summary(casas.lm) ## ## ## ## ## ## ## ## ## Call: lm(formula = precio ~ valterr + valmejor) Residuals: Min 1Q -153634 -10451 Median -576 3Q 8690 Coefficients: 114 Max 356418 ## ## ## ## ## ## ## ## ## ## Estimate Std. Error t value Pr(>|t|) (Intercept) 7.67e+02 1.29e+03 0.59 0.55 valterr 3.19e+00 5.34e-02 59.78 <2e-16 *** valmejor 4.78e-01 2.55e-02 18.73 <2e-16 *** --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 28100 on 2437 degrees of freedom Multiple R-squared: 0.676,Adjusted R-squared: 0.675 F-statistic: 2.54e+03 on 2 and 2437 DF, p-value: <2e-16 6.8. Bondad de ajuste Hemos supuesto una relación lineal entre la media de la variable respuesta y las variables predictoras. Asumiendo la relación hemos considerado una función objetivo y minimizando dicha función hemos obtenido los estimadores mı́nimo cuadráticos. Sin embargo, la primera pregunta que hay que responder es: ¿tenemos un ajuste razonable? La respuesta se da utilizando medidas que comparan los valores observados con las predicciones asumiendo el modelo, es decir, comparando yi con ŷi para los distintos datos. En concreto, con diferencia la más utilizada es el coeficiente de determinación que se denota por R2 y se define como Pn (yi − ŷi )2 SS(Error) P . =1− R = 1 − ni=1 2 SS(T otal) (y − ȳ ) i i=1 i 2 (6.32) Pn Es habitual denominar a Pi=1 (yi − ŷi )2 , suma de cuadrados del error mientras n que a SS(Regresion) = i=1 (ŷi − ȳ)2 se le llama suma de cuadrados de la regresión. Tenemos pues que Pn (ŷi − ȳ)2 SS(Regresion) R2 = Pni=1 . = 2 SS(T otal) (y − ȳ ) i i=1 i (6.33) El ajuste que estamos realizando se supone que será tanto mejor cuanto más pequeña sea SS(Error). Tampoco serı́a natural que SS(Error) fuera nula pues serı́a tanto como asumir que los distintos valores aleatorios son iguales a su media. Notemos que SS(T otal) es una cuantificación de la variabilidad de los distintos yi sin tener en cuenta las variables predictoras mientras que SS(Error) nos cuantifica la variación residual después de utilizar las variables predictoras. Es de esperar que un mejor ajuste vaya acompañado de un valor de SS(Error) pequeño en relación con SS(T otal). Esa es la idea del coeficiente de determinación. Toma valores entre 0 y 1 y cuanto más cerca de 1 mejor es el ajuste. Tiene un pequeño inconveniente y es que no tiene en cuenta el número de variables predictoras que estamos utilizando para predecir la variable respuesta. Una pequeña modificación de R2 para incorporar esta información es el coeficiente de determinación ajustado que podemos denotar R2 -ajustado y se define como Pn (yi − ŷi )2 /(n − p) , R2 − ajustado = 1 − Pi=1 n 2 i=1 (yi − ȳ) /(n − 1) donde suponemos que tenemos p − 1 variables predictoras. 115 (6.34) 6.9. Valoración de las hipótesis del modelo Un modelo de regresión lineal múltiple supone, como hemos visto, varias hipótesis. Es necesario valorar lo razonables, lo asumibles que son estas hipótesis. Las hipótesis del modelo que vamos a valorar son las siguientes: 1. ¿Tenemos errores independientes, con la misma varianza y con distribución normal? Esto es, nos preguntamos si es asumible la hipótesis ∼ Nn (0, σ 2 In×n ). 2. Asumimos que E[Yi | xi ] = β0 + β1 xi1 + . . . + βp−1 xi,p−1 . Los errores no son directamente observables. Observamos los residuos ˆ = y − ŷ que no es lo mismo. Las propiedades de ambos vectores son distintas. En particular, estamos asumiendo que var() = σ 2 In×n . Sin embargo, esta afirmación no es cierta para los residuos observados ˆ. Notemos que ŷ = X(X 0 X)−1 X 0 y = Hy. De modo que ˆ = y − ŷ = (I − H)y = (I − H)Xβ + (I − H) = (I − H). La tercera igualdad anterior es consecuencia de que HXβ = Xβ porque H es la matriz de proyección sobre el espacio engendrado por las columnas de X y Xβ está en este espacio por lo que la proyección es el propio punto. Notemos que I − H también es una matriz de proyección (sobre el espacio ortogonal al engendrado por las columnas de X) de modo que (I − H)2 = I − H. Aplicando esta propiedad se tiene que var(ˆ ) = var(I − H) = (I − H)σ 2 , (6.35) ya que var() = σ 2 In×n . Vemos pues que, aunque asumimos que los errores son incorrelados y con la misma varianza, esto no es cierto para los residuos ˆ. Homogeneidad de la varianza La mera observación de los residuos sin considerar su posible asociación con otra variable no nos proporciona información sobre si la varianza de los mismos es constante. Hemos de considerarlos en relación con otras variables. Es habitual considerar un diagrama de puntos de los residuos ˆ como función de las predicciones ŷ. Cuando la varianza es constante debemos de observar los residuos dispersos de un modo aleatorio respecto del eje de abscisas. También podemos ver un comportamiento no aleatorio alrededor del eje de abscisas cuando la parte estructural del modelo no es lineal, es decir, cuando no se verifica que EY = Xβ. Nota de R 36 Los datos que vamos a utilizar para valorar las hipótesis del modelo son los datos savings contenido en la librerı́a faraway (?). Se pretende estudiar la relación que liga la fracción de ahorro con la proporción de población menor de 15 años, mayor de 75 y las variables dpi y ddpi. El siguiente diagrama de puntos muestra en abscisas las predicciones y en ordenadas los residuos. No parece en principio que no podamos asumir una varianza constante. Vemos también que nos indica los tres paı́ses con los residuos más extremos: Chile, Filipinas y Zambia. library(faraway) data(savings) attach(savings) Hacemos el ajuste lineal. 116 savings.lm <- lm(sr ~ pop15 + pop75 + dpi + ddpi, savings) Notemos que elegimos el primer dibujo. plot(savings.lm, which = 1) 10 Residuals vs Fitted Zambia ● 5 ● ●Philippines ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0 Residuals ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● −5 ● ● ● ● −10 Chile ● 6 8 10 12 14 16 Fitted values lm(sr ~ pop15 + pop75 + dpi + ddpi) Cuando no tenemos una varianza constante una opción es transformar las variables. Si y es la variable original y h(y) la transformada queremos determinar h de modo que la transformada tenga varianza constante. Transformaciones habituales que podemos valorar son la raı́z cuadrada o el logaritmo de la variable respuesta. ¿Qué tipo de representación cabe esperar cuando la varianza no es constante? Veamos distintas representaciones de los residuos frente a los valores ajustados correspondiendo a varianza constante, varianzas no constantes y situaciones en que no hay linealidad. Nota de R 37 (Hipótesis del modelo de regresión) Ilustramos cómo observarı́amos residuos cuya varianza es constante. En la siguiente figura tenemos 50 posibles residuos en donde la varianza es constante. par(mfrow = c(2, 2)) for (i in 1:4) plot(1:50, rnorm(50)) 117 ● ● 0 ● ●● ● ● ● ●● ● ● ● ●● ●● ● ● ● ● 1 ● ●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● −2 20 30 40 ● ● ● 10 ● ● −2 ● 0 ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● 0 ● ● ● ● ● ● ●● ● ● −1 ● ●● ● −1 rnorm(50) ● ● ● ● ● ● ● ● ● ● ● ● rnorm(50) 1 ● ● ● ● ● ● 50 0 10 20 40 50 1:50 2 1:50 30 ● ● 2 ● ● ● ● ● ● ●● −2 1 ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 10 ● ● ● ● ● ● ●● ● ● ● 50 0 1:50 ● ● ● ● ● 40 ● ● ●● ● ● 30 ● ● ● ● ● ● ● ● 20 ● ●● ● ● ● ● ● ● ● ● 0 ● ● ● ● 0 ● ● ● ● ● ● ● ● ● −1 ● ● ● ● ● ● ● rnorm(50) 1 0 ● −1 rnorm(50) ● ● ● ● ● ● ● ● ● 10 20 30 40 50 1:50 En la siguiente figura tenemos como abscisas valores que van de 1 a 50 en incrementos unitarios. El valor de residuo que generamos tienen varianza creciente. En concreto vamos multiplicando el valor con distribución N (0, 1) por una constante c. La varianza es del orden del cuadrado del valor por el que multiplicamos. par(mfrow = c(2, 2)) for (i in 1:4) plot(1:50, (1:50) * rnorm(50)) 118 ● ● ● ● ● ● ● 0 10 20 30 40 50 50 ● ● 100 ●● ● ● ● ● ● ● ● ● 10 20 30 40 50 ● ● ● ● ● 30 40 20 40 60 ● ● ● ● ● ● ● ●● ●●●●●●●● ● ● ● ● ●● ● ● ● ● ● 50 ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● −60 ● ● −20 0 ● (1:50) * rnorm(50) 50 0 −50 ● ● ● ● ● −100 (1:50) * rnorm(50) ● ● 0 ● ● ● ● 20 ● ● ● 10 ●● 1:50 ● 0 ● ● ● ● ●● ●●● ● ●●● ●● ● ●● ●● ● ●● ● ●● ● ● 1:50 ● ●● ● ● ● ● ● ● ● ● ● ●●●● ●● ● ● ● ●● ● ● ● ● ● ● −100 ● ● ● ● ● 0 ● ● −50 ● ●● ● ● ● ●● ● ● ●● ● ● ●●●● ● ●● ● ● ● ● ● ● ● ● ● ● ● (1:50) * rnorm(50) 20 −20 ● ● ● ● ● ● ● −60 (1:50) * rnorm(50) 100 60 ● ● ● ● 0 10 20 1:50 30 40 ● 50 1:50 √ √ √ En la siguiente figura los valores por los que multiplicamos son 1, 2, 3, . . . , 50 por lo que las varianzas se incrementan muy menos de una abscisa a la siguiente. par(mfrow = c(2, 2)) for (i in 1:4) plot(1:50, sqrt((1:50)) * rnorm(50)) 119 ● ● ●● ● ● −5 ● ●● ● ● ●● ● ● ● ●● ● ● ● 0 10 20 10 15 20 ● ● ● 30 ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● 40 0 10 20 20 ● 10 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0 20 50 30 40 ● ● ● ● 10 ● ● ● ●● ● 5 ● ● ● 0 ● ● ●● ● ● ● ●● ●●● ● ● −5 ● ● ●● ● ● ●● ●● ●● ●● ● ● ● ● ● 50 ● ● ● ● 0 1:50 ● ● ●● −15 ● ● sqrt((1:50)) * rnorm(50) ● ● ● ● ● ● ● ● ●● ● ● ● 40 ● 15 10 5 0 ● ● 30 1:50 ● −5 sqrt((1:50)) * rnorm(50) ● ●● ● ● ● ●●●● ● ● ● ● ● ● ● ● 50 ● ● ● ● ●● ● ● 1:50 ● ● ● ● ● ● ● −15 0 ●● ● ● ● 5 ● ● ●●● ● ● ● ●● 0 5 ● ● ● ● ● −5 ●● ●● ● ●● sqrt((1:50)) * rnorm(50) ● ● −10 sqrt((1:50)) * rnorm(50) 10 ● 10 20 30 40 50 1:50 Finalmente en la siguiente figura mostramos un ejemplo de un residuo no lineal. Es un caso en que no podemos suponer que la media es una función lineal de los predictores. par(mfrow = c(2, 2)) for (i in 1:4) plot(1:50, cos((1:50) * pi/25) + rnorm(50)) par(mfrow = c(1, 1)) 120 ● ● ● ● 10 ● ●● 20 30 40 2 ● 1 ● ● ● ● ● ● ● ● ● 0 ● ● ● −1 ● ● ●● ● ● ● ●● ●● ● 0 ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 10 20 ● ● ●● ● 0 10 ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● 20 30 40 50 40 50 3 2 1 1 0 −1 ● ● ●● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ●●● ● ● ●● ●● ●● ● ● ● ●● ● ●● ● ●● ● ● ● ● ● 0 1:50 ● ● ● ● ● ● 0 ● ● ● ● 30 ● −1 ● ● ● ● −2 ● ● ● ● ● ● ● 0 cos((1:50) * pi/25) + rnorm(50) 2 ● −2 cos((1:50) * pi/25) + rnorm(50) ● ● ● ● ● 1:50 ● ● ● ● ● ● ● ● 1:50 ● ● ● ● ● ●● 50 ● ● ● ● ● ● ●● ● ● −2 1 0 ● ●● ● ● ● ● ●● ● ● ● ●●● −3 ● ●●● ●● ● ● ● cos((1:50) * pi/25) + rnorm(50) 4 3 2 ● −2 cos((1:50) * pi/25) + rnorm(50) ● 10 20 30 40 50 1:50 Normalidad La siguiente hipótesis a valorar es la normalidad de los errores. La herramienta gráfica más habitual es el dibujo q-q o la representación cuantil-cuantil. Ordenamos i ) para los residuos y representamos los residuos ordenados en función de Φ−1 ( n+1 i = 1, . . . , n. Si los residuos tienen una distribución normal entonces deben estar alineados. El histograma no es muy adecuado para ver la normalidad de los residuos. Nota de R 38 (Dibujos cuantil-cuantil) Para los datos savings representamos un dibujo q-q. En la figura que sigue mostramos cómo hacerlo después de ajustar el modelo y utilizando la función plot (realmente estamos utilizando plot.lm). plot(savings.lm, which = 2) 121 3 Normal Q−Q 2 Zambia ● Philippines ● ● ● ● 1 ●● ● 0 ● ●●● ●● ● ● ● ●● ●●●● ●● ●●●● ●● ●● ● ● ● ●●● ● ● ●● −1 Standardized residuals ● ● ● ● ● −2 ● ● Chile −2 −1 0 1 2 Theoretical Quantiles lm(sr ~ pop15 + pop75 + dpi + ddpi) En la siguiente figura aparece un dibujo q-q utilizando las funciones qqnorm que construye el dibujo y qqline que añade una lı́nea uniendo el primer y tercer cuartil. Como vemos es el mismo dibujo. qqnorm(residuals(savings.lm), ylab = "Residuos") qqline(residuals(savings.lm)) 122 10 Normal Q−Q Plot ● ● 5 ● ● ● ●● ● ● ●●● ●● ● ● ● ●● ●●●● 0 Residuos ● ●● ● ●●● ● ● ●● ● ●● ●●● ● ●● ● ● −5 ● ● ● ● ● −2 −1 0 1 2 Theoretical Quantiles Hemos visto cómo es una dibujo q-q cuando tenemos normalidad. Pero: ¿y qué pasa cuando no tenemos normalidad. Esto es lo interesante saber qué tenemos que buscar para detectar que los residuos no siguen una distribución normal. Nota de R 39 (Dibujos cuantil-cuantil y error no normal) Veamos cómo se modifican los dibujos q-q con otras distribuciones de probabilidad. En esta nota consideramos cuatro distribuciones de probabilidad. En la siguiente aparecen las densidades de los modelos considerados. La primera es la correspondiente a la distribución normal. Luego tenemos la lognormal, la densidad de una Cauchy y la densidad uniforme. La lognormal se toma como ejemplo de distribución asimétrica, la Cauchy como ejemplo de una distribución con las colas más largas que la normal y finalmente la uniforme como ejemplo de distribución con las colas más cortas. par(mfrow = c(2, 2)) curve(dnorm, xlim = c(-3, 3)) curve(dlnorm, xlim = c(-3, 3)) curve(dcauchy, xlim = c(-3, 3)) curve(dunif, xlim = c(-3, 3)) 123 0.6 0.4 0.0 0.4 0.0 0.2 dlnorm(x) 0.3 0.2 0.1 dnorm(x) −3 −2 −1 0 1 2 3 −3 −2 −1 1 2 3 1 2 3 x 0.6 0.0 0.05 0.2 0.4 dunif(x) 0.15 dcauchy(x) 0.25 0.8 1.0 x 0 −3 −2 −1 0 1 2 3 −3 x −2 −1 0 x En la figura que sigue tenemos nueve dibujos q-q realizados con datos simulados con una distribución normal. par(mfrow = c(2, 2)) for (i in 1:4) { residuos <- rnorm(50) qqnorm(residuos) qqline(residuos) } 124 ● ● ● ● ● 1 0 −1 ● ● ● ● −2 −1 0 1 2 −2 −1 0 1 Theoretical Quantiles Theoretical Quantiles Normal Q−Q Plot Normal Q−Q Plot 2 2 ● 1 −2 ● ● −2 −1 0 1 2 ● ●● ●● ●●● ●●● ●●● ●●●● ● ● ● ● ● ● ● ●●●●● ●● ●●● ● ● ● ●●●● ●● ● −2 Theoretical Quantiles ● ● 0 Sample Quantiles 2 0 1 ●●● ●● ● ●● ●● ● ● ●●● ●● ● ● ● ● ● ● ● ●● ●●● ●●●●●● ●●●●●● ● ●● −1 ● ● ● ● −1 3 ● ● −2 Sample Quantiles ● ● ●●● ●● ●●● ● ● ● ●●● ●● ●● ● ● ● ● ● ● ● ●●●●● ●●●● ●● ●●●● ● ● ● −2 Sample Quantiles −1 0 1 ● ●● ● ● ● ● ● ●● ●● ●● ●●●● ● ● ● ● ● ● ● ● ● ●●●●● ●● ● ●●● ●● ● ● ● ● ●● −2 Sample Quantiles Normal Q−Q Plot 2 Normal Q−Q Plot −1 0 1 2 Theoretical Quantiles La figura que sigue muestra el dibujo q-q con datos simulados correspondientes a la distribución lognormal. par(mfrow = c(2, 2)) for (i in 1:4) { residuos <- exp(rnorm(50)) qqnorm(residuos) qqline(residuos) } 125 Normal Q−Q Plot 6 Normal Q−Q Plot −1 0 1 8 Sample Quantiles 6 0 1 0 1 2 0 2 ● 6 ● 4 ●●● ●● ● 2 0 20 −1 2 8 Normal Q−Q Plot 25 Normal Q−Q Plot 15 −2 −1 Theoretical Quantiles 10 5 0 −2 ● ● ● ● ●● ● ●● ●● ● ●● ●●●●● ●● ● ● ● ● ● ● ●●●●●●● ● ● ●●●●●●●●●●●● Theoretical Quantiles ● ●● ● ●●●● ● ●●● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ●● ● ● ●●●●●●●●●●●●●●●●● ● ● 2 Sample Quantiles 0 ● ●● ● ●● ●●● ●●●● ● ● ● ● ● ● ● ● ●●●●● ●●●● ● ● ● ● ● ● ● ● ● ●● ● 4 5 4 2 3 ● ● ● 1 Sample Quantiles ● ● ●● −2 Sample Quantiles ● 10 ● ● ● ● ●● ● ●● ● ● ●●● ●● ● ● ● ● ● ● ●●●●●●●●● ●●●●● ● ● ●●●●● −2 Theoretical Quantiles ● −1 0 1 2 Theoretical Quantiles La figura que sigue muestra el dibujo q-q con datos simulados correspondientes a la distribución de Cauchy. par(mfrow = c(2, 2)) for (i in 1:4) { residuos <- rcauchy(50) qqnorm(residuos) qqline(residuos) } 126 Normal Q−Q Plot Normal Q−Q Plot ● ● 40 0 ● ● ●●● ●●●●●●●●●●●●●●●● ● ● ● ● ● ● ●●●● ●●●●●●●●● ● ●●●●●● −2 −1 0 1 30 20 ● 2 −2 −1 0 1 Theoretical Quantiles Theoretical Quantiles Normal Q−Q Plot Normal Q−Q Plot 2 ● ● 0 0 −20 ●● ● −2 −1 0 1 2 ●● ● ●●●●● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●●●●●● ●●●●●●●●● ● ●● −10 −5 ● ● ● ●●●●●●●●●●●●●●●●● ●● ● ●● ● ●●●●● ●●●●●●●●● ● ● ● ● Sample Quantiles 5 10 20 30 40 ● ● −20 ● ● ●●●● ●●●●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●●●●●●● ●●●● ● ●● 0 −10 ● Sample Quantiles ● 10 Sample Quantiles −20 −40 −60 Sample Quantiles ● ● ● ● −2 Theoretical Quantiles ● −1 0 1 2 Theoretical Quantiles La figura que sigue muestra el dibujo q-q con datos simulados correspondientes a la distribución de uniforme. par(mfrow = c(2, 2)) for (i in 1:4) { residuos <- runif(50) qqnorm(residuos) qqline(residuos) } 127 −1 1 1.0 0.8 0 1 2 −1 0 1 2 0.8 ●●● 0.6 0.0 ● ● ●● ●●● ●● ● ●● ● ● ●● −2 Theoretical Quantiles ● ● ●● ● ●● ●● ●● ● ● ●● ● ● ● ● ● ● ● ●● ●● ●● 0.4 ● ● ● ● ●●●● ●● ●● ● ●●● ●●● ●●● ● ● ●● Sample Quantiles 0.8 1.0 Normal Q−Q Plot 1.0 Normal Q−Q Plot 0.6 0.4 −1 Theoretical Quantiles ● ● ● ● ● −2 ● ● −2 ● ● ●●●● ● ● ● ●● ●●●● ●● ●● Theoretical Quantiles ● ● ●●● ● ● 2 ●●● ● ●● ●●● ●●● ●● ● 0.6 0.0 0 ● ● 0.2 ● ● ●● ●●● ● ●●● ● ● ● ● ●● ●● ● ●●●● ● ● ●●● ●●● ●●●● ● ● ● ● ● ● ● ● 0.4 Sample Quantiles 0.8 0.4 0.6 ●● ●●● ● ●●● ● ● ●● ● ● ● ● ● ● ● ●●● ● 0.2 0.0 ● 0.2 ● −2 Sample Quantiles Normal Q−Q Plot ●● ● ●● ● ● 0.2 0.0 Sample Quantiles 1.0 Normal Q−Q Plot −1 0 1 2 Theoretical Quantiles Como vemos no es simple la interpretación de estos dibujos. Por ejemplo, no es fácil diferenciar entre una distribución con colas más largas de una situación en donde tenemos observaciones anómalas. ¿Cómo hacerlo? Si quitamos las observaciones extremas y aparecen otras estamos en una distribución con colas largas. Si tenemos muestras grandes el problema de la no normalidad se alivia. El problema de la no normalidad es mayor para colas largas que para colas más cortas. La asimetrı́a se resolverı́a transformando los datos. También podemos usar un test de normalidad. Un test de normalidad es un cualquier test estadı́stico donde la hipótesis nula es que los datos observados (en nuestro caso los residuos observados) proceden de una distribución normal. Una opción que viene implementada con la función shapiro.test es el test de ShapiroWilk. Nota de R 40 (Residuos y test de normalidad de Shapiro-Wilks) Aplicamos un test de Shapiro-Wilks a los residuos observados en el ajuste de los datos savings. Vemos que el p-valor observado es muy grande y no podemos rechazar la normalidad de los residuos. residuals(savings.lm) ## ## ## Australia 0.8636 Chile Austria 0.6164 China Belgium 2.2190 Colombia 128 Bolivia -0.6983 Costa Rica Brazil 3.5528 Denmark Canada -0.3169 Ecuador ## -8.2422 ## Finland ## -1.6811 ## Iceland ## -6.2106 ## Luxembourg ## -1.6708 ## Panama ## -3.2942 ## South Rhodesia ## 1.2914 ## United Kingdom ## -2.6924 ## Libya ## -2.8295 2.5360 France 2.4755 India 0.5087 Malta 2.9749 Paraguay -6.1258 Spain -0.6712 United States -1.1116 Malaysia -2.9709 -1.4517 Germany -0.1807 Ireland 3.3911 Norway -0.8718 Peru 6.5394 Sweden -4.2603 Venezuela 3.6325 5.1251 Greece -3.1162 Italy 1.9268 Netherlands 0.4255 Philippines 6.6750 Switzerland 2.4868 Zambia 9.7509 5.4002 Guatamala -3.3553 Japan 5.2815 New Zealand 2.2856 Portugal -0.7684 Turkey -2.6657 Jamaica -3.0185 shapiro.test(residuals(savings.lm)) ## ## Shapiro-Wilk normality test ## ## data: residuals(savings.lm) ## W = 0.987, p-value = 0.8524 Incorrelación de los errores Estamos asumiendo que los errores son incorrelados. La correlación entre los datos pueden venir de que han sido observados próximos bien en el tiempo bien en el espacio. ¿Cómo contrastar si los residuos son incorrelados? Un test de la hipótesis de incorrelación es el test de Durbin-Watson que utiliza el siguiente estadı́stico Pn (ˆ i − ˆi−1 )2 , (6.36) DW = i=2Pn 2 ˆi i=1 bajo la hipótesis nula de incorrelación la distribución es una combinación lineal de distintas distribuciones χ2 . Nota de R 41 Vamos a aplicar el test de Durbin-Watson de correlación serial. library(lmtest) Aplicamos el test de Durbin-Watson. dwtest(savings.lm) ## ## Durbin-Watson test ## ## data: savings.lm ## DW = 1.934, p-value = 0.3897 ## alternative hypothesis: true autocorrelation is greater than 0 129 -2.4056 Honduras 0.7100 Korea -6.1070 Nicaragua 0.6464 South Africa 0.4832 Tunisia -2.8179 Uruguay -2.2638 Observaciones anómalas y observaciones influyentes Algunas observaciones no ajustan bien al modelo y son llamadas observaciones anómalas. Otras observaciones influyen mucho en el ajuste y lo modifican de un modo substantivo. Estas últimas reciben el nombre de observaciones influyentes. Una observación dada puede ser o bien anómala o bien influyente o ambas cosas. Empecemos estudiando qué se entiende por influencia de una observación. Llamaremos a hi = Hii , esto es, el valor en la posición (i, i) de la matriz H la influencia (leverage en inglés). Notemos que var(ˆ i ) = σ 2 (1 − hi ). En consecuencia, una influencia alta supone una varianza del correspondiente residuo baja. Forzamos al Pp ajuste a que esté próximo a yi . Se tiene que i=1 hi = p. En consecuencia el valor medio de los hi es p/n. Como una regla simple de aplicar si la influencia hi es mayor que 2p/n debemos de observar el dato con atención. Buscamos valores grandes de las influencias. Nota de R 42 Calculamos las influencias para los datos savings. En la siguiente figura aparece una representación de las influencias respecto de los residuos estandarizados. Calculamos las influencias. savings.inf <- influence(savings.lm) savings.inf$hat ## Australia ## 0.06771 ## Chile ## 0.03730 ## Finland ## 0.09204 ## Iceland ## 0.07050 ## Luxembourg ## 0.08635 ## Panama ## 0.03897 ## South Rhodesia ## 0.16081 ## United Kingdom ## 0.11651 ## Libya ## 0.53146 Austria 0.12038 China 0.07796 France 0.13620 India 0.07145 Malta 0.07940 Paraguay 0.06937 Spain 0.07733 United States 0.33369 Malaysia 0.06523 Belgium 0.08748 Colombia 0.05730 Germany 0.08736 Ireland 0.21224 Norway 0.04793 Peru 0.06505 Sweden 0.12399 Venezuela 0.08628 Y las representamos. plot(savings.lm, which = 5) 130 Bolivia 0.08947 Costa Rica 0.07547 Greece 0.09662 Italy 0.06651 Netherlands 0.09061 Philippines 0.06425 Switzerland 0.07359 Zambia 0.06433 Brazil 0.06956 Denmark 0.06272 Guatamala 0.06049 Japan 0.22331 New Zealand 0.05422 Portugal 0.09715 Turkey 0.03964 Jamaica 0.14076 Canada 0.15840 Ecuador 0.06373 Honduras 0.06008 Korea 0.06080 Nicaragua 0.05035 South Africa 0.06510 Tunisia 0.07457 Uruguay 0.09795 3 Residuals vs Leverage ● Zambia 2 1 ● ● ● Japan 0.5 ● ● 1 ● ● ● ● ● ● ● ● ● ● ● ● ●● ● 0 ● ● ● ●● ● ● ● ● −1 Standardized residuals ● ● ●● ● ● ● ● ●● ● ● ● ● Libya ● ● 0.5 −2 ●● ● 1 ● Cook's distance 0.0 0.1 0.2 0.3 0.4 0.5 Leverage lm(sr ~ pop15 + pop75 + dpi + ddpi) Notemos que Libia es el pais que tiene un mayor valor de la influencia. Otra posibilidad es para encontrar observaciones anómalas consiste en trabajar con los residuos estudentizados. Veamos su definición. Notemos que var(ˆ i ) = σ 2 (1− hi ) lo que sugiere tomar ˆi ri = √ (6.37) σ̂ 1 − hi Estos son los residuos estudentizados. Si el modelo que asumimos es correcto entonces la varianza de estos residuos es uno y son aproximadamente incorrelados. Notemos que la estudentización corrige las varianzas desiguales de los residuos cuando las varianzas de los errores son iguales entre si. En otro caso esto no es cierto. Si las varianzas de los errores no son iguales (tenemos heterocedasticidad) entonces la estudentización no hace homogéneas las varianzas de los residuos. Algunos autores (y programas) tienden a usar en lugar de los residuos originales, los residuos estudentizados. Una observación anómala es una observación que no se ajusta a nuestro modelo. Hemos de protegernos frente a este tipo de puntos. Un test para observaciones anómalas es útil si nos permite distinguir entre observaciones que son realmente anómala y aquellas que simplemente tienen un residuo grande aunque no excepcionalmente grande. Para detectar este tipo de puntos, lo que hacemos es excluir el punto i-ésimo y 2 ajustamos el modelo sin ese punto obteniendo los estimadores β̂(i) y σ̂(i) . Tendremos 131 para el punto i-ésimo la siguiente estimación ŷ(i) = x0i β̂(i) . (6.38) Si el valor yi − ŷ(i) es grande entonces el caso i es una observación anómala. Con objeto de valorar si estos nuevos residuos son anormales hemos de estandarizarlos. Notemos que 2 0 vd ar(yi − ŷ(i) ) = σ̂(i) (1 + x0i (X(i) X(i) )−1 xi ) de modo que podemos definir los residuos jackknife como yi − ŷ(i) yi − ŷ(i) q ∼ tn−p−1 , = ti = p 0 X )−1 x vd ar(yi − ŷ(i) ) σ̂(i) 1 + x0i (X(i) i (i) asumiendo que el modelo es correcto. Se tiene la siguiente expresión ti = 1/2 ˆ n−p−1 √i = ri . n − p − ri2 σ̂(i) 1 − hi Puesto que cada uno de los ti sigue una distribución conocida podemos contrastar si tenemos una observación anómala. En principio el procedimiento serı́a simplemente fijar un nivel de significación α y determinar el percentil 1 − α2 de una distribución t de Student con n − p − 1 grados de libertad. Si denotamos el percentil como tn−p−1,1− α2 entonces residuos que no estén en el intervalo [−tn−p−1,1− α2 , tn−p−1,1− α2 ] serı́an sospechosos. Esto no es adecuado. Porque estamos analizando n residuos estudentizados. Con uno sólo sı́ que serı́a aplicable el razonamiento. Tenemos un problema de muchos tests simultáneamente considerados. Si aplicamos la corrección de Bonferroni tendrı́amos que corregir el nivel de significación α y trabajar con α/n. Por tanto, consideramos como sospechosos aquellos residuos estandarizados α ,t α ]. que estén fuera del intervalo [−tn−p−1,1− 2n n−p−1,1− 2n Nota de R 43 (Residuos estudentizados) Calculamos para los datos savings los residuos estudentizados con la función rstudent. La pregunta que nos hacemos es si alguno de estos residuos es muy grande o muy pequeño. Comparamos el módulo α . de los residuos estandarizados con tn−p−1,1− 2n savings.rs <- rstudent(savings.lm) Comparamos los residuos con el percentil correspondiente. abs(savings.rs) > qt(1 - 0.05/(50 * 2), 44) ## Australia ## FALSE ## Chile ## FALSE ## Finland ## FALSE ## Iceland ## FALSE ## Luxembourg ## FALSE ## Panama ## FALSE ## South Rhodesia Austria FALSE China FALSE France FALSE India FALSE Malta FALSE Paraguay FALSE Spain Belgium FALSE Colombia FALSE Germany FALSE Ireland FALSE Norway FALSE Peru FALSE Sweden 132 Bolivia FALSE Costa Rica FALSE Greece FALSE Italy FALSE Netherlands FALSE Philippines FALSE Switzerland Brazil FALSE Denmark FALSE Guatamala FALSE Japan FALSE New Zealand FALSE Portugal FALSE Turkey Canada FALSE Ecuador FALSE Honduras FALSE Korea FALSE Nicaragua FALSE South Africa FALSE Tunisia ## FALSE ## United Kingdom ## FALSE ## Libya ## FALSE FALSE United States FALSE Malaysia FALSE FALSE Venezuela FALSE FALSE Zambia FALSE Un punto influyente es aquel que cuando lo quitamos causa una modificación importante del ajuste. Un punto influyente puede ser o no una observación anómala, puede tener o no una alta influencia pero tenderá a tener al menos una de las dos propiedades. El estadı́stico de Cook es una de las maneras de medir la influencia. Se define como (ŷi − ŷ(i) )0 (ŷi − ŷ(i) ) 1 hi = ri2 . (6.39) Di = 2 pσ̂ p 1 − hi Nota de R 44 Con los datos savings representamos las distancias de Cook y las obtenemos utilizando la función Cooks.distance. Vemos Lı́bia, Zambia y Japón son observaciones que influyen mucho en el ajuste. Habrı́a que valorar el ajuste con y sin estas observaciones. plot(savings.lm, which = 4) Cook's distance 0.15 0.10 Japan 0.05 Zambia 0.00 Cook's distance 0.20 0.25 Libya 0 10 20 30 Obs. number lm(sr ~ pop15 + pop75 + dpi + ddpi) También podemos ver los valores de la distancia de Cook. 133 40 50 FALSE Jamaica FALSE FALSE Uruguay FALSE cooks.distance(savings.lm) ## Australia ## 8.036e-04 ## Chile ## 3.781e-02 ## Finland ## 4.364e-03 ## Iceland ## 4.353e-02 ## Luxembourg ## 3.994e-03 ## Panama ## 6.334e-03 ## South Rhodesia ## 5.267e-03 ## United Kingdom ## 1.497e-02 ## Libya ## 2.681e-01 6.10. Austria 8.176e-04 China 8.157e-03 France 1.547e-02 India 2.966e-04 Malta 1.147e-02 Paraguay 4.157e-02 Spain 5.659e-04 United States 1.284e-02 Malaysia 9.113e-03 Belgium 7.155e-03 Colombia 1.879e-03 Germany 4.737e-05 Ireland 5.440e-02 Norway 5.559e-04 Peru 4.401e-02 Sweden 4.056e-02 Venezuela 1.886e-02 Bolivia 7.279e-04 Costa Rica 3.208e-02 Greece 1.590e-02 Italy 3.919e-03 Netherlands 2.744e-04 Philippines 4.522e-02 Switzerland 7.335e-03 Zambia 9.663e-02 Brazil 1.403e-02 Denmark 2.880e-02 Guatamala 1.067e-02 Japan 1.428e-01 New Zealand 4.379e-03 Portugal 9.734e-04 Turkey 4.224e-03 Jamaica 2.403e-02 Inferencia sobre el modelo Hemos formulado un modelo probabilı́stico en donde relacionamos la variable respuesta con una serie de variables predictoras. Es claro que el experimentador introduce en el modelo como variables predictoras variables que a priori sospecha que pueden ser relevantes a la hora de predecir. Esto no quiere decir que luego podamos prescindir de alguna o algunas de ellas. Bien porque se demuestra que dicha variable no es relevante o bien porque la información que contiene esa variable predictora está contenida en las otras. Supongamos que nos planteamos el siguiente contraste de hipótesis: H0 : βi1 = . . . = βir = 0 frente a la alternativa H1 : No H0 . Si un coeficiente determinado βi es nulo entonces la variable respuesta Y no dependerı́a de la variable asociada a dicho coeficiente. En definitiva, la hipótesis nula considerada se podrı́a formular diciendo que la variable Y no depende de las variables xi1 , . . . , xir . ¿Cómo contrastar las hipótesis indicadas? Se puede hacer mediante el test del cociente de verosimilitudes, es decir, utilizando el estadı́stico Λ= siendo L(β, σ) = 1 n (2π) 2 σ n máx(β,σ)∈Ω0 L(β, σ) máx(β,σ)∈Ω L(β, σ) (6.40) exp{− 2σ1 2 (y − Xβ)0 (y − Xβ)}, Ω0 = {(β, σ) ∈ Rp × (0, +∞) : βi1 = . . . = βir = 0} y Ω = Rp × (0, +∞). Como es habitual en un test del cociente de verosimilitudes rechazarı́amos la hipótesis nula si Λ es pequeño (menor que una cierta constante) que se prueba es equivalente a que SS(Error)Ω0 − SS(Error)Ω SS(Error)Ω sea grande (mayor que una cierta constante). Denotamos por SS(Error)Ω0 la suma de cuadrados del error bajo la hipótesis nula y SS(Error)Ω la suma de cuadrados sobre todo el espacio paramétrico. Bajo la hipótesis nula se verifica que SS(Error)Ω0 − SS(Error)Ω ∼ χ2r σ2 r 134 Canada 3.106e-04 Ecuador 5.819e-03 Honduras 4.742e-04 Korea 3.555e-02 Nicaragua 3.226e-04 South Africa 2.405e-04 Tunisia 9.562e-03 Uruguay 8.532e-03 y SS(Error)Ω ∼ χ2n−p σ 2 (n − p) además ambas cantidades son independientes. Por ello se verifica que F = (SS(Error)Ω0 − SS(Error)Ω )/r ∼ Fr,n−p . (SS(Error)Ω )/(n − p) De modo que rechazaremos la hipótesis nula de que H0 : βi1 = . . . = βir = 0 si F > Fr,n−p,1−α donde Fr,n−p,1−α es el percentil 1 − α de una F con r y n − p grados de libertad. ¿Realmente depende la variable respuesta de alguna de las variables predictoras? Realmente nos estamos planteando la hipótesis de que todos los coeficientes, salvo el término constante β0 , valen cero, es decir, la hipótesis nula H0 : β1 = . . . = βp−1 = 0. En este caso tendremos que F = ((y − 1n ȳ)0 (y − 1n ȳ) − (y − X β̂)0 (y − X β̂))/(p − 1) (y − X β̂)0 (y − X β̂)/(n − p) ∼ Fp−1,n−p . Como segundo caso tendrı́amos la situación en que contrastamos que un solo coeficiente vale cero, es decir, la hipótesis nula H0 : βi = 0 frente a la alternativa H1 : βi 6= 0. Tenemos que bajo la hipótesis nula indicada ti = β̂i SE(β̂i ) ∼ tn−p donde SE(β̂i ) es el error estándar de β̂i y viene dado en ecuación 6.30. Se tiene, de hecho, que F = t2i . Rechazaremos la hipótesis nula si |ti | > tn−p,1− α2 o bien si F = t2i > F1,n−p,1− α2 . Ambos procedimientos son equivalentes como se puede ver fácilmente. Nota de R 45 (Contrastes sobre los coeficientes) Utilizando los datos savings podemos ver en la última lı́nea el contraste de que todas las variables predictoras tienen su coeficiente asociado nulo. El p-valor es 0,0007904, es decir, es muy pequeño por lo que rechazamos la hipótesis nula. Al menos una de las variables predictoras tiene su coeficiente asociado no nulo. Cuando contrastamos la hipótesis de que cada coeficiente valga cero vemos que no podemos rechazarlo para las variables pop75 y dpi. Realizamos un summary del modelo de regresión ajustado. summary(savings.lm) ## ## Call: ## lm(formula = sr ~ pop15 + pop75 + dpi + ddpi, data = savings) ## 135 ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Residuals: Min 1Q Median -8.242 -2.686 -0.249 3Q 2.428 Max 9.751 Coefficients: Estimate Std. Error t (Intercept) 28.566087 7.354516 pop15 -0.461193 0.144642 pop75 -1.691498 1.083599 dpi -0.000337 0.000931 ddpi 0.409695 0.196197 --Signif. codes: 0 '***' 0.001 '**' value Pr(>|t|) 3.88 0.00033 *** -3.19 0.00260 ** -1.56 0.12553 -0.36 0.71917 2.09 0.04247 * 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 3.8 on 45 degrees of freedom Multiple R-squared: 0.338,Adjusted R-squared: 0.28 F-statistic: 5.76 on 4 and 45 DF, p-value: 0.00079 Podemos tener intervalos de confianza para cada uno de los coeficientes βi . β̂i −βi ∼ tn−p entonces el intervalo de confianza al nivel Teniendo en cuenta que SE( β̂i ) 1 − α para el coeficiente βi serı́a β̂i ± tn−p,1− α2 SE(β̂i ). Nota de R 46 (Intervalos de confianza) Calculamos los intervalos de confianza para los coeficientes de savings con la función confint. confint(savings.lm) ## ## ## ## ## ## (Intercept) pop15 pop75 dpi ddpi 2.5 % 97.5 % 13.753331 43.378842 -0.752518 -0.169869 -3.873978 0.490983 -0.002212 0.001538 0.014534 0.804856 Supongamos que consideramos un vector de predictores x0 y pretendemos predecir la correspondiente media de la variable respuesta. Esta media viene dada por E[Y |x0 ] = x00 β. La estimación de esta media es x00 β̂, que tiene varianza var(x00 β̂) = x00 (X 0 X)−1 x0 σ 2 . Esta varianza la estimamos mediante vd ar(x00 β̂) = x00 (X 0 X)−1 x0 σ̂ 2 . Y el intervalo de confianza serı́a x00 β̂ ± tn−p,1− α2 σ̂ q 136 x00 (X 0 X)−1 x0 . Supongamos que, en lugar de predecir la media de la variable respuesta para un conjunto de predictores dados, pretendemos predecir la propia variable respuesta. Recordemos que según nuestro modelo tenemos Y = x00 β + . En consecuencia la predicción de la propia observación serı́a x00 β̂ pero hay que considerar la varianza añadida por el error de modo que la varianza al predecir Y dado x0 serı́a var(x00 β̂) + σ 2 que estimarı́amos como vd ar(x00 β̂) + σ̂ 2 = x00 (X 0 X)−1 x0 σ̂ 2 + σ̂ 2 = (x00 (X 0 X)−1 x0 + 1)σ̂ 2 . Finalmente tendremos que el intervalo de confianza para una observación Y que tiene predictores x0 es el siguiente q x00 β̂ ± tn−p,1− α2 σ̂ x00 (X 0 X)−1 x0 + 1 Nota de R 47 Con los datos savings consideramos cómo obtener las predicciones, intervalos de confianza para las medias y para las predicciones. Utilizamos los propios datos que se han utilizado para ajustar el modelo. Con la función predict obtenemos las predicciones ası́ como los intervalos de confianza para las medias de las predicciones (predict con la opción interval=confidence) y los intervalos de confianza para las observaciones (predict con la opción interval=”prediction”). Primero obtengamos las predicciones para los propios datos. savings.lm <- lm(sr ~ pop15 + pop75 + dpi + ddpi, savings) predict(savings.lm) ## Australia ## 10.566 ## Chile ## 8.842 ## Finland ## 12.921 ## Iceland ## 7.481 ## Luxembourg ## 12.021 ## Panama ## 7.734 ## South Rhodesia ## 12.009 ## United Kingdom ## 10.502 ## Libya ## 11.720 Austria 11.454 China 9.364 France 10.165 India 8.491 Malta 12.505 Paraguay 8.146 Spain 12.441 United States 8.672 Malaysia 7.681 Belgium 10.951 Colombia 6.432 Germany 12.731 Ireland 7.949 Norway 11.122 Peru 6.161 Sweden 11.120 Venezuela 5.587 Bolivia 6.448 Costa Rica 5.655 Greece 13.786 Italy 12.353 Netherlands 14.224 Philippines 6.105 Switzerland 11.643 Zambia 8.809 Brazil 9.327 Denmark 11.450 Guatamala 6.365 Japan 15.819 New Zealand 8.384 Portugal 13.258 Turkey 7.796 Jamaica 10.739 En segundo lugar, obtenemos los intervalos de confianza para la predicción de la media. 137 Canada 9.107 Ecuador 5.996 Honduras 6.990 Korea 10.087 Nicaragua 6.654 South Africa 10.657 Tunisia 5.628 Uruguay 11.504 predict(savings.lm, interval = "confidence") ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Australia Austria Belgium Bolivia Brazil Canada Chile China Colombia Costa Rica Denmark Ecuador Finland France Germany Greece Guatamala Honduras Iceland India Ireland Italy Japan Korea Luxembourg Malta Norway Netherlands New Zealand Nicaragua Panama Paraguay Peru Philippines Portugal South Africa South Rhodesia Spain Sweden Switzerland Turkey Tunisia United Kingdom United States Venezuela Zambia Jamaica Uruguay Libya Malaysia fit 10.566 11.454 10.951 6.448 9.327 9.107 8.842 9.364 6.432 5.655 11.450 5.996 12.921 10.165 12.731 13.786 6.365 6.990 7.481 8.491 7.949 12.353 15.819 10.087 12.021 12.505 11.122 14.224 8.384 6.654 7.734 8.146 6.161 6.105 13.258 10.657 12.009 12.441 11.120 11.643 7.796 5.628 10.502 8.672 5.587 8.809 10.739 11.504 11.720 7.681 lwr 8.573 8.796 8.686 4.157 7.307 6.059 7.363 7.225 4.598 3.551 9.532 4.062 10.597 7.338 10.467 11.405 4.482 5.113 5.447 6.444 4.420 10.378 12.199 8.198 9.770 10.347 9.445 11.919 6.601 4.935 6.222 6.128 4.207 4.164 10.871 8.703 8.937 10.311 8.423 9.565 6.271 3.536 7.888 4.247 3.338 6.866 7.865 9.107 6.136 5.725 upr 12.559 14.111 13.216 8.739 11.347 12.155 10.321 11.502 8.265 7.759 13.368 7.929 15.245 12.991 14.994 16.167 8.249 8.867 9.514 10.539 11.477 14.328 19.438 11.975 14.271 14.663 12.799 16.530 10.168 8.372 9.246 10.163 8.114 8.046 15.646 12.611 15.080 14.571 13.817 13.721 9.321 7.719 13.117 13.096 7.837 10.752 13.612 13.901 17.303 9.637 138 Y finalmente obtenemos los intervalos de confianza para la predicción de la observación. predict(savings.lm, interval = "prediction") ## Warning: predictions on current data refer to future responses ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Australia Austria Belgium Bolivia Brazil Canada Chile China Colombia Costa Rica Denmark Ecuador Finland France Germany Greece Guatamala Honduras Iceland India Ireland Italy Japan Korea Luxembourg Malta Norway Netherlands New Zealand Nicaragua Panama Paraguay Peru Philippines Portugal South Africa South Rhodesia Spain Sweden Switzerland Turkey Tunisia United Kingdom United States Venezuela Zambia fit 10.566 11.454 10.951 6.448 9.327 9.107 8.842 9.364 6.432 5.655 11.450 5.996 12.921 10.165 12.731 13.786 6.365 6.990 7.481 8.491 7.949 12.353 15.819 10.087 12.021 12.505 11.122 14.224 8.384 6.654 7.734 8.146 6.161 6.105 13.258 10.657 12.009 12.441 11.120 11.643 7.796 5.628 10.502 8.672 5.587 8.809 lwr 2.65239 3.34674 2.96408 -1.54594 1.40632 0.86361 1.04174 1.41206 -1.44364 -2.28779 3.55427 -1.90361 4.91740 2.00061 4.74420 5.76572 -1.52194 -0.89571 -0.44375 0.56345 -0.48378 4.44367 7.34744 2.19862 4.03802 4.54786 3.28141 6.22601 0.52059 -1.19581 -0.07263 0.22559 -1.74359 -1.79621 5.23607 2.75248 3.75673 4.49157 3.00037 3.70738 -0.01362 -2.31147 2.40955 -0.17340 -2.39507 0.90760 upr 18.48 19.56 18.94 14.44 17.25 17.35 16.64 17.32 14.31 13.60 19.35 13.89 20.92 18.33 20.72 21.81 14.25 14.88 15.40 16.42 16.38 20.26 24.29 17.98 20.00 20.46 18.96 22.22 16.25 14.50 15.54 16.07 14.06 14.01 21.28 18.56 20.26 20.39 19.24 19.58 15.60 13.57 18.60 17.52 13.57 16.71 139 ## ## ## ## Jamaica Uruguay Libya Malaysia 6.11. 10.739 2.55827 11.504 3.47853 11.720 2.24140 7.681 -0.22396 18.92 19.53 21.20 15.59 Selección de variables Habitualmente tenemos un gran conjunto de variables y pretendemos determinar un buen conjunto de variables. ¿En qué sentido bueno? En primer lugar, bueno en el sentido de sencillo. Tener pocas variables supone un modelo más simple, más fácil de entender. Es bueno tener pocas variables porque luego no tendremos que recoger esta información. Es bueno porque los estimadores de los parámetros que intervienen en el modelo son mucho menos variables. Dos son las aproximaciones al problema de la selección de variables. En la primera vamos comparando modelos sucesivos y, básicamente, consideramos si los modelos sucesivos que comparamos difieren significativamente como modelos. En la segunda se adopta una medida de calidad global del ajuste y se plantea el problema de determinar el modelo que optimiza ese criterio global. 6.11.1. Procedimientos que comparan modelos Tres procedimientos se pueden considerar: selección backward, selección forward y selección stepwise. En el primer procedimiento, selección backward (selección hacia atrás), empezamos el proceso de selección con un modelo en que tenemos todas las variables consideradas a priori. Elegimos aquella que, cuando la quitamos, el p-valor resultante de comparar ambos modelos (completo y aquel que le falta la variable considerada) es mayor. Si este p-valor es mayor que un valor α previamente especificado entonces eliminamos la variable del modelo. Y ası́ continuamos hasta que al eliminar una variable el p-valor correspondiente sea menor que el α elegido. El procedimiento selección forward (o hacia adelante) empezamos con un modelo en el cual solamente tenemos la constante. Elegimos para entrar la variable tal que cuando se incorpora el modelo cambia lo más posible. Esto es, el p-valor es el más significativo. Si el p-valor de la comparación de los modelos es menor que α (siempre elegido antes de iniciar el proceso de selección y no reajustado a lo largo del mismo) entonces la variable entra en el modelo. Continuamos hasta que el modelo no cambia significativamente. El procedimiento más usado es el selección stepwise (hacia adelante y hacia atrás). Vistos los anteriores es de esperar cómo funciona este método. Después de la inclusión de una variable consideramos la posible exclusión de las variables que están en el modelo. Si es posible eliminar una lo hacemos y nos planteamos la inclusión de la variable que produzca un cambio más significativo. Nota de R 48 (Selección hacia atrás) Utilizamos los datos state y aplicamos un procedimiento de selección backward. data(state) statedata <- data.frame(state.x77, row.names = state.abb, check.names = T) g <- lm(Life.Exp ~ ., data = statedata) summary(g) ## 140 ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Call: lm(formula = Life.Exp ~ ., data = statedata) Residuals: Min 1Q Median -1.4890 -0.5123 -0.0275 3Q 0.5700 Max 1.4945 Coefficients: Estimate Std. Error t (Intercept) 7.09e+01 1.75e+00 Population 5.18e-05 2.92e-05 Income -2.18e-05 2.44e-04 Illiteracy 3.38e-02 3.66e-01 Murder -3.01e-01 4.66e-02 HS.Grad 4.89e-02 2.33e-02 Frost -5.74e-03 3.14e-03 Area -7.38e-08 1.67e-06 --Signif. codes: 0 '***' 0.001 '**' value Pr(>|t|) 40.59 < 2e-16 *** 1.77 0.083 . -0.09 0.929 0.09 0.927 -6.46 8.7e-08 *** 2.10 0.042 * -1.82 0.075 . -0.04 0.965 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.745 on 42 degrees of freedom Multiple R-squared: 0.736,Adjusted R-squared: 0.692 F-statistic: 16.7 on 7 and 42 DF, p-value: 2.53e-10 g <- update(g, . ~ . - Area) summary(g) ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Call: lm(formula = Life.Exp ~ Population + Income + Illiteracy + Murder + HS.Grad + Frost, data = statedata) Residuals: Min 1Q Median -1.4905 -0.5253 -0.0255 3Q 0.5716 Max 1.5037 Coefficients: Estimate Std. Error t (Intercept) 7.10e+01 1.39e+00 Population 5.19e-05 2.88e-05 Income -2.44e-05 2.34e-04 Illiteracy 2.85e-02 3.42e-01 Murder -3.02e-01 4.33e-02 HS.Grad 4.85e-02 2.07e-02 Frost -5.78e-03 2.97e-03 --Signif. codes: 0 '***' 0.001 '**' value Pr(>|t|) 51.17 < 2e-16 *** 1.80 0.079 . -0.10 0.917 0.08 0.934 -6.96 1.5e-08 *** 2.35 0.024 * -1.94 0.058 . 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.736 on 43 degrees of freedom Multiple R-squared: 0.736,Adjusted R-squared: 0.699 F-statistic: 20 on 6 and 43 DF, p-value: 5.36e-11 141 g <- update(g, . ~ . - Illiteracy) summary(g) ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Call: lm(formula = Life.Exp ~ Population + Income + Murder + HS.Grad + Frost, data = statedata) Residuals: Min 1Q Median -1.4892 -0.5122 -0.0329 3Q 0.5645 Max 1.5166 Coefficients: Estimate Std. Error t (Intercept) 7.11e+01 1.03e+00 Population 5.11e-05 2.71e-05 Income -2.48e-05 2.32e-04 Murder -3.00e-01 3.70e-02 HS.Grad 4.78e-02 1.86e-02 Frost -5.91e-03 2.47e-03 --Signif. codes: 0 '***' 0.001 '**' value Pr(>|t|) 69.07 < 2e-16 *** 1.89 0.066 . -0.11 0.915 -8.10 2.9e-10 *** 2.57 0.014 * -2.39 0.021 * 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.728 on 44 degrees of freedom Multiple R-squared: 0.736,Adjusted R-squared: 0.706 F-statistic: 24.5 on 5 and 44 DF, p-value: 1.02e-11 g <- update(g, . ~ . - Income) summary(g) ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Call: lm(formula = Life.Exp ~ Population + Murder + HS.Grad + Frost, data = statedata) Residuals: Min 1Q Median -1.471 -0.535 -0.037 3Q 0.576 Max 1.507 Coefficients: Estimate Std. Error t (Intercept) 7.10e+01 9.53e-01 Population 5.01e-05 2.51e-05 Murder -3.00e-01 3.66e-02 HS.Grad 4.66e-02 1.48e-02 Frost -5.94e-03 2.42e-03 --Signif. codes: 0 '***' 0.001 '**' value Pr(>|t|) 74.54 < 2e-16 *** 2.00 0.052 . -8.20 1.8e-10 *** 3.14 0.003 ** -2.46 0.018 * 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.72 on 45 degrees of freedom Multiple R-squared: 0.736,Adjusted R-squared: 0.713 F-statistic: 31.4 on 4 and 45 DF, p-value: 1.7e-12 142 g <- update(g, . ~ . - Population) summary(g) ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Call: lm(formula = Life.Exp ~ Murder + HS.Grad + Frost, data = statedata) Residuals: Min 1Q Median -1.502 -0.539 0.101 3Q 0.592 Max 1.227 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 71.03638 0.98326 72.25 <2e-16 *** Murder -0.28307 0.03673 -7.71 8e-10 *** HS.Grad 0.04995 0.01520 3.29 0.002 ** Frost -0.00691 0.00245 -2.82 0.007 ** --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.743 on 46 degrees of freedom Multiple R-squared: 0.713,Adjusted R-squared: 0.694 F-statistic: 38 on 3 and 46 DF, p-value: 1.63e-12 6.11.2. Procedimientos basados en criterios Estamos ajustando un modelo de regresión lineal múltiple con algún propósito. Podemos fijarnos en una medida global de calidad del ajuste y buscar la selección de variables que nos da el óptimo según ese criterio. Una medida global puede ser AIC (Akaike Information Criterion) definido como AIC = −2 máx logverosimilitud + 2p. A partir de la definición de esta medida global es claro que un valor pequeño indica un mejor ajuste. Nota de R 49 (Selección de variables) Notemos que con en la función step podemos indicar con el argumento direction si queremos both (stepwise), o bien backward o bien forward. data(state) statedata <- data.frame(state.x77, row.names = state.abb, check.names = T) g <- lm(Life.Exp ~ ., data = statedata) step(g) ## ## ## ## ## ## ## ## Start: AIC=-22.18 Life.Exp ~ Population + Income + Illiteracy + Murder + HS.Grad + Frost + Area - Area - Income - Illiteracy Df Sum of Sq RSS AIC 1 0.00 23.3 -24.2 1 0.00 23.3 -24.2 1 0.00 23.3 -24.2 143 ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## <none> - Population - Frost - HS.Grad - Murder 1 1 1 1 1.75 1.85 2.44 23.14 23.3 25.0 25.1 25.7 46.4 -22.2 -20.6 -20.4 -19.2 10.3 Step: AIC=-24.18 Life.Exp ~ Population + Income + Illiteracy + Murder + HS.Grad + Frost - Illiteracy - Income <none> - Population - Frost - HS.Grad - Murder Df Sum of Sq RSS AIC 1 0.00 23.3 -26.2 1 0.01 23.3 -26.2 23.3 -24.2 1 1.76 25.1 -22.5 1 2.05 25.3 -22.0 1 2.98 26.3 -20.2 1 26.27 49.6 11.6 Step: AIC=-26.17 Life.Exp ~ Population + Income + Murder + HS.Grad + Frost - Income <none> - Population - Frost - HS.Grad - Murder Df Sum of Sq RSS 1 0.0 23.3 23.3 1 1.9 25.2 1 3.0 26.3 1 3.5 26.8 1 34.7 58.0 AIC -28.2 -26.2 -24.3 -22.1 -21.2 17.5 Step: AIC=-28.16 Life.Exp ~ Population + Murder + HS.Grad + Frost Df Sum of Sq <none> - Population - Frost - HS.Grad - Murder 1 1 1 1 2.1 3.1 5.1 34.8 RSS 23.3 25.4 26.4 28.4 58.1 AIC -28.2 -25.9 -23.9 -20.2 15.5 Call: lm(formula = Life.Exp ~ Population + Murder + HS.Grad + Frost, data = statedata) Coefficients: (Intercept) Population 7.10e+01 5.01e-05 Murder -3.00e-01 HS.Grad 4.66e-02 Frost -5.94e-03 Utilizamos stepAIC de la librerı́a MASS ?. library(MASS) data(state) statedata <- data.frame(state.x77, row.names = state.abb, check.names = T) g <- lm(Life.Exp ~ ., data = statedata) 144 stepAIC(g) ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Start: AIC=-22.18 Life.Exp ~ Population + Income + Illiteracy + Murder + HS.Grad + Frost + Area - Area - Income - Illiteracy <none> - Population - Frost - HS.Grad - Murder Df Sum of Sq RSS AIC 1 0.00 23.3 -24.2 1 0.00 23.3 -24.2 1 0.00 23.3 -24.2 23.3 -22.2 1 1.75 25.0 -20.6 1 1.85 25.1 -20.4 1 2.44 25.7 -19.2 1 23.14 46.4 10.3 Step: AIC=-24.18 Life.Exp ~ Population + Income + Illiteracy + Murder + HS.Grad + Frost - Illiteracy - Income <none> - Population - Frost - HS.Grad - Murder Df Sum of Sq RSS AIC 1 0.00 23.3 -26.2 1 0.01 23.3 -26.2 23.3 -24.2 1 1.76 25.1 -22.5 1 2.05 25.3 -22.0 1 2.98 26.3 -20.2 1 26.27 49.6 11.6 Step: AIC=-26.17 Life.Exp ~ Population + Income + Murder + HS.Grad + Frost - Income <none> - Population - Frost - HS.Grad - Murder Df Sum of Sq RSS 1 0.0 23.3 23.3 1 1.9 25.2 1 3.0 26.3 1 3.5 26.8 1 34.7 58.0 AIC -28.2 -26.2 -24.3 -22.1 -21.2 17.5 Step: AIC=-28.16 Life.Exp ~ Population + Murder + HS.Grad + Frost Df Sum of Sq <none> - Population - Frost - HS.Grad - Murder 1 1 1 1 2.1 3.1 5.1 34.8 RSS 23.3 25.4 26.4 28.4 58.1 AIC -28.2 -25.9 -23.9 -20.2 15.5 Call: lm(formula = Life.Exp ~ Population + Murder + HS.Grad + Frost, data = statedata) 145 ## Coefficients: ## (Intercept) Population ## 7.10e+01 5.01e-05 Murder -3.00e-01 HS.Grad 4.66e-02 Frost -5.94e-03 Vemos que se obtiene el mismo resultado. 6.12. Algunos ejemplos Terminamos el tema con algunos ejemplos. Nota de R 50 Son unos datos sobre el abulón. Es un molusco. Se trata de predecir su edad a partir de una serie de caracterı́sticas fı́sicas. Los datos se pueden encontrar en http://www.liacc.up.pt/˜ltorgo/Regression/DataSets.html. La edad del abalón se calcula habitualmente cortando la concha y contando el número de anillos utilizando un microscopio. Es una tarea bastante laboriosa. Se pretende predecir la edad del animal utilizando distintas medidas que son más fáciles de obtener. Vemos cómo quitando un par de observaciones con un leverage alto el ajuste mejora. x <- read.table(file = "../data/abalone.dat", sep = ",") attach(x) xnam <- paste("V", 1:8, sep = "") (fmla <- as.formula(paste("y ~ ", paste(xnam, collapse = "+")))) ## y ~ V1 + V2 + V3 + V4 + V5 + V6 + V7 + V8 y <- log(x[, 9]) y.fit <- lm(fmla, data = x) summary(y.fit) ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Call: lm(formula = fmla, data = x) Residuals: Min 1Q Median -1.3791 -0.1317 -0.0159 3Q 0.1112 Max 0.8043 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.34118 0.02691 49.83 < 2e-16 *** V1I -0.09249 0.00945 -9.78 < 2e-16 *** V1M 0.00893 0.00769 1.16 0.2461 V2 0.53305 0.16700 3.19 0.0014 ** V3 1.42358 0.20560 6.92 5.1e-12 *** V4 1.20663 0.14181 8.51 < 2e-16 *** V5 0.60825 0.06696 9.08 < 2e-16 *** V6 -1.65705 0.07545 -21.96 < 2e-16 *** V7 -0.83550 0.11942 -7.00 3.1e-12 *** V8 0.60681 0.10382 5.84 5.5e-09 *** --146 ## ## ## ## ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.203 on 4167 degrees of freedom Multiple R-squared: 0.599,Adjusted R-squared: 0.598 F-statistic: 692 on 9 and 4167 DF, p-value: <2e-16 x <- x[-2052, ] attach(x) xnam <- paste("V", 1:8, sep = "") (fmla <- as.formula(paste("y ~ ", paste(xnam, collapse = "+")))) ## y ~ V1 + V2 + V3 + V4 + V5 + V6 + V7 + V8 y <- log(x[, 9]) y.fit <- lm(fmla, data = x) summary(y.fit) ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Call: lm(formula = fmla, data = x) Residuals: Min 1Q Median -1.3473 -0.1308 -0.0165 3Q 0.1104 Max 0.8001 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.30893 0.02699 48.51 < 2e-16 *** V1I -0.08984 0.00938 -9.58 < 2e-16 *** V1M 0.00823 0.00763 1.08 0.2811 V2 0.47852 0.16580 2.89 0.0039 ** V3 1.25015 0.20504 6.10 1.2e-09 *** V4 2.37198 0.19937 11.90 < 2e-16 *** V5 0.59652 0.06644 8.98 < 2e-16 *** V6 -1.62479 0.07495 -21.68 < 2e-16 *** V7 -0.89038 0.11866 -7.50 7.6e-14 *** V8 0.51045 0.10366 4.92 8.8e-07 *** --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.201 on 4166 degrees of freedom Multiple R-squared: 0.605,Adjusted R-squared: 0.605 F-statistic: 710 on 9 and 4166 DF, p-value: <2e-16 xnam <- paste("V", 1:8, sep = "") (fmla <- as.formula(paste("y ~ ", paste(xnam, collapse = "+")))) ## y ~ V1 + V2 + V3 + V4 + V5 + V6 + V7 + V8 y <- log(x[, 9]) y.fit <- lm(fmla, data = x) summary(y.fit) 147 ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Call: lm(formula = fmla, data = x) Residuals: Min 1Q Median -1.3473 -0.1308 -0.0165 3Q 0.1104 Max 0.8001 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.30893 0.02699 48.51 < 2e-16 *** V1I -0.08984 0.00938 -9.58 < 2e-16 *** V1M 0.00823 0.00763 1.08 0.2811 V2 0.47852 0.16580 2.89 0.0039 ** V3 1.25015 0.20504 6.10 1.2e-09 *** V4 2.37198 0.19937 11.90 < 2e-16 *** V5 0.59652 0.06644 8.98 < 2e-16 *** V6 -1.62479 0.07495 -21.68 < 2e-16 *** V7 -0.89038 0.11866 -7.50 7.6e-14 *** V8 0.51045 0.10366 4.92 8.8e-07 *** --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.201 on 4166 degrees of freedom Multiple R-squared: 0.605,Adjusted R-squared: 0.605 F-statistic: 710 on 9 and 4166 DF, p-value: <2e-16 Nota de R 51 (Un ejemplo de producción) Se trata de unos datos utilizados para reducir costes de producción. En concreto se pretende valorar el consumo de agua en una fábrica. Se tiene el consumo de agua en distintos meses (en galones) como variable respuesta. Las variables predictoras serı́an la temperatura media en el mes, la producción (en libras), número de dı́as que ha funcionado la fábrica durante ese mes, número de personas trabajando. Los datos han sido obtenidos de http://www.statsci.org/data/general/water.html. x <- read.table(file = "../data/agua.txt", header = T) attach(x) Ajustamos el modelo. a.lm <- lm(agua ~ temperatura + produccion + dias + personas) summary(a.lm) ## ## ## ## ## ## ## ## ## ## Call: lm(formula = agua ~ temperatura + produccion + dias + personas) Residuals: Min 1Q Median -445.0 -131.5 2.6 3Q 109.0 Max 368.5 Coefficients: Estimate Std. Error t value Pr(>|t|) 148 ## ## ## ## ## ## ## ## ## ## ## (Intercept) 6360.3373 1314.3916 4.84 0.00041 *** temperatura 13.8689 5.1598 2.69 0.01975 * produccion 0.2117 0.0455 4.65 0.00056 *** dias -126.6904 48.0223 -2.64 0.02165 * personas -21.8180 7.2845 -3.00 0.01117 * --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 249 on 12 degrees of freedom Multiple R-squared: 0.767,Adjusted R-squared: 0.689 F-statistic: 9.88 on 4 and 12 DF, p-value: 0.000896 Introducimos un término cuadrático y otro cúbico en la producción. b.lm <- lm(agua ~ temperatura + poly(produccion, 3) + dias + personas) summary(b.lm) ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Call: lm(formula = agua ~ temperatura + poly(produccion, 3) + dias + personas) Residuals: Min 1Q Median -435.9 -103.8 29.4 3Q 123.9 Max 388.4 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 8734.09 2393.47 3.65 0.0045 ** temperatura 14.52 6.52 2.23 0.0502 . poly(produccion, 3)1 2742.29 851.98 3.22 0.0092 ** poly(produccion, 3)2 208.89 337.56 0.62 0.5499 poly(produccion, 3)3 -108.68 357.64 -0.30 0.7675 dias -138.47 66.88 -2.07 0.0652 . personas -18.69 9.87 -1.89 0.0875 . --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 266 on 10 degrees of freedom Multiple R-squared: 0.779,Adjusted R-squared: 0.647 F-statistic: 5.88 on 6 and 10 DF, p-value: 0.00736 Veamos los distintos procedimientos gráficos para el diagnóstico del modelo. plot(a.lm, which = 1) 149 400 Residuals vs Fitted 6● 200 15 ● ● ● ● ● ● ● 0 Residuals ● ● ● ● −200 ● ● ● −400 ● ● 14 3000 3500 4000 Fitted values lm(agua ~ temperatura + produccion + dias + personas) plot(a.lm, which = 2) 150 2 Normal Q−Q 6● ● 1 ● ● ● ● ● ● 0 Standardized residuals ● ● ● ● ● −1 ● ● ● 17 −2 ● 14 −2 −1 0 1 Theoretical Quantiles lm(agua ~ temperatura + produccion + dias + personas) plot(a.lm, which = 3) 151 2 1.4 Scale−Location ● 14 1.2 6● 17 ● ● ● ● ● 0.8 ● ● 0.6 ● ● ● ● 0.4 Standardized residuals 1.0 ● ● 0.2 ● 0.0 ● 3000 3500 4000 Fitted values lm(agua ~ temperatura + produccion + dias + personas) plot(a.lm, which = 4) 152 Cook's distance 0.15 4 0.10 16 0.00 0.05 Cook's distance 0.20 1 5 10 15 Obs. number lm(agua ~ temperatura + produccion + dias + personas) plot(a.lm, which = 5) 153 2 Residuals vs Leverage 1 ● ● 0.5 1 ● ● ● ● ● 0 ● ● ● ● ● 1● −1 Standardized residuals 16 ● ●4 0.5 ● 1 −2 ● Cook's distance 0.0 0.1 0.2 0.3 0.4 0.5 Leverage lm(agua ~ temperatura + produccion + dias + personas) plot(a.lm, which = 6) 154 0.6 Cook's dist vs Leverage hii (1 − hii) 21.5 0.5 1 ●4 16 ● ● 0.10 Cook's distance 0.15 0.20 1● ● ● ● 0.05 ● ● 0.00 ● ● 0 0.1 ● ● 0.2 ● ● ● ● 0.3 0.4 0 0.5 0.6 Leverage hii lm(agua ~ temperatura + produccion + dias + personas) Intervalo de confianza para observaciones. predict(a.lm, interval = "prediction") ## Warning: predictions on current data refer to future responses ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 fit 3205 2750 2657 3228 3214 3529 3538 3138 3116 3283 3469 3148 2913 3367 3627 4362 3617 lwr 2521 2131 2036 2601 2563 2940 2945 2556 2526 2664 2825 2501 2309 2803 3050 3691 3026 upr 3890 3370 3278 3854 3864 4119 4132 3720 3706 3903 4113 3795 3517 3931 4203 5034 4208 155 Intervalo de confianza para la media. predict(a.lm, interval = "confidence") ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 fit 3205 2750 2657 3228 3214 3529 3538 3138 3116 3283 3469 3148 2913 3367 3627 4362 3617 lwr 2788 2451 2355 2915 2854 3299 3297 2927 2884 2984 3122 2795 2648 3212 3432 3966 3383 upr 3623 3050 2959 3540 3573 3760 3779 3349 3348 3583 3816 3501 3179 3522 3821 4758 3852 Nota de R 52 (Crı́menes) Las variables son las siguientes: Variable Description M percentage of males aged 1424 So indicator variable for a southern state Ed mean years of schooling Po1 police expenditure in 1960 Po2 police expenditure in 1959 LF labour force participation rate M.F number of males per 1000 females Pop state population NW number of nonwhites per 1000 people U1 unemployment rate of urban males 1424 U2 unemployment rate of urban males 3539 GDP gross domestic product per head Ineq income inequality Prob probability of imprisonment Time average time served in state prisons Crime rate of crimes in a particular category per head of population Se pretende predecir la variable Crime a partir de las demás. Se proponen dos modelos y se ve que no hay diferencias significativas entre ellos. x <- read.table(file = "../data/uscrime.txt", header = T) attach(x) crime.lm <- lm(Crime ~ M + So + Ed + Po1 + Po2 + LF + M.F + Pop + NW + U1 + U2 + GDP + Ineq + Prob + Time) summary(crime.lm) 156 ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Call: lm(formula = Crime ~ M + So + Ed + Po1 + Po2 + LF + M.F + Pop + NW + U1 + U2 + GDP + Ineq + Prob + Time) Residuals: Min 1Q Median -395.7 -98.1 -6.7 3Q 113.0 Max 512.7 Coefficients: Estimate Std. Error t (Intercept) -5984.288 1628.318 M 8.783 4.171 So -3.803 148.755 Ed 18.832 6.209 Po1 19.280 10.611 Po2 -10.942 11.748 LF -0.664 1.470 M.F 1.741 2.035 Pop -0.733 1.290 NW 0.420 0.648 U1 -5.827 4.210 U2 16.780 8.234 GDP 0.962 1.037 Ineq 7.067 2.272 Prob -4855.266 2272.375 Time -3.479 7.165 --Signif. codes: 0 '***' 0.001 '**' value Pr(>|t|) -3.68 0.00089 *** 2.11 0.04344 * -0.03 0.97977 3.03 0.00486 ** 1.82 0.07889 . -0.93 0.35883 -0.45 0.65465 0.86 0.39900 -0.57 0.57385 0.65 0.52128 -1.38 0.17624 2.04 0.05016 . 0.93 0.36075 3.11 0.00398 ** -2.14 0.04063 * -0.49 0.63071 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 209 on 31 degrees of freedom Multiple R-squared: 0.803,Adjusted R-squared: 0.708 F-statistic: 8.43 on 15 and 31 DF, p-value: 3.54e-07 crime.lm2 <- lm(Crime ~ M + Ed + Po1 + U2 + Ineq + Prob) summary(crime.lm2) ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## Call: lm(formula = Crime ~ M + Ed + Po1 + U2 + Ineq + Prob) Residuals: Min 1Q Median -470.7 -78.4 -19.7 3Q 133.1 Max 556.2 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -5040.50 899.84 -5.60 1.7e-06 *** M 10.50 3.33 3.15 0.0031 ** Ed 19.65 4.48 4.39 8.1e-05 *** Po1 11.50 1.38 8.36 2.6e-10 *** U2 8.94 4.09 2.18 0.0348 * Ineq 6.77 1.39 4.85 1.9e-05 *** Prob -3801.84 1528.10 -2.49 0.0171 * 157 ## ## ## ## ## ## --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 201 on 40 degrees of freedom Multiple R-squared: 0.766,Adjusted R-squared: 0.731 F-statistic: 21.8 on 6 and 40 DF, p-value: 3.42e-11 Podemos ver que no hay diferencias significativas entre ambos modelos. anova(crime.lm, crime.lm2) ## ## ## ## ## ## ## ## Analysis of Variance Table Model 1: U2 + Model 2: Res.Df 1 31 2 40 Crime ~ M + So + Ed + Po1 + Po2 + LF + M.F + Pop + NW + U1 + GDP + Ineq + Prob + Time Crime ~ M + Ed + Po1 + U2 + Ineq + Prob RSS Df Sum of Sq F Pr(>F) 1354946 1611057 -9 -256111 0.65 0.75 158 Capı́tulo 7 De cómo usar R en un tiempo razonable (no fácil, no) En este capı́tulo se incluyen algunos consejos prácticos para trabajar con R. Las posibilidades son enormes. Sin embargo, de tantas que tiene lo más probable es que el usuario ocasional no llegue a conocer ninguna de ellas. Antes lo habrá abandonado. Y con razón. Si llevas años utilizándolo con unas pocas lı́neas de código haces lo que con programas basados en menú te cuesta horas (y cuando lo vuelves a repetir te vuelve a costar horas porque tu aprendizaje no te ahorra tiempo futuro lo que en R no ası́). Pero lo de años usando algo es una utopı́a que sólo se pueden permitir unos cuantos profesores universitarios sin nada mejor que hacer y muchos horas que llenar de su importante tiempo. Cuando usamos un programa informático hay dos problemas fundamentales que, dependiendo de la persona, uno puede ser mucho mayor que el otro. Un problema es el manejo del dichoso programa. ¿Cómo se ha diseñado el interfaz? ¿Dónde han puesto tal o cual opción de la técnica? En fin, no vale la pena seguir. Se asume que un buen menú es la clave de un buen programa (sobre todo, para un usuario inexperto). En definitiva, se trata de eliminar cualquier tipo de aprendizaje (inicial o posterior) para que sea de uso inmediato. Algunas personas (entre las que me encuentro) piensan que eso no está tan claro. Se acaba pagando el pato. Lo que no pierdes (no me atreve a hablar de ganar) al principio lo pierdes más tarde. Programas como R basados en el uso de un lenguaje sencillo permiten un aprendizaje rápido y profundo. Aprendes Estadı́stica al mismo tiempo que aprendes a manejar el programa. Y, desde un punto de vista docente, es una razón importante para utilizarlo. En este capı́tulo he ido incluyendo distintas cuestiones básicas para el uso del programa. Desde el cómo conseguirlo o instalarlo hasta cómo trabajar con él. Mucho de lo que sigue se basa en mi propia experiencia. De hecho, muchos estudiantes a los que sugieres formas de trabajo, utilizan otros trucos que les resultan más útiles. Mi edad (y cerrazón mental) me impiden cada vez más adaptarme a nuevas ideas. Es importante darse cuenta de que es un programa abierto y que, fácilmente, lo puedes integrar con otras herramientas informáticas. La idea es: elige el editor que quieras. Genera las figuras en formatos distintos y utiliza el procesador de textos que se quiera. En fin, de esto vamos a tratar. 159 7.1. Instalación y cómo trabajar con R La dirección básica es http://cran.r-project.org. Allı́ se tienen tanto las fuentes como versiones compiladas para Windows, Mac y Linux. 7.1.1. R y Windows Los puntos a seguir para una instalación son los siguientes: 1. a) Traer la distribución base de cran. b) El programa se instala simplemente ejecutándolo. c) Una vez instalado en el menú principal teneis una herramienta que permite seleccionar el espejo desde traer los paquetes adicionales cómodamente. 2. Una vez instalado el programa la opción más cómoda es utilizar el programa Tinn-R. Vamos escribiendo el código en su editor y tiene muchas herramientas para interactuar con R. Es, sin duda, la mejor opción para Windows. 3. Una segunda opción es utilizar RWinEdt. Para poder usarlo hay que tener instalado Winedt. Es un programa shareware muy útil para escribir en LATEX. Una vez instalado WinEdt cargamos el paquete RWinEdt ?. 7.1.2. R y Linux Es mi opción personal de trabajo. La recomiendo definitivamente. Por Linux y porque el trabajo con R es muy cómodo. 1 Instalación 1. Para Linux hay distintas versiones compiladas que puedes encontrar en cran. 2. No es complicado compilar R a partir de las fuentes. Hay que tener la precaución de tener gfortran. 3. Cuando instalamos R en Linux hemos de instalar previamente la librerı́a BLAS. Edición con Emacs y ESS En Linux sin duda la mejor opción de trabajo es utilizar Emacs con el paquete Emacs Speaks Statistics (ESS) 2 . ¿Cómo trabajamos con Emacs y ESS? 1. 2. 3. 4. 7.2. Abrimos el fichero R con emacs. Abrimos una nueva ventana (mejor separada) con CTRL x 52. En la nueva ventana marcamos el icono de R. Utilizamos la ventana donde está el código para editar y podemos usar los distintos controles que nos dá el menú ESS de emacs podemos trabajar muy cómodamente. ¿Cómo instalar un paquete? Supongamos que queremos instalar el paquete UsingR ?. install.packages{``UsingR''} 1 Imagino a un usuario de Windows tı́pico sonreir ante la afirmación anterior. Me alegro de que pueda sonreir después de los lloros continuos usando esa cosa llamada Windows (que no sistema operativo). 2 La mejor opción es acudir a la página de los paquetes binarios y buscar en la distribución correspondiente donde teneis el paquete 160 7.3. ¿Cómo fijar el directorio de trabajo? Empezamos una sesión de R y todo nuestro trabajo (datos, código R) lo tenemos en un directorio. Hemos de tener un acceso cómodo a estos ficheros. ¿Cómo hacerlo? En Linux no hay problema. Simplemente con la cónsola nos vamos al directorio correspondiente y ejecutamos R. Automáticamente hemos fijado el directorio de trabajo como aquél en que iniciamos el programa. En Windows lo recomendable es utilizar el menú y cambiar el directorio al de trabajo. Yo recomiendo una vez hecho esto ejecutar: getwd() Nos devuelve todo el camino hasta dicho directorio. Lo que nos devuelve esta función (por ejemplo C: Mis documentos ad prog) lo ponemos entre comillas dobles y ejecutamos setwd("C:\ Mis documentos\ ad\ prog") De este modo hemos fijado el directorio de trabajo. 7.4. Etiquetas de valor y de variable Para denotar una variable utilizamos siempre una expresión breve y simple. Sin embargo, es conveniente que la variable tenga una etiqueta explicativa del significado de la variable. Dicha etiqueta ha de ser clara y no muy larga. 7.4.1. ¿Cómo etiquetar una variable? Supongamos que la variable a etiquetar es x en el data frame datos. Usamos la librerı́a ?. library(Hmisc} label(datos$x) = "Ejemplo de etiqueta" 7.5. Elaboración de un informe a partir del código R Una vez hemos analizado un banco de datos hemos de elaborar un informe. Normalmente nos va a llevar más tiempo esta segunda parte que la primera. 7.5.1. Sweave Es conveniente consultar esta página. Un documento de gran utilidad dónde ver la utilización de Sweave es este tutorial. 7.6. R y Octave/Matlab Es frecuente que un usuario de Octave/Matlab utilice R. En este enlace y en este teneis tablas de equivalencia entre los comandos en ambos programas. También se puede encontrar en http://mathesaurus.sourceforge.net/matlab-pythonxref.pdf una tabla de equivalencias entre Matlab/Octave, Python y R. 161 162 Bibliografı́a H. Abdi and L. J. Williams. Principal component analysis. Wiley Interdisciplinary Reviews: Computational Statistics, 2(4):433–459, 2010. URL /home/gag/ BIBLIOGRAFIA/REPRINTS/AbdiWilliams10.pdf. C.L. Blake D.J. Newman, S. Hettich and C.J. Merz. UCI repository of machine learning databases, 1998. URL http://www.ics.uci.edu/$\sim$mlearn/ MLRepository.html. E.R. Dougherty. Probability and Statistics for the Engineering, Computing and Physical Sciences. Prentice Hall International Editions, 1990. R.A. Fisher. The analysis of covariance method for the relation between a part and the whole. Biometrics, 3:65–68, 1947. L. Kaufman and P.J. Rousseeuw. Finding Groups in Data. An Introduction to Cluster Analysis. Wiley, 1990. C.R. Rao. Linear Statistical Inference and Its Applications. Wiley, 1967. J. Verzani. Using R for Introductory Statistics. Chapman & Hall / CRC, 2005. 163