You are on page 1of 163

1

Análisis de datos con R

2
Guillermo Ayala Gallego

26 de marzo de 2014

1
Uno más.
2
.
2
Índice general

1. Probabilidad: lo bueno si . . . 9
1.1. Experimento y probabilidad . . . . . . . . . . . . . . . . . . . . . . . 9
1.2. Variable aleatoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.1. Función de distribución . . . . . . . . . . . . . . . . . . . . . 11
1.2.2. Media y varianza . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.3. Teorema de Bayes . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3. Vectores aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4. Distribución normal multivariante . . . . . . . . . . . . . . . . . . . 20

2. Un muy breve repaso a la Estadı́stica 25


2.1. Algo de Estadı́stica Descriptiva, poco . . . . . . . . . . . . . . . . . 25
2.2. Verosimilitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3. Estimación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3.1. Estimación insesgada de media y varianza . . . . . . . . . . . 29
2.3.2. Estimación insesgada del vector de medias y la matriz de co-
varianzas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.4. Estimador máximo verosı́mil . . . . . . . . . . . . . . . . . . . . . . 32
2.5. Contraste de hipótesis . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.5.1. Test del cociente de verosimilitudes . . . . . . . . . . . . . . 35
2.5.2. Test de Wald . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.5.3. Intervalos de confianza . . . . . . . . . . . . . . . . . . . . . 35

3. Componentes principales 37
3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.2. Componentes principales . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3. Componentes principales de los datos golub . . . . . . . . . . . . . . 45
3.4. Un poco de teorı́a ⇑ . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

4. Análisis cluster 51
4.1. Algunos ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.2. Disimilaridades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.2.1. Disimilaridades entre observaciones . . . . . . . . . . . . . . 55
4.2.2. Disimilaridades entre grupos de observaciones . . . . . . . . 58
4.3. Cluster jerárquico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.4. Métodos de particionamiento . . . . . . . . . . . . . . . . . . . . . . 65
4.4.1. Método de las k-medias . . . . . . . . . . . . . . . . . . . . . 65
4.4.2. Particionamiento alrededor de los mediodes . . . . . . . . . . 70
4.5. Silueta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.6. Un ejemplo completo . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

3
5. Análisis discriminante o de cómo clasificar con muestra de entre-
namiento 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 desconoci-
dos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 103
6.1. Regresión lineal simple . . . . . . . . . . . . . . . . . . . . . . . . . . 106
6.2. Regresión lineal múltiple . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.3. Estimación de β . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.4. Algunos casos particulares . . . . . . . . . . . . . . . . . . . . . . . . 110
6.5. Verosimilitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.6. Algunos ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.7. Distribución muestral de β̂ . . . . . . . . . . . . . . . . . . . . . . . 114
6.8. Bondad de ajuste . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.9. Valoración de las hipótesis del modelo . . . . . . . . . . . . . . . . . 116
6.10. Inferencia sobre el modelo . . . . . . . . . . . . . . . . . . . . . . . . 134
6.11. Selección de variables . . . . . . . . . . . . . . . . . . . . . . . . . . 140
6.11.1. Procedimientos que comparan modelos . . . . . . . . . . . . . 140
6.11.2. Procedimientos basados en criterios . . . . . . . . . . . . . . 143
6.12. Algunos ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

7. De cómo usar R en un tiempo razonable (no fácil, no) 159


7.1. Instalación y cómo trabajar con R . . . . . . . . . . . . . . . . . . . 160
7.1.1. R y Windows . . . . . . . . . . . . . . . . . . . . . . . . . . 160
7.1.2. R y Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
7.2. ¿Cómo instalar un paquete? . . . . . . . . . . . . . . . . . . . . . . . 160
7.3. ¿Cómo fijar el directorio de trabajo? . . . . . . . . . . . . . . . . . . 161
7.4. Etiquetas de valor y de variable . . . . . . . . . . . . . . . . . . . . . 161
7.4.1. ¿Cómo etiquetar una variable? . . . . . . . . . . . . . . . . . 161
7.5. Elaboración de un informe a partir del código R . . . . . . . . . . . 161
7.5.1. Sweave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
7.6. R y Octave/Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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ı́sti-
cos 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 com-
pensació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 ope-
rativa 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á ı́nti-
mamente 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.r-
bloggers.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 con-


junto 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 2 6 26 2 7

1.2. 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 dis-
tintos 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 . Obvia-
mente 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 pro-
porció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.6)

1.2.2. Media y varianza


Una variable suele describirse de un modo simple mediante su media y su va-
rianza. La media nos da una idea de alrededor de qué valor se producen los va-
lores aleatorios de la variable mientras que la varianza cuantifica la dispersión
de estos valores alrededor de laPmedia. Se definen para variables discretas co-
mo: 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 lapvarianza 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 susti-
tuyendo
R +∞ sumatorios por integrales, de modo que la media se define
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 pro-
babilidad 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 gene-
rar 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
Cuadro 1.1: Distribuciones discretas
Distribución Función de probabilidad Media Varianza
Bernoulli f (x|p) = px (1
 − p)
1−x
si x = 0, 1 p p(1 − p)
n
Binomial f (x|n, p) = px (1 − p)n−x si x = 0, 1, . . . , n np np(1 − p)
x  
A  B 

12

x n−x nA nAB(A+B−n)
Hipergeométrica f (x|A, B, n) =   si x = 0, . . . , n. A+B (A+B)2 (A+B−1)

A+B 
n
1−p 1−p
Geométrica f (x|p) = p(1 − p)x si x = 0, 1, 2, . . . p p2
 
r+x−1 r(1−p) r(1−p)
Binomial Negativa f (x|r, p) = pr (1 − p)x si x = 0, 1, 2, . . . p p2
x
e−λ λx
Poisson f (x|λ) = x! si x = 0, 1, . . . λ λ
Cuadro 1.2: Distribuciones continuas
Distribución Función de densidad Media Varianza
1 α+β (β−α)2
Uniforme f (x|α, β) = β−α si α < x < β 2 12
1 x−µ 2
2
Normal, N (µ, σ 2 ) f (x|µ, σ 2 ) = σ√12π e− 2 ( σ ) x ∈ R µ σ
βα α α
Gamma Ga(α, β) f (x|α, β) = Γ(α) xα−1 e−βx si x > 0 a β β2
1 2
Exponencial Expo(λ) f (x | λ) = λ exp − λx si x ≥ 0 λ λ
Ji-Cuadrado χ2 (ν) X ∼ χ2 (ν) si X ∼ Ga( ν2 , 12 ) ν 2ν

13
Γ(α+β) α−1 α αβ
Beta Be(α, β) f (x|α, β) = Γ(α)Γ(β) x (1 − x)β−1 si 0 < x < 1 α+β (α+β)2 (α+β+1)
  − ν+1
2
Γ( ν+1
2 ) x2 ν
t-Student t(ν) f (x) = √νπΓ( ν 1 + ν ∀x ∈ R 0 si ν > 1 ν−2 si ν > 2
2)
Γ( m+n ) m/2−1 2n2 (m+n−2)
2 m/2 n/2 x n
F-Snedecor F (m, n) f (x) = Γ( m )Γ( n m n (mx+n) (m+n)/2 si x > 0 (n−2) si n>2 m(n−2)2 (n−4) si n > 4
2 2)
−α α−1 x α β 1 β2 2 1 2 1
Weibull(α, β) f (x | α, β) = αβ x exp −( β ) si x > 0 α Γ( α ) α (2Γ( α ) − α Γ ( α ))
2 X 2
Lognormal X ∼ N (µ, σ ) → e ∼ LN (µ, σ )
a La
R +∞
función gamma se define como Γ(α) = 0 xα−1 exp{−x}dx, que existe y es finita ∀α > 0
De hecho podemos ver la forma que tiene esta función de probabilidad para todos
los valores posibles.

plot(dbinom(0:10, size = 10, prob = 0.23), xlab = "")


0.30


0.25


dbinom(0:10, size = 10, prob = 0.23)


0.20
0.15


0.10


0.05


0.00

● ● ● ●

2 4 6 8 10

Es interesante ver cómo se modifica la forma de la función de probabilidad cuan-


do 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
1 2
0.25

1 2
dbinom(0:10, size = 10, prob = 0.23)

1 2
0.20
0.15

1 2
0.10

1 2
0.05

1
2

2 1
0.00

2 2 2 2 1 1 1 1

2 4 6 8 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
stepfun(0:10, c(pbinom(0:10, size = 10, prob = 0.23), 1))

1.0 ●
● ● ● ● ● ●


0.8
0.6


f(x)

0.4


0.2

0 2 4 6 8 10

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 4.424e-04 1.770e-03 5.309e-03 1.274e-02 2.548e-02 4.368e-02


## [9] 6.552e-02 8.736e-02 1.048e-01 1.144e-01 1.144e-01 1.056e-01 9.049e-02 7.239e-02
## [17] 5.429e-02 3.832e-02 2.555e-02 1.614e-02 9.682e-03 5.533e-03 3.018e-03 1.574e-03
## [25] 7.872e-04 3.779e-04 1.744e-04 7.751e-05 3.322e-05 1.375e-05 5.498e-06 2.128e-06
## [33] 7.982e-07 2.902e-07 1.024e-07 3.512e-08 1.171e-08 3.797e-09 1.199e-09 3.689e-10

16
## [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 mo-


dificando 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

1 1
0.10

1
1
0.08

22
2 2
dpois(0:60, lambda = 12)

1 2 2
1 2
0.06

1 2
2

1 2
0.04

2
1
2
2
2
1 1
0.02

2 2
2 1 2
1 2
2 1
1 2
1 2 22
2 11
0.00

1 222 22222222222222222222222
1111111111111111111111111111111111111
111
222222222

0 10 20 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 8 16 9 12 13 11 12 9 11 9 17 17 6 12 12 12 14 15 14 18 10 15 12 20 9 9 13
## [29] 13 7 20 10 8 11 14 16 6 10 15 14 11 14 10 10 7 10 11 13 9 16

17
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] 6.144e-06 7.373e-05 4.424e-04 1.770e-03 5.309e-03 1.274e-02 2.548e-02 4.368e-02


## [9] 6.552e-02 8.736e-02 1.048e-01 1.144e-01 1.144e-01 1.056e-01 9.049e-02 7.239e-02
## [17] 5.429e-02 3.832e-02 2.555e-02 1.614e-02 9.682e-03 5.533e-03 3.018e-03 1.574e-03
## [25] 7.872e-04 3.779e-04 1.744e-04 7.751e-05 3.322e-05 1.375e-05 5.498e-06 2.128e-06
## [33] 7.982e-07 2.902e-07 1.024e-07 3.512e-08 1.171e-08 3.797e-09 1.199e-09 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 mo-


dificando 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

1 1
0.10

1
1
0.08

22
2 2
dpois(0:60, lambda = 12)

1 2 2
1 2
0.06

1 2
2

1 2
0.04

2
1
2
2
2
1 1
0.02

2 2
2 1 2
1 2
2 1
1 2
1 2 22
2 11
0.00

22222222222222222222222
1111
222222222222 1111111111111111111111111111111111111

0 10 20 30 40 50 60

Los cuantiles obtenidos como inversa de la función de distribución se obtienen


con qpois.

18
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 6 7 12 10 14 13 15 12 17 10 10 12 7 10 16 16 5 6 11
## [29] 11 15 14 6 13 13 13 10 14 8 13 12 7 11 17 14 18 18 11 14 14 20

1.2.3. 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 (1.7)
j=1 P (A | Bj )P (Bj )

1.3. 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 Z bd
P (a1 ≤ X1 ≤ b1 , . . . , ad ≤ X1 ≤ bd ) = ... f (x1 , . . . , xd )dx1 . . . dxn , (1.8)
a1 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

 
µ1
µX =  ... 
 

µ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
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 correla-
ciones 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 ρ12 ... ρ1d
 .. .. .. .. 
Pρ =  . . . . 
ρd1 ρd2 ... 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.11)

1.4. 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
f (y|µ, Σ) = d 1 exp − (y − µ) Σ (y − µ) , (1.12)
(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 indepen-


dientes 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)   (1)   
Y µ Σ11 Σ12
Y = , µ = (2) , Σ= ,
Y (2) µ Σ21 Σ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 .

6. La distribución condicionada de Y (2) , dado Y (1) = y (1) es Nd2 (µ(2) +Σ21 Σ−1
11 [y
(1)

µ(1) ], Σ22,1 ) donde Σ22,1 = Σ22 − Σ21 Σ−1 Σ
11 12 .

Una segunda manera en que podemos definir la distribución normal multiva-


riante 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)
Z

22
1.0
0.8

6
6
4
4

8
8

8
2

8
8
0.6

10
10

10

10

10

10

10

10
10
2

8
4
4

10

10
4

4
2

10
4

12
10
8
6

10

10

6
10

12
6

6
8
4
10

6
8

12
0.4

8
8
4

12
12
8

10
6 8

6 8
8

10
8
6
8

10
8

10 8
8
8

10
6

6
8

10

10
8

4
6

12
6

6
8
6

12
6

10
4

10
6
4

6
4
4

12
0.2

10
8
6
4

10
8
6

12
2

8
−2

6
0.0

0.0 0.2 0.4 0.6 0.8 1.0

¿Cómo generar valores normales multivariantes? Consideramos el vector de me-


dias 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 median-
te 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" "eg1" "d1" "t1" "s1"


## [6] "score2" "eg2" "d2" "t2" "s2"
## [11] "score3" "eg3" "d3" "t3" "s3"
## [16] "score4" "score5" "especialidad" "intensidad" "tipoanes"
## [21] "asa" "sexo" "T.TOTALP" "T.QUIRUR" "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 especia-
lidad o tipoanes (tipo de anestesia), otras son ordinales como score, score2, score3,
. . . mientras que otras son continuas como T.TOTALP o T.QUIRUR. Es intere-
sante utilizar la función extractora summary sobre un data frame.

summary(scoremaster)

## score eg1 d1 t1 s1 score2 eg2 d2 t2


## 3: 13 0: 18 0: 18 0: 50 0: 17
3 : 7 0 : 27 0 : 36 0 : 11
## 4: 89 1:545 1:360 1:359 1:307
4 : 33 1 :377 1 :359 1 : 59
## 5:199 2:359 2:544 2:513 2:598
5 :133 2 :359 2 :366 2 :691
## 6:276 6 :234 NA's:159 NA's:161 NA's:161
## 7:219 7 :192
## 8:126 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. Median Mean 3rd Qu. Max.


## 900 6060 8790 9880 12400 35200

26
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 Plexo CAM
## 746 108 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

barplot(table(tipoanes))
700
600
500
400
300
200
100
0

General Plexo CAM

2.2. 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 an-


terior 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
n
Y
LY (θ; y) = fY (y) = fYi (yi ),
i=1

y
n
X n
X
ly (θ; y) = log fYi (yi ) = LYi (θ; yi ).
i=1 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
Pn Pn
yi
L(θ; y) = θ i=1 (1 − θ)n− 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. En-
tonces 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 uti-
lizado para estimar µ = EYi es la media muestral dada por
n
1X
Ȳ = Yi . (2.6)
n i=1

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
1 X
S2 = (Yi − Ȳ )2 . (2.7)
n − 1 i=1

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
n
X n
X
E [(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,


n
X σ2
E (Yi − Ȳ )2 = nσ 2 − = nσ 2 − σ 2 = (n − 1)σ 2 ,
i=1
n

de donde,
n
1 X
ES 2 = E (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 score-
master.

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 estima-
dores 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  
Y1 Y11 . . . Y1d
Y =  ...  =  ... .. .. 
  
. . 
Yn0 Yn1 ... Ynd

mientras que los datos observados, la matriz de datos, vendrı́a dada por
 0  
y1 y11 . . . y1d
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 co-


varianzas muestral que tiene en la posición (j, k) la covarianza muestral entre las
componentes j y k,
n
1 X
Sjk = (Yij − Ȳ·j )(Yik − Ȳ·k ),
n − 1 i=1

de modo que

 
S11 ... S1d n
 .. .. ..  = 1 X 1
S= . . .  (Yi − Ȳ )(Yi − Ȳ )0 = Q.
n − 1 i=1 n−1
Sd1 ... Sdd

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 n
X n
X
0 0
(Yi − Ȳ )(Yi − Ȳ ) = (Xi − X̄)(Xi − X̄) = Xi Xi0 − nX̄ X̄ 0 .
i=1 i=1 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
n
X Σ
EQ = cov(Yi ) − n cov(Ȳ ) = nΣ − n cov(Ȳ ) = nΣ − n = (n − 1)Σ.
i=1
n

31
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
rjk = qP i=1 =p (2.10)
n
(Y − Ȳ ) 2
Pn
(Y − Ȳ )2 Sjj Skk
i=1 ij ·j i=1 ik ·k

Denotaremos por R la matriz de correlaciones muestrales R = [rjk ].

Nota de R 8 (Matrices de covarianza y correlación muestrales) Vamos a es-


timar 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)


θ∈Θ

o también
θ̂ = argmaxθ∈Θ L(θ), (2.12)

32
Pn
xi
Ejemplo 5 (Bernoulli) Se puede comprobar sin dificultad que p̂ = i=1
n .

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)

Ejemplo c2 = n−1 S 2 =
6 (Normal) En este caso se comprueba que µ̂ = X̂n y que σ
Pn n
1 2
n i=1 (Xi − X̄nq
) . Teniendo en que cuenta la propiedad enunciada en 2.13 ten-
dremos que σ̂ = n−1 2
n S .

En muchas situaciones la función L(θ) es cóncava y el estimador máximo ve-


rosı́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), (2.16)
y

La ecuación de verosimilitud serı́a

∂l(p) y n−y y − np
= − = . (2.17)
∂p p 1−p p(1 − p)

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

∂ 2 l(p)
   
y n−y n
−E 2
=E 2 + 2
= . (2.18)
∂p p (1 − p) p(1 − p)

En consecuencia asintóticamente p̂ tiene varianza p(1−p)


n lo cual era de prever pues
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.

H0 H1
Rechazamos H0 Error tipo I
No rechazamos H0 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 to-
mamos 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:

H0 :µ = µ0 , (2.22)
H1 :µ 6= µ0 . (2.23)
Pn 2
i=1 (Xi −X̄)
Siendo S 2 = n−1 , el estadı́stico habitualmente utilizado es el siguiente

X̄ − µ0
T = √ .
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(θ)
Λ= (2.24)
máxθ∈Θ L(θ)

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 re-
chacemos 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
Λ= L L1 y
0

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óte-
sis 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ámos-


lo con un ejemplo y luego planteamos la situación más general. Tenemos una mues-
tra aleatoria X1 , . . . , Xn i.i.d. tales que Xi ∼ N (µ, σ2). Entonces es conocido que

X̄n − µ
√ ∼ tn−1 . (2.30)
S/ n

35
−µ
Vemos cómo X̄ n√
S/ n
depende tanto de la muestra que conocemos como de un paráme-
tro (la media µ) que desconocemos. Fijamos un valor de α (habitualmente tomare-
mos α = 0,05) y elegimos un valor tn−1,1−α/2 tal que

X̄n − µ
P (−tn−1,1−α/2 ≤ √ ≤ tn−1,1−α/2 ) = 1 − α. (2.31)
S/ n

La ecuación anterior la podemos reescribir como


S S
P (X̄n − tn−1,1−α/2 √ ≤ µ ≤ X̄n + tn−1,1−α/2 √ ) = 1 − α. (2.32)
n n

Tenemos una muestra aleatoria X1 , . . . , Xn y por lo tanto tenemos un intervalo alea-


torio 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 con-
tener 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 significa-
ció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 α. Es-
te 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 : < Z1−α/2 } (2.34)
SE(θ̂)

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é sig-
nifica 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 cen-
tenares 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 ●


1.0
0.5


golub.red[,2]



0.0

●●

−0.5


−1.0


−1.5

−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
CCND2 Cyclin D2
1.5

CCND3 Cyclin D3
1.0
Segunda muestra

0.5

Cyclin−selective ubiquitin carrier protein mRNA

CDK6 Cyclin−dependent kinase 6


CDK2 Cyclin−dependent kinase 2
0.0

Cyclin G2 mRNA

Cyclin−dependentkinase
CDKN1A Cyclin−dependent kinaseinhibitor
4 (CDK4)1Agene
(p21, Cip1)
Cyclin G1 mRNA
−0.5

CCNH Cyclin H
−1.0

Cyclin
CCNFA1Cyclin
mRNA F
−1.5

−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 =
i=1
n
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


1.0
0.5


golub.red[,2]



0.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 ge-


nes. 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 elegi-
mos? 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 proyec-
ciones 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 proyecta-
mos.


1.5


1.0
0.5


golub.red[,2]



0.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 ●


1.0
0.5


golub.red[,2]



0.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


1.0
0.5


golub.red[,2]



0.0

●●

−0.5


−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 ●


1.0
0.5


golub.red[,2]



0.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)

## PC1 PC2
## [1,] -2.50309 -1.542e-01
## [2,] 0.01369 -2.024e-01
## [3,] -2.38702 3.714e-03
## [4,] 0.33490 -6.847e-05
## [5,] 0.76608 2.806e-01
## [6,] 0.27145 2.900e-02
## [7,] 0.31170 -2.876e-01
## [8,] 2.22052 -8.232e-02
## [9,] -0.93221 1.837e-01
## [10,] -0.39946 -7.240e-03
## [11,] 0.08294 3.192e-01
## [12,] 2.22052 -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 va-


riació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é ne-


cesitamos 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 componen-
tes nos quedamos.

1. Uno puede ser la proporción total explicada. Fijar un nivel mı́nimo y quedar-
nos 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 compo-
nentes. 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 que-
damos 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 PC4 PC5 PC6 PC7 PC8 PC9


## -7.037558 -1.611153 -0.580508 0.008742 0.538498 0.217864 0.095230 -0.918847 0.512902
## PC10 PC11 PC12 PC13 PC14 PC15 PC16 PC17 PC18
## 0.863368 -0.199101 -0.661874 0.098494 1.167026 -0.080884 0.019310 0.311826 -0.734193
## PC19 PC20 PC21 PC22 PC23 PC24 PC25 PC26 PC27
## 0.484427 -0.413978 0.861061 0.412109 -0.169220 -0.042500 0.392160 -0.810611 -0.724087
## PC28 PC29 PC30 PC31 PC32 PC33 PC34 PC35 PC36
## -0.022861 -0.267373 0.223251 0.004499 -0.066890 -0.420015 0.043023 0.325942 -0.095873
## PC37 PC38
## 0.451057 0.873975

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


●●●
●● ●●●● ●● ● ●
●● ● ●
● ● ●
● ●● ●● ●
● ● ●●●● ●● ●●●
● ●
●●●●● ●● ● ● ●
● ●

●●
● ●
● ●●●● ●●● ● ●●
●● ● ●
● ● ● ●

●●● ●● ● ●● ●
●●● ●● ●
●● ●●●●●●●
●●●● ● ●●●●●●● ●● ●● ●● ●● ● ●●●●●


● ● ●● ●●
●●

● ●
● ● ●● ●●

● ●
●● ● ● ● ● ● ● ●● ● ●●● ●● ● ● ● ● ●
● ●●●●● ●● ●
●● ● ●●
● ●●
●● ● ●● ●
●● ●● ●
●●● ●● ●● ● ●●● ● ●● ●● ● ●

●●
●● ●●●
● ● ● ●●
●●●
●●

● ●●●●●●
● ● ●● ● ●● ●●●● ● ●● ●●


●● ●






●●

●●●


●●●
●●
● ●●


●●





●●●

● ●●


●●●●
●●
●●

●●
●●
●●●●●●●● ●●


●●●●●●●
● ●●● ●●●●●●●●
● ●● ● ● ● ●


● ●● ●

● ● ● ● ●
Segunda componente

● ●●● ●● ● ● ● ● ●●●●● ●
●●● ●● ●
●●●●●● ● ●● ● ● ● ●
●●
● ● ●
● ●●●●●●
●●
●●●●● ●●●●●●●●●●
●●
●● ●●●● ●●● ●●
● ●
●●
● ●● ●●●● ●● ●●●●
●●●●●● ● ●


●●●

● ●
●●●●
●●
●●●


●●


●● ●
●●●●
●●
●●

●●●


●●


●●●
●●●
● ●●
●●
●●●●●


●●
● ●●●




●●●






●●
●●●
●●●

● ● ●● ●●
●●
● ●
●●

● ●
●●

● ●●● ●

● ● ●●
● ●
● ●● ●●● ●

●●
● ●
● ●
●●●●● ●●●●● ● ● ● ●● ●●● ●
●●● ● ●

●●● ●
●●● ●
●●● ●
● ●●●
●● ●
●●●●
● ●● ● ●●●●● ●● ● ●● ●
●●● ●●●
●● ●●●
●● ●●●
● ●● ●
● ●● ●
●●● ●
● ●
● ●● ● ●●● ●● ●● ● ●●● ●●● ●●
●● ●●
●● ●●●●● ● ●● ● ●



●●●
●●
●●
●●●●●● ●●
●●●●●
●● ●●●●● ●●●●●

●●
●●

●●
●●

●●●
● ●●●●●
●●●
●●
●●


●● ●
●●

●●
●●
●● ●

●●●

● ●


●●●●●●● ●●●● ●
● ● ● ●● ●● ●●● ● ●●
●●●● ● ●●●

●●
●●
●●●●
●●●
● ●
●●
●●●●●● ●●
●● ●

●●●
● ●● ●●● ●●
● ●
●●
● ●

●●

●●●●●

●●

● ●●

●●●●
●● ●
●● ●●●●

●●●
●●●
●●●
● ● ●●●●
● ●●
●●
●●

●● ● ●

● ●●
●●●
● ●●●●●● ●
● ● ●







●●


●●


●●


●●

●●


● ●



●●● ●

●●





●●
●●






●●●




●●

●●
●●






●●
●●●







●●





●●















●●●

●●


●●●







● ●
●●
●●



●●

●●
●●●●
●●●●
● ●
●●



●●

● ●
●●●●
●●●





●●




●●

●●●●


●●

●●●●●●●●●
● ●

●● ● ●●● ●●
● ● ● ●
0


●●●
● ●
●● ●●● ●●
● ●
●●●● ● ●
●● ●●●
● ●●
● ●●●●


● ●
●●
●●

●●●
●● ● ●●

●●●●●●
●●●●● ● ●
●●●
●●●● ● ●
●●● ●● ● ● ● ●●
●● ● ● ● ●●
● ●●●●
● ● ● ●●

●●
●●

●●
●●
●●●
●●●

●●●●●●●
● ●





●●●●
●●
●●●●●

●●
●●


● ●



●●
●●●
●●
●●


●●●


●●
●●
●●




●●

●●

●●

● ●
●●
●●
●●


●●●●

●●
●●●
●●●●●
●● ●●




●●
● ●


●●

● ● ●●
●●●

●●
●●●●
● ● ●●● ●● ● ●●● ●● ● ● ● ●

●●●●
● ●●
●●
●●●●●●●●●●
● ●
● ●●●
●●
●●
● ● ●●●●
●●●● ●
●●●

●●●
●●
●●

●●
●●●
●●
●●●
●●●
●●
●●

●●●


●● ●
●●●●●● ●
●●
● ●●●●
● ● ●

●●●

●●
●●●●
●●●●● ●
●●●●
● ●●● ● ● ● ● ● ● ● ●●


● ● ●● ● ● ●● ● ●●●●●
● ● ●● ● ●
●● ●● ● ●● ● ● ●● ●● ● ●●● ● ●
●●
● ●
●●●●
● ●
●● ● ●●
●●●●● ● ●●●
● ●● ●● ●●● ●
●●●
●●●●

● ●
●●
●●●
●●●
●●

●●
●●

●●● ●
●●●● ●●
● ●●
● ●
●●●●
●●
● ●●
● ●●●
● ●

●●
●●●●●● ●●
● ●●●●● ● ●●●● ●
● ● ● ●● ● ● ●● ● ●● ●●
●●
● ●●
●●●
● ●●

●●●




●●
●●●
●●●
● ●
●● ●
●●●
●●
●●●





●●
●●●●●●

●●
●●

●●

●●
●●●
●●
●●

●●●●


●●
●●



●●●
●●



●●●
●●●●●
●● ●

●●
●●●
●●●●●
●●


●●●● ●●
●●●
●●●● ●●●
● ●●● ●● ● ● ●● ●● ● ●
● ● ● ●
● ● ● ●
● ●●
●●
●●


●●

●●

●●●
●●
●●
● ●
●●●● ●
●●●



●●
●●



●●●●





●●







●●●●






●●●●










●●● ●




●●


●● ●
● ●●●
●●
● ●●●●


●●
●●●




●●●
●●●●● ●
● ●●●●● ● ●●
● ● ●● ● ●● ●


●●●●● ● ●●●
●● ●● ●●●● ●● ● ●●
● ●● ●● ●

●●● ●●● ●● ●● ●
●● ● ●● ●
● ● ● ● ●
●●
●●●●●
●●●● ●● ●●
●●●
● ●●
● ●●●●● ●●

● ●
●●

●● ● ●●● ●●●●
● ● ●● ●●●● ●
●● ●●●●
●●
●● ●
●●
●●●
● ●●
● ● ●●● ● ●●● ●●● ●● ●●
●●


● ●
●●
●●●●● ●● ●●●●● ●●● ● ●●
●● ● ● ●●● ●● ●● ● ● ● ● ● ●● ● ● ● ●
●●

●● ● ●●● ●● ● ● ● ● ● ● ●●


● ● ● ● ● ● ●
●● ● ● ●
●●● ● ● ● ● ●
● ● ● ●●●●● ● ●●● ●●● ● ● ● ● ●● ● ●● ●
●●
● ●

● ● ●●● ● ● ● ● ● ●● ● ●
●●● ● ● ● ●● ● ●● ●
●● ●● ●
●●● ● ● ●●● ● ● ●
●● ●● ●●●
● ● ●

●● ● ● ● ● ● ● ●

● ● ●● ● ● ● ● ●
● ● ● ● ● ●
● ● ● ●●
−5


● ● ● ● ●

● ●


−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 prime-
ros 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 experi-
mentales 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 razo-
nable 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
p Yj la llamamos la j-ésima componente principal de
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áxi-
mo λ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 co-
rrespondiente 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 preci-
samente que obtenemos resultados distintos si utilizamos las componentes principa-
les 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 prin-
cipales. 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 con la matriz Pd de covarianzas
PdΣ. Hemos
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
Pd , con k = 1, . . . , d,
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 Wi-
lliams [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 tie-
nen 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 entrena-
miento. ¿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 parti-
cionamiento. 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 co-


rrespondientes a distribuciones bivariates normales. La matriz de covarianzas va-
mos 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 ge-
nerar 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. No-
sotros 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 co-
nocidos, 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

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 da-
tos.

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 ex-
presiones 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. Disimilaridades
4.2.1. 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 dis-
tancia de Manhattan. Para dos vectores x e y (en Rd ) entonces la distancia euclı́dea
se define como v
u d
uX
d(x, y) = t (xk − yk )2 , (4.1)
k=1
d
con x, y ∈ R . La distancia de Manhattan viene dada por
d
X
d(x, y) = |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áneamen-
te considerados. Es lo habitual. Una variable binaria la codificamos habitualmente
como 1 y 0 indicando presencia o ausencia del atributo que estemos consideran-
do. 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ı́sti-
cas 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 carac-
terı́sticas que tienen una mayor diferencia. Se han propuesto distintas medidas de
disimilaridad entre variables cualitativas (binarias simétricas o asimétricas, cuali-
tativas, 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 natu-
ral 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 B A+B
0 C D C+D
A+C B+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 situa-
ciones 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 bina-
rias simétricas es natural utilizar como disimilaridad el coeficiente de acoplamiento
simple definido como
B+C A+D
d(i, j) = =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
B+C A
d(i, j) = =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−u
d(i, j) = .
d
Finalmente veamos cómo tratar las variables ordinales. Lo que haremos para va-
riables 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
xik − 1
yik =
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 cate-
gorı́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
d(i, j) = Pd (k)
, (4.3)
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) |xik − xjk |
dij =
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 va-
riable 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 ori-
ginales de la muestra. Algunos de los procedimientos de agrupamiento que vamos
a considerar en lo que sigue no necesitan conocer los datos originales. Pueden apli-
carse 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) va-
mos a necesitar calcular disimilaridades entre conjuntos disjuntos de las observa-
ciones originales. Estas disimilaridades las podemos calcular a partir de las disi-
milaridades 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 denota-
mos 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 disimi-
laridades 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 d(a, b)


a∈A,b∈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.
1 X
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 repre-
sentació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 si-
multá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 obteni-
dos de esta página. Tenemos cuatro variables que nos dan las puntuaciones obte-
nidas 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
Dendrogram of agnes(x = y)
3.0
2.5
2.0
Height

1.5
1.0

10
13
25
0.5

9
3
7
2

23
16
0.0

11
17
1

12
19
5
21
8
18

4
22
15
14
20

6
24

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 clus-


ter jerárquico. Los datos son los porcentajes de votas que recibió el candidato repu-
blicano 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
Height

0 20 40 60 80

Alabama
Georgia
Arkansas
Louisiana
Mississippi
South Carolina
Alaska
Vermont
Arizona
Montana

plot(agn2, which = 2)
Nevada
Colorado
Idaho
Wyoming
Utah
California
Oregon
Washington
Minnesota
Connecticut

lo de las disimilaridades entre grupos.


New York
New Jersey
Illinois

62
Ohio
Indiana
Michigan
Pennsylvania
New Hampshire

votes.repub
Wisconsin
Delaware
Kentucky
Maryland
Missouri
New Mexico
West Virginia

Agglomerative Coefficient = 0.8


Iowa
South Dakota
North Dakota
Kansas
Nebraska
Maine
Massachusetts
Rhode Island
Florida
North Carolina
Tennessee
Virginia
Oklahoma
Hawaii
Texas

agn2 <- agnes(daisy(votes.repub), diss = TRUE, method = "complete")


Pasamos ahora la matriz de distancias cambiamos el procedimiento para el cálcu-
Dendrogram of agnes(x = votes.repub, metric = "manhattan", stand = TRUE)
Dendrogram of agnes(x = daisy(votes.repub), diss = TRUE, method = "complete")
250
200
150
100
Height

50

Vermont
Mississippi
South Carolina
Louisiana
Texas
Arkansas
Florida
Alabama
Georgia

Colorado
Oklahoma

Delaware
Minnesota
0

West Virginia
North Dakota
Wisconsin

Kentucky
Maryland
California
New Hampshire

Hawaii
Maine
Utah

Virginia
North Carolina
Tennessee
Alaska
Michigan

Montana
Iowa
South Dakota
Kansas
Nebraska
Pennsylvania

Arizona
Nevada

Massachusetts
Rhode Island
Oregon
Washington
Missouri
New Mexico
Illinois
New Jersey
Indiana
Ohio
Connecticut
New York

Idaho
Wyoming

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 disimi-
laridades 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
Dendrogram of agnes(x = ruspini, metric = "euclidean", method = "average")

100
80
60
Height

40
20

44
45
61

41
8 7
0

60 58
3 5

13 20
1

46
66 63
4

3531
6865
2

14
6

1911

72
75
73
74

40

5153

5657
21
22

47
48
15
17

42
43
10
9

12
62

52
64

70
71

37
38
16

25
26

50
54
32
36
39
67
69

29
30

59
23
24

33
34

49
27
28

55
18

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

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 dendo-
grama 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 modi-
ficando 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

1 X
x̄Ci = xj , (4.5)
|Ci |
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

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 2.0 2.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






● ●


1


● ●

Zyxin

● ● ●
● ●

● ● ●
0

● ●
● ●


−1

● ●

● ●

−0.5 0.0 0.5 1.0 1.5 2.0 2.5

CCND3 Cyclin D3

Y finalmente con cuatro.

cz.km <- kmeans(cz.data, 4)


plot(cz.data, col = cz.km$cluster)

69


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 encon-


trar 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 100 120

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


2






● ●


1


● ●

Zyxin

● ● ●
● ●

● ● ●
0

● ●
● ●


−1

● ●

● ●

−0.5 0.0 0.5 1.0 1.5 2.0 2.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






● ●


1


● ●

Zyxin

● ● ●
● ●

● ● ●
0

● ●
● ●


−1

● ●

● ●

−0.5 0.0 0.5 1.0 1.5 2.0 2.5

CCND3 Cyclin D3

Y finalmente con cuatro.

cz.pam <- pam(cz.data, 4)


plot(cz.data, col = cz.pam$cluster)

73


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 consi-


deramos

¯ C) = 1
X
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 Interpretación
0,71 − 1,00 Fuerte estructura
0,51 − 0,70 Estructura razonable
0,26 − 0,50 Estructura débil. Probar otros métodos
≤ 0,25 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

a(i)
s(i) = 1− si a(i) < b(i), (4.7)
b(i)
= 0 si a(i) = b(i), (4.8)
b(i)
= − 1 si a(i) > b(i). (4.9)
a(i)

Esto se puede expresar en una única ecuación como

b(i) − a(i)
s(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 decre-
ciente. Para cada objeto se representa una barra horizontal con longitud propor-
cional 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)


n = 75 4 clusters Cj
j : nj | avei∈Cj si

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 k-


medias.

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. Max.
## 0.0113 0.3480 0.5220 0.4530 0.6000 0.6700

plot(silhouette(cz.km$cluster, dist(cz.data)))

Silhouette plot of (x = cz.km$cluster, dist = dist(cz.data))


n = 38 4 clusters Cj
j : nj | avei∈Cj si
32
36
30
37
34
33 1 : 11 | 0.53
28
31
29
35
38
7
9
23
27
8
22 2 : 12 | 0.42
11
24
1
3
21
6
18
17
25
10
20
14 3 : 11 | 0.38
5
19
12
2
16
13
15 4 : 4 | 0.58
4
26

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 BCR/ABL E2A/PBX1 NEG NUP-98 p15/p16
## 10 37 5 74 1 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 mo-
lecular.

ALLs <- ALL[, selSamples]

No vamos a trabajar con todos los genes. En lugar de ello vamos a filtrar aten-
diendo 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 TRUE
## 9186 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 TRUE
## 9118 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 Samples
## 3762 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 Samples
## 58 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
Height

0 5 10 15

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

plot(muestras.ag, which = 2)
37251_s_at
34721_at
41470_at
1150_at
41577_at
37701_at
33274_f_at
41827_f_at

80
39929_at

muestras.ag <- agnes(t(exprs(ALLs)))


38194_s_at
40117_at
38514_at
39318_at
1675_at

exprs(ALLs)
32111_at
40615_at
33219_at
36511_at
35995_at
32035_at
35961_at
40936_at

Agglomerative Coefficient = 0.75


38604_at
266_s_at
36941_at
37225_at
40726_at
37493_at
40088_at
Dendrogram of agnes(x = exprs(ALLs))

38052_at

agnes a la matriz transpuesta de las expresiones t(exprs(ALLs)).


33412_at
40365_at
40396_at
39182_at
AFFX−BioDn−5_at
40951_at
38585_at
38355_at
31525_s_at

O un análisis jerárquico de las muestras. Observemos que aplicamos la función


Height

6 8 10 12 14 16 18 20

04006

26008

15004

16004

31007

19005

24005

81
28028

28032

t(exprs(ALLs))
63001

08018

Agglomerative Coefficient = 0.51


24019
Dendrogram of agnes(x = t(exprs(ALLs)))

28003

LAL5

36001
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á ca-
da 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 co-


nocen 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 (con-
duc), 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 ca-
racterı́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 GRUPO GRAV PH OSMO CONDUC UREA CALCIO


## 2 2 ausencia de cristales 1.017 5.74 577 20.0 296 4.49
## 3 3 ausencia de cristales 1.008 7.20 321 14.9 101 2.36
## 4 4 ausencia de cristales 1.011 5.51 408 12.6 224 2.15
## 5 5 ausencia de cristales 1.005 6.52 187 7.5 91 1.16
## 6 6 ausencia de cristales 1.020 5.27 668 25.3 252 3.34
## 7 7 ausencia de cristales 1.012 5.62 461 17.4 195 1.40

Incluimos un análisis descriptivo de los datos.

summary(x)

## IND GRUPO GRAV PH OSMO


## Min. : 2.0 ausencia de cristales :44 Min. :1.00 Min. :4.76 Min. : 187
## 1st Qu.:21.0 presencia de cristales:33 1st Qu.:1.01 1st Qu.:5.53 1st Qu.: 410
## Median :40.0 Median :1.02 Median :5.94 Median : 594
## Mean :40.3 Mean :1.02 Mean :6.04 Mean : 614
## 3rd Qu.:60.0 3rd Qu.:1.02 3rd Qu.:6.40 3rd Qu.: 803
## Max. :79.0 Max. :1.04 Max. :7.94 Max. :1236
## CONDUC UREA CALCIO
## Min. : 5.1 Min. : 10 Min. : 0.17
## 1st Qu.:14.3 1st Qu.:159 1st Qu.: 1.45
## Median :21.4 Median :255 Median : 3.16
## Mean :20.9 Mean :262 Mean : 4.16
## 3rd Qu.:27.0 3rd Qu.:362 3rd Qu.: 6.19
## Max. :38.0 Max. :620 Max. :14.34

84
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 (distin-
guir) 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 varia-
bles 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 PESO GPB GAREA IAREA SSPG TIPO LIAREA


## 1 1 0.81 80 356 124 55 control 4.820
## 2 2 0.95 97 289 117 76 control 4.762
## 3 3 0.94 105 319 143 105 control 4.963
## 4 4 1.04 90 356 199 108 control 5.293
## 5 5 1.00 90 323 240 143 control 5.481
## 6 6 0.76 86 381 157 165 control 5.056

Veamos un breve análisis descriptivo de los datos.

summary(x)

## IND PESO GPB GAREA IAREA SSPG


## Min. : 1 Min. :0.710 Min. : 70 Min. : 269 Min. : 10 Min. : 29
## 1st Qu.: 37 1st Qu.:0.880 1st Qu.: 90 1st Qu.: 352 1st Qu.:118 1st Qu.:100
## Median : 73 Median :0.980 Median : 97 Median : 413 Median :156 Median :159
## Mean : 73 Mean :0.977 Mean :122 Mean : 544 Mean :186 Mean :184
## 3rd Qu.:109 3rd Qu.:1.080 3rd Qu.:112 3rd Qu.: 558 3rd Qu.:221 3rd Qu.:257
## Max. :145 Max. :1.200 Max. :353 Max. :1568 Max. :748 Max. :480
## 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

El capı́tulo está organizado del siguiente modo. Empezamos (sección 5.1) recor-
dando 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 probabi-
lidades 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 pobla-
ciones 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 plan-
teamos 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
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
P (Bi | A) = PkP (A|B i )P (Bi )
P (A|B )P (B )
. Finalmente podemos comprobar que P (B1 | A) =
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
fi (x) = f (x | µi , σ 2 ) = √ exp − 2 (x − µi )2 ,
2πσ 2σ
aunque fi (x) no es la probabilidad del valor x asumiendo que estamos en la po-
blació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)
(µ1 − µ2 ) x − (µ1 + µ2 ) > log .
σ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 cova-
rianzas Σ. 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  
0 1 π(2)
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 )
Q(x) = log =
f (x | µ2 , Σ2 )
1 |Σ2 | 1 1
log − (x − µ1 )0 Σ−1 0 −1
1 (x − µ1 ) + (x − µ2 ) Σ2 (x − µ2 ) =
2 |Σ1 | 2 2
 
1 |Σ2 | 1 0 −1
log − x (Σ1 − Σ−1 2 )x − 2x0
(Σ−1
1 µ1 − Σ −1
2 µ2 . (5.3)
)
2 |Σ1 | 2

Como en el caso anterior asignamos la observación x a la primera población si

π(2)
Q(x) > log .
π(1)
π(2)
Notemos que ahora Q(x) = log π(1) no es un hiperplano sino que tenemos una
superficie no plana.

5.4. 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 ca-
racterı́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· )
Si = . (5.5)
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
π(2)
Ds (x) > log , (5.6)
π(1)
donde
1
Ds (x) = λ̂0 (x − (x̄1· + x̄2· ) (5.7)
2
y
λ̂ = S−1
p (x̄1· − x̄2· ). (5.8)
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 igual-
mente probables ambos grupos entonces la regla de clasificación propuesta serı́a:
clasificamos en la población o clase 1 si,
1 0
λ̂0 x > (λ̂ 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)f (x|x̄i· , Sp )
π̂(i|x) = . (5.9)
π(1)f (x|x̄1· , Sp ) + π(2)f (x|x̄2· , Sp )
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)f (x|x̄i· , Si )
π̂(i|x) = . (5.10)
π(1)f (x|x̄1· , S1 ) + π(2)f (x|x̄2· , S2 )
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" "counts" "means" "scaling" "lev" "svd" "N" "call"
## [9] "terms" "xlevels"
##
## $class
## [1] "lda"

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" "xlevels"

Obtengamos las probabilidades a posteriori.

head(z$posterior)

## ausencia de cristales presencia de cristales


## 1 0.6411 0.35893
## 2 0.8700 0.12997
## 3 0.8484 0.15162
## 4 0.9053 0.09466
## 5 0.5762 0.42381
## 6 0.8968 0.10321

90
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)

## ausencia de cristales presencia de cristales


## 1 0.7043 0.29573
## 2 0.8992 0.10075
## 3 0.8818 0.11820
## 4 0.9273 0.07272
## 5 0.6445 0.35553
## 6 0.9205 0.07946

5.5. Análisis discriminante con más de dos pobla-


ciones normales
Supongamos que tenemos unas probabilidades Pga priori π(i) de que el caso per-
tenezca al grupo i con i = 1, . . . , g (obviamente i=1 π(i) = 1). Si x son las carac-
terı́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 )}. (5.11)
2
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 carac-
terı́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
Pg
donde n = i=1 ni . Sea Si la matriz de varianzas o de dispersión de la clase i, es
decir, Pni
j=1 (xij − x̄i· )(xij − x̄i· )0
Si = . (5.14)
ni − 1
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,
n
X δyi ,y∗ i
I= , (5.16)
i=1
n

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 si-
guiente 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 ori-
ginalmente 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 valo-
ració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á me-
jor 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 ma-
trices de covarianzas y los vectores de medias mientras que clasificamos a los indi-
viduos 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 li-
mitamos 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óni-


co. 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 1
## 1207 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 1
## 0 1149 108
## 1 58 685

Vemos la tabla de clasificación sobre el resto de los datos.

95
table(predict(z, x[-entrenamiento, ])$class, y[-entrenamiento])

##
## 0 1
## 0 1486 162
## 1 95 858

Repetimos en muestras con reemplazamiento.

entrenamiento <- sample(nrow(x), 2000, replace = T)


table(y[entrenamiento])

##
## 0 1
## 1220 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 1
## 0 1155 112
## 1 65 668

Vemos la tabla de clasificación sobre el resto de los datos.

table(predict(z, x[-entrenamiento, ])$class, y[-entrenamiento])

##
## 0 1
## 0 1687 190
## 1 101 978

5.7. Variables discriminantes canónicas o discrimi-


nantes 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
X ni g
X
0
W = (xij − xi· )(xij − x̄i· ) = (ni − 1)Si , (5.17)
i=1 j=1 i=1

y
g X
X ni g
X
B= (x̄i· − x̄·· )(x̄i· − x̄·· )0 = ni (x̄i· − x̄·· )(x̄i· − x̄·· )0 (5.18)
i=1 j=1 i=1

Notemos que
W
Sp = (5.19)
n−g

96
Estas matrices reciben el nombre de matrices intra grupos y entre grupos respec-
tivamente. 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 defi-
nida positiva y consideramos su descomposición de Cholesky dada por W = T 0 T .
Tomamos b = T c. Se tiene
c0 Bc b0 (T 0 )−1 BT −1 b b0 Ab
Fc = 0
= 0
= 0 = a0 Aa, (5.20)
c Wc bb bb
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 re-
sultados 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 mis-
mo 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 ortogo-
nales 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
Pk (5.21)
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 tipi-
ficadas 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 , (5.22)

97
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 dis-


criminante 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.

plot(z)
0.8
0.4
0.0

−2 −1 0 1 2 3 4

group ausencia de cristales


0.8
0.4
0.0

−2 −1 0 1 2 3 4

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
diabetes manifiesta
diabetes manifiesta
control
2

control
diabetes manifiesta
diabetes
diabetes manifiesta
manifiesta control
diabetes control
control
control
diabetes manifiesta diabetesmanifiesta
manifiesta control
control
control
control
control
control
control
control
control
control control
diabetes manifiesta control
diabetes manifiestadiabetes manifiesta
diabetes manifiesta controlcontrolcontrol
control
control
control
control
control control
control
control
control
control
control
control
control control
control
control
control
control
diabetes manifiesta diabetes control
quimica control
control
control control
control
diabetes manifiesta diabetes manifiesta
diabetes diabetes
manifiesta quimica control
control
control
control
control control
control
control control
diabetes manifiesta
diabetes manifiesta diabetes quimicacontrol
control
control control
0
LD2

diabetes manifiesta diabetes control


quimicaquimicacontrol
controlcontrol
diabetes manifiesta
diabetes manifiesta diabetes control
control
diabetes quimica
diabetes quimica
diabetes quimica
control
controlcontrol control
control
control
diabetes
diabetesmanifiesta
manifiesta diabetesquimica
diabetes quimica
diabetes quimica control
diabetes manifiesta diabetes quimica
diabetes manifiesta diabetes diabetes
quimica quimica
diabetes quimica
diabetes
diabetes
diabetes quimica
quimica
quimica
diabetes manifiesta diabetes quimica
control
control
diabetes quimica
diabetes quimica
diabetes quimica
diabetes diabetes
quimica diabetesquimica
quimica
diabetes manifiesta
diabetes quimica
diabetes manifiesta diabetes
diabetesmanifiesta
quimica
diabetes quimica
−2

diabetes quimica control


diabetes quimica
diabetes quimica
diabetes quimica
diabetes quimica

diabetes quimica
diabetes quimica
diabetes quimica
−4

−6 −4 −2 0 2

LD1

pairs(z)

99
−4 −2 0 2

4
control
control
control
control
control
control
control
control
control
control
controlcontrol
control
controlcontrol
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
controlcontrol
control
control
control
control control
control
control
control
control

2
control
control control
control
control
diabetes
control
control control
control
control quimica
diabetes
control control
quimica
control diabetes
diabetes
diabetes quimica
diabetes
quimica
quimica
control
diabetes
diabetes quimica
quimica
quimica manifiesta
diabetes control
quimica diabetes
diabetes quimica diabetes
diabetes
diabetes
diabetes
diabetes
diabetes quimica
quimica
diabetes
quimica
quimica
quimica quimica
diabetes
quimica quimica
diabetes quimica diabetes
diabetes
diabetes
diabetes quimica diabetes
quimica
quimica
quimica
diabetes quimica quimica
diabetes diabetes
diabetes quimica
quimica manifiesta
diabetes manifiesta

0
diabetes quimica
diabetes diabetes
quimica quimica
diabetes quimica
diabetes
diabetes quimica
quimica
diabetes
diabetes diabetes
quimica
manifiesta manifiesta
diabetes quimica

LD1 diabetes quimica


diabetesdiabetes
manifiestamanifiesta

−2
diabetes manifiesta
diabetes manifiesta
diabetes
diabetes manifiesta
manifiesta
diabetes manifiesta
diabetes manifiesta
diabetes
diabetes manifiesta
manifiesta
diabetes manifiesta
diabetes
diabetes manifiesta
manifiesta
diabetes diabetes
manifiesta manifiesta
diabetes manifiesta diabetes manifiesta

−4
diabetes manifiesta
diabetesdiabetes manifiesta
manifiesta
diabetes manifiesta diabetes manifiesta
diabetes manifiesta
diabetes manifiesta diabetes manifiesta
diabetes manifiesta

−6
diabetes manifiesta
diabetes manifiesta

diabetes
diabetes manifiesta
manifiesta
diabetes manifiesta
diabetes manifiesta
diabetes manifiesta
diabetes manifiesta control
2

diabetes manifiesta control


diabetes manifiesta
diabetes manifiesta control
diabetes control
control
control
diabetesmanifiesta
diabetes manifiesta manifiesta control
control
control
control
control
control
control
control
control
control
control
diabetes
diabetes manifiesta manifiesta
diabetes manifiesta diabetes manifiesta
control control
control
control
control
control
control
control
control
control
control
control
control
control
control
control
control
diabetes manifiesta
diabetes control
quimica
control control
control
control
control
control control
control
diabetes diabetes
manifiesta manifiesta
diabetes diabetes
manifiesta control
quimica
control
control
control
control
diabetes diabetescontrol
control
control
control
quimica
control
control
diabetesmanifiesta
manifiesta control
control
0

diabetes manifiesta
diabetes
diabetes
diabetes
diabetes
manifiesta
diabetes
diabetes
diabetes
manifiesta
diabetes
manifiesta
diabetes
manifiesta
manifiesta
diabetes
diabetes
diabetes
quimica
quimica
diabetes
manifiesta
diabetes diabetes
control
quimica
quimica
diabetes
quimica
diabetes
quimica
control
quimica
control
control
control
quimica control
control
quimica
control
control
control
control
control
quimica
quimica
LD2
diabetes
diabetesquimica
quimica
diabetes manifiesta diabetes
diabetes
diabetesquimica
quimica
quimica
control
control
diabetes
diabetes quimica
diabetes quimica
quimica
diabetes
diabetes diabetes
quimica
diabetes
manifiesta
diabetes quimica
quimica
quimica
diabetes diabetes
manifiesta
diabetes manifiesta
diabetes quimica quimica
−2

diabetes quimicacontrol
diabetes
diabetes
diabetes quimica
quimica
quimica
diabetes quimica
diabetes
diabetes quimica
quimica
diabetes quimica
−4

−6 −4 −2 0 2 4

5.8. Algunos ejemplos


Nota de R 29 En la sección ?? tenemos una descripción de los mismos. Realiza-
mos 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

group Q
0.4
0.2
0.0

−4 −2 0 2 4

group W

Los histogramas muestran que los valores de la variable discriminante son cla-
ramente 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 da-
tos. Básicamente tenemos personas enfermas de cáncer y no enfermos y preten-
demos 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 lla-
maremos variables predictoras. También se utilizan las denominaciones de variable
dependiente para la variable respuesta y variables independientes en lugar en pre-
dictoras.

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


● ●

● ●
Hwt[Sex == "F"]

● ●
● ● ●
10



● ●

● ●


● ●
9


● ● ● ●
● ●




8



● ●



7

2.0 2.2 2.4 2.6 2.8 3.0

Bwt[Sex == "F"]

Repetimos el dibujo para los machos.

plot(Bwt[Sex == "M"], Hwt[Sex == "M"])

104

20
18



16




Hwt[Sex == "M"]

● ●
● ●
● ● ●
14



● ●

● ● ●
● ● ●
● ● ●
● ● ● ●
● ● ●
12

● ● ● ●
● ● ●
● ● ●
● ● ● ●
● ●
● ● ●
● ● ●
● ● ●

10

● ● ● ●
● ●
● ● ●
● ● ● ●
● ● ● ●

● ●


8

● ● ●
● ●
● ●


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

● ●

80 ●
Stopping distance (ft)





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 va-
lor 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 simple-
mente 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 plantea-
miento 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 observa-
mos 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 es-
tatura 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 mode-
liza 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). He-
mos 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)
donde
 ∼ N (0, σ 2 ). (6.4)
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 multi-
variante tenemos que estas hipótesis las podemos expresar conjuntamente diciendo
que
Y ∼ Nn (Xβ, σ 2 In×n ), (6.5)
donde
   
Y1 1 x1  
β
Y =  ... 
 .. .. 
X = . β= 0
 
.  β1
Yn 1 xn
Si consideramos que
 
1
 .. 
=.
n

107
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 situa-
ció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 an-
terior 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  
Y1 1 x11 . . . x1,p−1  β1  1
 ..   .. .
.. .
.. .
Y =  .  X = .  β =  ..   =  .. 
   
 . 
Yn 1 xn1 . . . xn,p−1 n
β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 com-


ponente 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 vec-
tor 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β). (6.9)
i=1

108
y
Residuo

Espacio
engendrado
por X

Valor ajustado

Figura 6.1: Expresamos la observación y como suma ortogonal de una parte sis-
temá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)

y en consecuencia se sigue que

X β̂ = X(X 0 X)−1 X 0 y = Hy. (6.12)

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
n
X
SS(Error) = (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. (6.16)

109
Veamos una interpretación geométrica que nos ayude a entender qué son los estima-
dores 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 n
X n
X
(yi − ȳ)2 = (yi − yˆi )2 + (yˆi − ȳ)2 . (6.18)
i=1 i=1 i=1

Las sumas de cuadrados que acabamos de considerar reciben la siguiente denomi-


nación:
Suma de cuadrados total
n
X
SS(T otal) = (y − ȳ1n )0 (y − ȳ1n ) = (yi − ȳ)2 . (6.19)
i=1

Suma de cuadrados del error


n
X
SS(Error) = (y − X β̂)0 (y − X β̂) = (yi − yˆi )2 . (6.20)
i=1

Suma de cuadrados de la regresión


n
X
SS(Regresion) = (ŷ − ȳ1n )0 (ŷ − ȳ1n ) = (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 pre-
dictora 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 x1 − x̄
 .. .. 
X = . . 
1 xn − x̄
con
 
0 n P 0
XX= n 2
0 i=1 (xi − x̄)

Finalmente se comprueba sin dificultad que


Pn
(xi − x̂)yi
β̂ = Pi=1n 2
(6.22)
i=1 (xi − x̂)

110
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
L(β, σ) = n exp{− 2 (y − Xβ)0 (y − Xβ)} (6.23)
(2π) 2 σ n 2σ

y la logverosimilitud serı́a

n 1
l(β, σ) = log(2π) − n log σ − 2 (y − Xβ)0 (y − Xβ). (6.24)
2 2σ

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 da-
tos (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. Ajus-


tamos 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) age
## 17.400 0.107

abline(lm(circumference ~ age, data = Orange))

111


200
● ●



● ●


150


● ●
circumference

● ●



● ●



100







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" "residuals" "effects" "rank" "fitted.values"
## [6] "assign" "qr" "df.residual" "xlevels" "call"
## [11] "terms" "model"
##
## $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 mejo-
ras. 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 pre-


dictoras el precio de terreno y el valor de las mejoras.

(casas.lm <- lm(precio ~ valterr + valmejor))

##
## Call:
## lm(formula = precio ~ valterr + valmejor)
##
## Coefficients:
## (Intercept) valterr valmejor
## 767.408 3.192 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
ˆ0 ˆ
σ̂ 2 = . (6.28)
n−p

Ya podemos estimar var(β̂). Este estimador serı́a

ar(β̂) = (X 0 X)−1 σ̂ 2 .
vd (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 mul-
tivariante (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 ob-
servar 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 Median 3Q Max
## -153634 -10451 -576 8690 356418
##
## Coefficients:

114
## 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 objeti-
vo y minimizando dicha función hemos obtenido los estimadores mı́nimo cuadráti-
cos. Sin embargo, la primera pregunta que hay que responder es: ¿tenemos un ajuste
razonable? La respuesta se da utilizando medidas que comparan los valores observa-
dos 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
2 (yi − ŷi )2 SS(Error)
R = 1 − ni=1
P 2
=1− . (6.32)
(y
i=1 i − ȳ i ) SS(T otal)
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
= . (6.33)
(y
i=1 i − ȳi ) SS(T otal)

El ajuste que estamos realizando se supone que será tanto mejor cuanto más pe-
queñ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. No-
temos 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 va-
riables 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
, (6.34)
i=1 (yi − ȳ) /(n − 1)

donde suponemos que tenemos p − 1 variables predictoras.

115
6.9. Valoración de las hipótesis del modelo
Un modelo de regresión lineal múltiple supone, como hemos visto, varias hipóte-
sis. 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 compor-
tamiento 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)

Residuals vs Fitted
10

Zambia ●

●Philippines

● ●

5

● ●


● ● ●
● ●
Residuals



● ● ●
● ● ● ●
0

● ●
● ● ● ●

● ● ●
● ●
● ● ● ●
● ● ●
● ●


−5

● ● ●

Chile ●
−10

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 varia-
bles. 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 obser-


varı́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
● ●
● ● ● ● ●
● ● ●●
● ●

1
● ● ● ● ●

1
● ● ● ● ● ●●
● ● ● ●●
● ● ● ●
● ● ●
●● ●●
rnorm(50)

rnorm(50)

0
● ● ● ●
● ●● ● ● ●● ●
0


● ● ● ●●
● ● ● ● ●
● ● ● ● ●
● ●● ●
● ●

−1
● ●● ● ● ●
● ●● ●
●●
−1

● ● ●
● ● ●


−2
−2

● ●

0 10 20 30 40 50 0 10 20 30 40 50

1:50 1:50

2
● ●

2

● ● ●
● ● ● ● ●
● ● ● ●
1

● ●
● ●
1

● ● ● ●
rnorm(50)

rnorm(50)

● ● ● ●
● ● ●●
● ● ● ●
● ● ● ● ●
● ● ●●● ● ● ● ● ●
0

● ● ● ● ●
● ●● ●
0

● ● ● ● ●
● ● ● ● ●
● ● ●
● ● ● ●

●● ●



●●
● ●
−1
−1

● ●
● ● ●

● ● ●
● ●
−2

● ●

0 10 20 30 40 50 0 10 20 30 40 50

1: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
100
● ●
60
● ●
● ● ●

50
(1:50) * rnorm(50)

(1:50) * rnorm(50)
● ● ●
● ● ●
20


● ●● ● ● ● ●

● ● ●
● ●● ● ●● ● ●
● ● ● ● ●●
● ●●●
●●●● ● ●● ●●

0
● ●●● ●●
● ● ● ● ● ● ●● ●● ● ●
● ●●
● ● ●● ●
−20

● ●
● ●

−50
● ● ● ● ●
● ● ●

● ●


−60

−100
● ●
● ●

0 10 20 30 40 50 0 10 20 30 40 50

1:50 1:50
100

● ●
20 40 60

● ●
50
(1:50) * rnorm(50)

(1:50) * rnorm(50)

● ●
● ● ●

● ●● ●
● ●
● ● ●
● ● ● ● ●●
● ●

●●●● ● ●● ● ● ● ● ●● ● ●
● ● ●
0

● ● ●● ● ●
●● ● ●●●●●●●● ●
−20 0

● ● ● ● ●
● ● ● ● ●● ● ●
● ● ●
● ●
● ● ●●
−50

● ● ●
● ● ● ● ● ●
● ●


−60
−100

● ●

0 10 20 30 40 50 0 10 20 30 40 50

1: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
10 15 20
● ●
10 ●
sqrt((1:50)) * rnorm(50)

sqrt((1:50)) * rnorm(50)
● ●●
●● ●
● ●
● ●●
5

● ●● ● ● ● ●
● ● ●
● ● ● ●

5
● ● ●
● ●● ●● ● ● ● ● ●
● ● ● ●
0

●●● ● ● ●● ● ● ●
● ● ● ●

0
● ●● ● ●
●● ●● ● ●● ●
● ● ● ●
●● ● ● ● ●

−5
● ●
−5

● ● ● ●●
● ● ●

● ●


−10

−15
● ●

0 10 20 30 40 50 0 10 20 30 40 50

1:50 1:50
20

● ●

10 ●

sqrt((1:50)) * rnorm(50)

sqrt((1:50)) * rnorm(50)


15

●●
● ●
5

● ●
10

● ●● ● ●
● ● ● ●
● ● ● ●
● ●●
0

● ●● ● ●
● ● ●●● ● ●
●●
5

● ●● ●
● ●
● ●
● ●●
−5

● ● ●● ●
●●●● ● ● ● ● ●●
● ● ● ● ●
0

● ● ●
● ●
● ●
● ●● ●
● ● ● ●
● ● ● ● ● ●
−5

● ●


−15

● ●

0 10 20 30 40 50 0 10 20 30 40 50

1: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
● ●●●
cos((1:50) * pi/25) + rnorm(50)

cos((1:50) * pi/25) + rnorm(50)


4

2



3

● ●

1
● ●
● ●
● ● ● ●
2

● ● ●
●●● ● ● ● ●
● ● ● ●

0
●● ● ●
1

● ● ● ● ● ●
● ● ●
● ● ● ●
● ● ●

−1
●●
0

● ● ● ● ●
●● ● ●
● ●● ●● ●
● ● ● ● ●
● ● ● ●● ● ● ●

−2
● ● ●
● ●● ●● ●
●●
−2


● ●
● ●

−3
0 10 20 30 40 50 0 10 20 30 40 50

1:50 1:50

3
● ●
cos((1:50) * pi/25) + rnorm(50)

cos((1:50) * pi/25) + rnorm(50)

● ●
2



2

● ● ●
● ● ● ● ●
● ●
1

● ● ●●
● ●
1

● ● ● ●● ●
● ● ●● ●●
● ● ●
● ● ● ● ●
● ● ● ● ●
● ● ● ●
0


0

● ●●●
● ●
● ● ● ● ●● ●● ●
●●
● ● ● ● ●● ●●

−1

●●● ● ●
−1

● ●
● ●
●● ●
● ●
−2

● ●
−2

● ●
● ●
● ●

0 10 20 30 40 50 0 10 20 30 40 50

1: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
los residuos y representamos los residuos ordenados en función de Φ−1 ( n+1 i
) para
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
Normal Q−Q
3
Zambia ●
2

Philippines
● ●




Standardized residuals

●● ●
1


●●●
●●



●●
●●●●
0

●●
●●●●
●●
●●
●●

●●●
● ● ●●
−1


● ● ●
−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
Normal Q−Q Plot
10

● ●


● ●
5


●●

●●●
●●

Residuos



●●
●●●●
0

●●

●●●


●●
●●
●●●
● ● ●●
● ●


−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é tene-
mos 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 dis-
tribució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.4

0.6
0.3

dlnorm(x)

0.4
dnorm(x)

0.2

0.2
0.1

0.0
0.0

−3 −2 −1 0 1 2 3 −3 −2 −1 0 1 2 3

x x

1.0
0.8
0.25
dcauchy(x)

0.6
dunif(x)
0.15

0.4
0.2
0.05

0.0

−3 −2 −1 0 1 2 3 −3 −2 −1 0 1 2 3

x 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
Normal Q−Q Plot Normal Q−Q Plot

2
● ● ● ●

●● ● ●
● ●●●

●●
1

●●

1
●● ●●●

Sample Quantiles

Sample Quantiles
●●
●● ●●●
●●
●●●● ●●
●● ●●●

0

●●●
●●● ●●
●●●●●

0

●● ●●●
● ●●●●●
●●● ●●●●
●● ●●
●●●●
−1

−1
● ●
●● ●
●● ●

−2

−2

● ●
● ●

−2 −1 0 1 2 −2 −1 0 1 2

Theoretical Quantiles Theoretical Quantiles

Normal Q−Q Plot Normal Q−Q Plot

● ●
3


● ● ●

2


2
Sample Quantiles

Sample Quantiles

●●●
●● ●●
●●
● ●●
●●●
1

●●● ●●●

●●● ●●●
●● ●●●●
●●●
● ●

0

● ●
●●

0

●●●●
●● ●
●●●●●● ●
●●●●●● ●●●●●
−1

●●
● ●●●
●● ●
−1

●●
●●●●
−2

● ●●


−2

● ●

−2 −1 0 1 2 −2 −1 0 1 2

Theoretical Quantiles 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 Normal Q−Q Plot

6
● ●

10
5 ●
● ●

Sample Quantiles

Sample Quantiles

8

4

●●

6
3


● ●

4
●●
2

● ●
●● ●●
●●● ●
●●
●●●● ●●

2

●●
●● ●●
1

●●●
● ●●●●●
●●●●● ●●
●●●●●●●●●
● ●●●
●●●
●● ●●●●●●●
● ● ●● ● ● ● ●●●●●●●●●●●●

0
0

−2 −1 0 1 2 −2 −1 0 1 2

Theoretical Quantiles Theoretical Quantiles

Normal Q−Q Plot Normal Q−Q Plot


25

8
● ●
20


Sample Quantiles

Sample Quantiles

6
15


●●●
●●
4


10


●●

2

●●
5

● ●●
●● ● ●●●
●●●● ●●
● ●
●●●
●●●●●
● ●
●●●●●●●●●


●●●●
●●● ●
●●●●● ●●●●●
● ● ● ●●●●●●●●●●●●●●●●● ● ● ● ●●●●●
0

−2 −1 0 1 2 −2 −1 0 1 2

Theoretical Quantiles 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

●●●●
●●●●●●●●● ●●
●●
● ●●●●●●

Sample Quantiles

Sample Quantiles

30

−20

20
−40

10


●●●●
●●●●●
−60

●●●
●● ●
●●
● ●●●
●●●
●●●

0

●●●●●●●●●
●●●●
● ●●

−10
● ●

−2 −1 0 1 2 −2 −1 0 1 2

Theoretical Quantiles Theoretical Quantiles

Normal Q−Q Plot Normal Q−Q Plot

● ●
10 20 30 40

5

●●

●●●●●

●●●●●●
Sample Quantiles

Sample Quantiles


●●●
●●●
●●
0

●●
●●●●●●●●
●●●●●●●●●

●●
−10 −5



● ●

●●●●●●●●●●●●●●●●●●●
0


●●●●● ●
●●
●●●●●●●●●●●●

●●

−20
−20

● ●

−2 −1 0 1 2 −2 −1 0 1 2

Theoretical Quantiles 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
Normal Q−Q Plot Normal Q−Q Plot

1.0

1.0
● ● ●

●● ●●
● ●
●●●●
●●
0.8

0.8
●● ●
Sample Quantiles

Sample Quantiles

●●●
●● ●●●
●●● ●●●●●

0.6

0.6
● ●●
●●● ●●●



0.4
●●
0.4



●●● ●●●●

●●
●●● ●
● ●

0.2
●●
0.2


●● ●●●●
●●● ●●
● ●●
●●●●
●● ● ●
● ●●

0.0
0.0

● ●

−2 −1 0 1 2 −2 −1 0 1 2

Theoretical Quantiles Theoretical Quantiles

Normal Q−Q Plot Normal Q−Q Plot


1.0

1.0
● ● ● ● ●
●●● ●

●●
●●●
0.8

0.8
● ●●●
Sample Quantiles

Sample Quantiles

●●
●●●
●●● ●●
●● ●
●●
0.6

0.6

●●

● ●●●
●● ●
● ●
●●●

0.4


0.4

●●

●●● ●
●●●● ●●
●● ●●
●● ●●
0.2

0.2


●●● ●●
●●● ●●●
●●● ●●
● ●
0.0

●●
● ● ● ● ● ●●
0.0

−2 −1 0 1 2 −2 −1 0 1 2

Theoretical Quantiles 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 don-
de 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 pro-
blema 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 Shapiro-
Wilk.

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 Austria Belgium Bolivia Brazil Canada


## 0.8636 0.6164 2.2190 -0.6983 3.5528 -0.3169
## Chile China Colombia Costa Rica Denmark Ecuador

128
## -8.2422 2.5360 -1.4517 5.1251 5.4002 -2.4056
## Finland France Germany Greece Guatamala Honduras
## -1.6811 2.4755 -0.1807 -3.1162 -3.3553 0.7100
## Iceland India Ireland Italy Japan Korea
## -6.2106 0.5087 3.3911 1.9268 5.2815 -6.1070
## Luxembourg Malta Norway Netherlands New Zealand Nicaragua
## -1.6708 2.9749 -0.8718 0.4255 2.2856 0.6464
## Panama Paraguay Peru Philippines Portugal South Africa
## -3.2942 -6.1258 6.5394 6.6750 -0.7684 0.4832
## South Rhodesia Spain Sweden Switzerland Turkey Tunisia
## 1.2914 -0.6712 -4.2603 2.4868 -2.6657 -2.8179
## United Kingdom United States Venezuela Zambia Jamaica Uruguay
## -2.6924 -1.1116 3.6325 9.7509 -3.0185 -2.2638
## Libya Malaysia
## -2.8295 -2.9709

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

DW = i=2Pn 2 , (6.36)
i=1 
ˆi
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
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. Lla-


maremos 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 in-
fluencia alta supone una varianza del correspondiente
Pp residuo baja. Forzamos al
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 estan-
darizados. Calculamos las influencias.

savings.inf <- influence(savings.lm)


savings.inf$hat

## Australia Austria Belgium Bolivia Brazil Canada


## 0.06771 0.12038 0.08748 0.08947 0.06956 0.15840
## Chile China Colombia Costa Rica Denmark Ecuador
## 0.03730 0.07796 0.05730 0.07547 0.06272 0.06373
## Finland France Germany Greece Guatamala Honduras
## 0.09204 0.13620 0.08736 0.09662 0.06049 0.06008
## Iceland India Ireland Italy Japan Korea
## 0.07050 0.07145 0.21224 0.06651 0.22331 0.06080
## Luxembourg Malta Norway Netherlands New Zealand Nicaragua
## 0.08635 0.07940 0.04793 0.09061 0.05422 0.05035
## Panama Paraguay Peru Philippines Portugal South Africa
## 0.03897 0.06937 0.06505 0.06425 0.09715 0.06510
## South Rhodesia Spain Sweden Switzerland Turkey Tunisia
## 0.16081 0.07733 0.12399 0.07359 0.03964 0.07457
## United Kingdom United States Venezuela Zambia Jamaica Uruguay
## 0.11651 0.33369 0.08628 0.06433 0.14076 0.09795
## Libya Malaysia
## 0.53146 0.06523

Y las representamos.

plot(savings.lm, which = 5)

130
3 Residuals vs Leverage

● Zambia

1
2



● Japan
● 0.5

Standardized residuals

● ● ●
1


● ●
● ● ●



● ●●● ● ●
0

● ●
● ● ●●
● ●
●●
● ●
● ●
●● ● ●
● ●
−1


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


i ) = σ 2 (1−
con los residuos estudentizados. Veamos su definición. Notemos que var(ˆ
hi ) lo que sugiere tomar
ˆi
ri = √ (6.37)
σ̂ 1 − hi
Estos son los residuos estudentizados. Si el modelo que asumimos es correcto enton-
ces la varianza de estos residuos es uno y son aproximadamente incorrelados. Note-
mos 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 mo-
delo. 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 excepcio-
nalmente 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
ar(yi − ŷ(i) ) = σ̂(i)
vd (1 + x0i (X(i)
0
X(i) )−1 xi )
de modo que podemos definir los residuos jackknife como
yi − ŷ(i) yi − ŷ(i)
ti = p = q ∼ tn−p−1 ,
ar(yi − ŷ(i) )
vd 0 X )−1 x
σ̂(i) 1 + x0i (X(i) (i) i

asumiendo que el modelo es correcto. Se tiene la siguiente expresión


 1/2
ˆ n−p−1
ti = √i = ri .
σ̂(i) 1 − hi n − p − ri2

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
que estén fuera del intervalo [−tn−p−1,1− 2n
α ,t α ].
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 Austria Belgium Bolivia Brazil Canada


## FALSE FALSE FALSE FALSE FALSE FALSE
## Chile China Colombia Costa Rica Denmark Ecuador
## FALSE FALSE FALSE FALSE FALSE FALSE
## Finland France Germany Greece Guatamala Honduras
## FALSE FALSE FALSE FALSE FALSE FALSE
## Iceland India Ireland Italy Japan Korea
## FALSE FALSE FALSE FALSE FALSE FALSE
## Luxembourg Malta Norway Netherlands New Zealand Nicaragua
## FALSE FALSE FALSE FALSE FALSE FALSE
## Panama Paraguay Peru Philippines Portugal South Africa
## FALSE FALSE FALSE FALSE FALSE FALSE
## South Rhodesia Spain Sweden Switzerland Turkey Tunisia

132
## FALSE FALSE FALSE FALSE FALSE FALSE
## United Kingdom United States Venezuela Zambia Jamaica Uruguay
## FALSE FALSE FALSE FALSE FALSE FALSE
## Libya Malaysia
## FALSE 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
Di = 2
= ri2 . (6.39)
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

Libya
0.25
0.20
Cook's distance

0.15

Japan
0.10

Zambia
0.05
0.00

0 10 20 30 40 50

Obs. number
lm(sr ~ pop15 + pop75 + dpi + ddpi)
También podemos ver los valores de la distancia de Cook.

133
cooks.distance(savings.lm)

## Australia Austria Belgium Bolivia Brazil Canada


## 8.036e-04 8.176e-04 7.155e-03 7.279e-04 1.403e-02 3.106e-04
## Chile China Colombia Costa Rica Denmark Ecuador
## 3.781e-02 8.157e-03 1.879e-03 3.208e-02 2.880e-02 5.819e-03
## Finland France Germany Greece Guatamala Honduras
## 4.364e-03 1.547e-02 4.737e-05 1.590e-02 1.067e-02 4.742e-04
## Iceland India Ireland Italy Japan Korea
## 4.353e-02 2.966e-04 5.440e-02 3.919e-03 1.428e-01 3.555e-02
## Luxembourg Malta Norway Netherlands New Zealand Nicaragua
## 3.994e-03 1.147e-02 5.559e-04 2.744e-04 4.379e-03 3.226e-04
## Panama Paraguay Peru Philippines Portugal South Africa
## 6.334e-03 4.157e-02 4.401e-02 4.522e-02 9.734e-04 2.405e-04
## South Rhodesia Spain Sweden Switzerland Turkey Tunisia
## 5.267e-03 5.659e-04 4.056e-02 7.335e-03 4.224e-03 9.562e-03
## United Kingdom United States Venezuela Zambia Jamaica Uruguay
## 1.497e-02 1.284e-02 1.886e-02 9.663e-02 2.403e-02 8.532e-03
## Libya Malaysia
## 2.681e-01 9.113e-03

6.10. 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
máx(β,σ)∈Ω0 L(β, σ)
Λ= (6.40)
máx(β,σ)∈Ω L(β, σ)
siendo L(β, σ) = 1
n exp{− 2σ1 2 (y − Xβ)0 (y − Xβ)}, Ω0 = {(β, σ) ∈ Rp ×
(2π) 2 σ n
(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
y
SS(Error)Ω
∼ χ2n−p
σ 2 (n − p)
además ambas cantidades son independientes. Por ello se verifica que

(SS(Error)Ω0 − SS(Error)Ω )/r


F = ∼ 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

((y − 1n ȳ)0 (y − 1n ȳ) − (y − X β̂)0 (y − X β̂))/(p − 1)


F = ∼ Fp−1,n−p .
(y − X β̂)0 (y − X β̂)/(n − p)

Como segundo caso tendrı́amos la situación en que contrastamos que un solo coe-
ficiente 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

β̂i
ti = ∼ tn−p
SE(β̂i )

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 tie-
nen 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 3Q Max
## -8.242 -2.686 -0.249 2.428 9.751
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 28.566087 7.354516 3.88 0.00033 ***
## pop15 -0.461193 0.144642 -3.19 0.00260 **
## pop75 -1.691498 1.083599 -1.56 0.12553
## dpi -0.000337 0.000931 -0.36 0.71917
## ddpi 0.409695 0.196197 2.09 0.04247 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 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
Teniendo en cuenta que SE( β̂i )
∼ tn−p entonces el intervalo de confianza al nivel
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 confian-


za para los coeficientes de savings con la función confint.

confint(savings.lm)

## 2.5 % 97.5 %
## (Intercept) 13.753331 43.378842
## pop15 -0.752518 -0.169869
## pop75 -3.873978 0.490983
## dpi -0.002212 0.001538
## ddpi 0.014534 0.804856

Supongamos que consideramos un vector de predictores x0 y pretendemos pre-


decir 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

ar(x00 β̂) = x00 (X 0 X)−1 x0 σ̂ 2 .


vd

Y el intervalo de confianza serı́a


q
x00 β̂ ± tn−p,1− α2 σ̂ x00 (X 0 X)−1 x0 .

136
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

ar(x00 β̂) + σ̂ 2 = x00 (X 0 X)−1 x0 σ̂ 2 + σ̂ 2 = (x00 (X 0 X)−1 x0 + 1)σ̂ 2 .


vd

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 prediccio-
nes, 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 Austria Belgium Bolivia Brazil Canada


## 10.566 11.454 10.951 6.448 9.327 9.107
## Chile China Colombia Costa Rica Denmark Ecuador
## 8.842 9.364 6.432 5.655 11.450 5.996
## Finland France Germany Greece Guatamala Honduras
## 12.921 10.165 12.731 13.786 6.365 6.990
## Iceland India Ireland Italy Japan Korea
## 7.481 8.491 7.949 12.353 15.819 10.087
## Luxembourg Malta Norway Netherlands New Zealand Nicaragua
## 12.021 12.505 11.122 14.224 8.384 6.654
## Panama Paraguay Peru Philippines Portugal South Africa
## 7.734 8.146 6.161 6.105 13.258 10.657
## South Rhodesia Spain Sweden Switzerland Turkey Tunisia
## 12.009 12.441 11.120 11.643 7.796 5.628
## United Kingdom United States Venezuela Zambia Jamaica Uruguay
## 10.502 8.672 5.587 8.809 10.739 11.504
## Libya Malaysia
## 11.720 7.681

En segundo lugar, obtenemos los intervalos de confianza para la predicción de la


media.

137
predict(savings.lm, interval = "confidence")

## fit lwr upr


## Australia 10.566 8.573 12.559
## Austria 11.454 8.796 14.111
## Belgium 10.951 8.686 13.216
## Bolivia 6.448 4.157 8.739
## Brazil 9.327 7.307 11.347
## Canada 9.107 6.059 12.155
## Chile 8.842 7.363 10.321
## China 9.364 7.225 11.502
## Colombia 6.432 4.598 8.265
## Costa Rica 5.655 3.551 7.759
## Denmark 11.450 9.532 13.368
## Ecuador 5.996 4.062 7.929
## Finland 12.921 10.597 15.245
## France 10.165 7.338 12.991
## Germany 12.731 10.467 14.994
## Greece 13.786 11.405 16.167
## Guatamala 6.365 4.482 8.249
## Honduras 6.990 5.113 8.867
## Iceland 7.481 5.447 9.514
## India 8.491 6.444 10.539
## Ireland 7.949 4.420 11.477
## Italy 12.353 10.378 14.328
## Japan 15.819 12.199 19.438
## Korea 10.087 8.198 11.975
## Luxembourg 12.021 9.770 14.271
## Malta 12.505 10.347 14.663
## Norway 11.122 9.445 12.799
## Netherlands 14.224 11.919 16.530
## New Zealand 8.384 6.601 10.168
## Nicaragua 6.654 4.935 8.372
## Panama 7.734 6.222 9.246
## Paraguay 8.146 6.128 10.163
## Peru 6.161 4.207 8.114
## Philippines 6.105 4.164 8.046
## Portugal 13.258 10.871 15.646
## South Africa 10.657 8.703 12.611
## South Rhodesia 12.009 8.937 15.080
## Spain 12.441 10.311 14.571
## Sweden 11.120 8.423 13.817
## Switzerland 11.643 9.565 13.721
## Turkey 7.796 6.271 9.321
## Tunisia 5.628 3.536 7.719
## United Kingdom 10.502 7.888 13.117
## United States 8.672 4.247 13.096
## Venezuela 5.587 3.338 7.837
## Zambia 8.809 6.866 10.752
## Jamaica 10.739 7.865 13.612
## Uruguay 11.504 9.107 13.901
## Libya 11.720 6.136 17.303
## Malaysia 7.681 5.725 9.637

138
Y finalmente obtenemos los intervalos de confianza para la predicción de la ob-
servación.

predict(savings.lm, interval = "prediction")

## Warning: predictions on current data refer to future responses


## fit lwr upr
## Australia 10.566 2.65239 18.48
## Austria 11.454 3.34674 19.56
## Belgium 10.951 2.96408 18.94
## Bolivia 6.448 -1.54594 14.44
## Brazil 9.327 1.40632 17.25
## Canada 9.107 0.86361 17.35
## Chile 8.842 1.04174 16.64
## China 9.364 1.41206 17.32
## Colombia 6.432 -1.44364 14.31
## Costa Rica 5.655 -2.28779 13.60
## Denmark 11.450 3.55427 19.35
## Ecuador 5.996 -1.90361 13.89
## Finland 12.921 4.91740 20.92
## France 10.165 2.00061 18.33
## Germany 12.731 4.74420 20.72
## Greece 13.786 5.76572 21.81
## Guatamala 6.365 -1.52194 14.25
## Honduras 6.990 -0.89571 14.88
## Iceland 7.481 -0.44375 15.40
## India 8.491 0.56345 16.42
## Ireland 7.949 -0.48378 16.38
## Italy 12.353 4.44367 20.26
## Japan 15.819 7.34744 24.29
## Korea 10.087 2.19862 17.98
## Luxembourg 12.021 4.03802 20.00
## Malta 12.505 4.54786 20.46
## Norway 11.122 3.28141 18.96
## Netherlands 14.224 6.22601 22.22
## New Zealand 8.384 0.52059 16.25
## Nicaragua 6.654 -1.19581 14.50
## Panama 7.734 -0.07263 15.54
## Paraguay 8.146 0.22559 16.07
## Peru 6.161 -1.74359 14.06
## Philippines 6.105 -1.79621 14.01
## Portugal 13.258 5.23607 21.28
## South Africa 10.657 2.75248 18.56
## South Rhodesia 12.009 3.75673 20.26
## Spain 12.441 4.49157 20.39
## Sweden 11.120 3.00037 19.24
## Switzerland 11.643 3.70738 19.58
## Turkey 7.796 -0.01362 15.60
## Tunisia 5.628 -2.31147 13.57
## United Kingdom 10.502 2.40955 18.60
## United States 8.672 -0.17340 17.52
## Venezuela 5.587 -2.39507 13.57
## Zambia 8.809 0.90760 16.71

139
## Jamaica 10.739 2.55827 18.92
## Uruguay 11.504 3.47853 19.53
## Libya 11.720 2.24140 21.20
## Malaysia 7.681 -0.22396 15.59

6.11. 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 prime-
ra vamos comparando modelos sucesivos y, básicamente, consideramos si los modelos
sucesivos que comparamos difieren significativamente como modelos. En la segun-
da 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 for-
ward 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ı́ conti-
nuamos 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 3Q Max
## -1.4890 -0.5123 -0.0275 0.5700 1.4945
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.09e+01 1.75e+00 40.59 < 2e-16 ***
## Population 5.18e-05 2.92e-05 1.77 0.083 .
## Income -2.18e-05 2.44e-04 -0.09 0.929
## Illiteracy 3.38e-02 3.66e-01 0.09 0.927
## Murder -3.01e-01 4.66e-02 -6.46 8.7e-08 ***
## HS.Grad 4.89e-02 2.33e-02 2.10 0.042 *
## Frost -5.74e-03 3.14e-03 -1.82 0.075 .
## Area -7.38e-08 1.67e-06 -0.04 0.965
## ---
## Signif. codes: 0 '***' 0.001 '**' 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 3Q Max
## -1.4905 -0.5253 -0.0255 0.5716 1.5037
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.10e+01 1.39e+00 51.17 < 2e-16 ***
## Population 5.19e-05 2.88e-05 1.80 0.079 .
## Income -2.44e-05 2.34e-04 -0.10 0.917
## Illiteracy 2.85e-02 3.42e-01 0.08 0.934
## Murder -3.02e-01 4.33e-02 -6.96 1.5e-08 ***
## HS.Grad 4.85e-02 2.07e-02 2.35 0.024 *
## Frost -5.78e-03 2.97e-03 -1.94 0.058 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 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 3Q Max
## -1.4892 -0.5122 -0.0329 0.5645 1.5166
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.11e+01 1.03e+00 69.07 < 2e-16 ***
## Population 5.11e-05 2.71e-05 1.89 0.066 .
## Income -2.48e-05 2.32e-04 -0.11 0.915
## Murder -3.00e-01 3.70e-02 -8.10 2.9e-10 ***
## HS.Grad 4.78e-02 1.86e-02 2.57 0.014 *
## Frost -5.91e-03 2.47e-03 -2.39 0.021 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 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 3Q Max
## -1.471 -0.535 -0.037 0.576 1.507
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.10e+01 9.53e-01 74.54 < 2e-16 ***
## Population 5.01e-05 2.51e-05 2.00 0.052 .
## Murder -3.00e-01 3.66e-02 -8.20 1.8e-10 ***
## HS.Grad 4.66e-02 1.48e-02 3.14 0.003 **
## Frost -5.94e-03 2.42e-03 -2.46 0.018 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 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 3Q Max
## -1.502 -0.539 0.101 0.592 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
##
## Df Sum of Sq RSS AIC
## - Area 1 0.00 23.3 -24.2
## - Income 1 0.00 23.3 -24.2
## - Illiteracy 1 0.00 23.3 -24.2

143
## <none> 23.3 -22.2
## - Population 1 1.75 25.0 -20.6
## - Frost 1 1.85 25.1 -20.4
## - HS.Grad 1 2.44 25.7 -19.2
## - Murder 1 23.14 46.4 10.3
##
## Step: AIC=-24.18
## Life.Exp ~ Population + Income + Illiteracy + Murder + HS.Grad +
## Frost
##
## Df Sum of Sq RSS AIC
## - Illiteracy 1 0.00 23.3 -26.2
## - Income 1 0.01 23.3 -26.2
## <none> 23.3 -24.2
## - Population 1 1.76 25.1 -22.5
## - Frost 1 2.05 25.3 -22.0
## - HS.Grad 1 2.98 26.3 -20.2
## - Murder 1 26.27 49.6 11.6
##
## Step: AIC=-26.17
## Life.Exp ~ Population + Income + Murder + HS.Grad + Frost
##
## Df Sum of Sq RSS AIC
## - Income 1 0.0 23.3 -28.2
## <none> 23.3 -26.2
## - Population 1 1.9 25.2 -24.3
## - Frost 1 3.0 26.3 -22.1
## - HS.Grad 1 3.5 26.8 -21.2
## - Murder 1 34.7 58.0 17.5
##
## Step: AIC=-28.16
## Life.Exp ~ Population + Murder + HS.Grad + Frost
##
## Df Sum of Sq RSS AIC
## <none> 23.3 -28.2
## - Population 1 2.1 25.4 -25.9
## - Frost 1 3.1 26.4 -23.9
## - HS.Grad 1 5.1 28.4 -20.2
## - Murder 1 34.8 58.1 15.5
##
## Call:
## lm(formula = Life.Exp ~ Population + Murder + HS.Grad + Frost,
## data = statedata)
##
## Coefficients:
## (Intercept) Population Murder HS.Grad Frost
## 7.10e+01 5.01e-05 -3.00e-01 4.66e-02 -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
##
## Df Sum of Sq RSS AIC
## - Area 1 0.00 23.3 -24.2
## - Income 1 0.00 23.3 -24.2
## - Illiteracy 1 0.00 23.3 -24.2
## <none> 23.3 -22.2
## - Population 1 1.75 25.0 -20.6
## - Frost 1 1.85 25.1 -20.4
## - HS.Grad 1 2.44 25.7 -19.2
## - Murder 1 23.14 46.4 10.3
##
## Step: AIC=-24.18
## Life.Exp ~ Population + Income + Illiteracy + Murder + HS.Grad +
## Frost
##
## Df Sum of Sq RSS AIC
## - Illiteracy 1 0.00 23.3 -26.2
## - Income 1 0.01 23.3 -26.2
## <none> 23.3 -24.2
## - Population 1 1.76 25.1 -22.5
## - Frost 1 2.05 25.3 -22.0
## - HS.Grad 1 2.98 26.3 -20.2
## - Murder 1 26.27 49.6 11.6
##
## Step: AIC=-26.17
## Life.Exp ~ Population + Income + Murder + HS.Grad + Frost
##
## Df Sum of Sq RSS AIC
## - Income 1 0.0 23.3 -28.2
## <none> 23.3 -26.2
## - Population 1 1.9 25.2 -24.3
## - Frost 1 3.0 26.3 -22.1
## - HS.Grad 1 3.5 26.8 -21.2
## - Murder 1 34.7 58.0 17.5
##
## Step: AIC=-28.16
## Life.Exp ~ Population + Murder + HS.Grad + Frost
##
## Df Sum of Sq RSS AIC
## <none> 23.3 -28.2
## - Population 1 2.1 25.4 -25.9
## - Frost 1 3.1 26.4 -23.9
## - HS.Grad 1 5.1 28.4 -20.2
## - Murder 1 34.8 58.1 15.5
##
## Call:
## lm(formula = Life.Exp ~ Population + Murder + HS.Grad + Frost,
## data = statedata)
##

145
## Coefficients:
## (Intercept) Population Murder HS.Grad Frost
## 7.10e+01 5.01e-05 -3.00e-01 4.66e-02 -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 3Q Max
## -1.3791 -0.1317 -0.0159 0.1112 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 3Q Max
## -1.3473 -0.1308 -0.0165 0.1104 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 3Q Max
## -1.3473 -0.1308 -0.0165 0.1104 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 3Q Max
## -445.0 -131.5 2.6 109.0 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 3Q Max
## -435.9 -103.8 29.4 123.9 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
Residuals vs Fitted
400
6●
15 ●


200




● ●
Residuals


0




−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


Standardized residuals



● ●


0

● ●


−1

● 17

● 14
−2

−2 −1 0 1 2

Theoretical Quantiles
lm(agua ~ temperatura + produccion + dias + personas)

plot(a.lm, which = 3)

151
Scale−Location
1.4 ● 14

6●
1.2

17 ●

● ●
1.0


Standardized residuals



0.8


0.6

● ●

0.4



0.2


0.0

3000 3500 4000

Fitted values
lm(agua ~ temperatura + produccion + dias + personas)

plot(a.lm, which = 4)

152
Cook's distance

1
0.20
0.15
Cook's distance

4
16
0.10
0.05
0.00

5 10 15

Obs. number
lm(agua ~ temperatura + produccion + dias + personas)

plot(a.lm, which = 5)

153
Residuals vs Leverage
2
1


0.5

1

16 ●
Standardized residuals


● ●


0

● ●

1●
−1

●4
0.5

1

−2

Cook's distance

0.0 0.1 0.2 0.3 0.4 0.5 0.6

Leverage
lm(agua ~ temperatura + produccion + dias + personas)

plot(a.lm, which = 6)

154
Cook's dist vs Leverage hii (1 − hii)
21.5 1 0.5
1●
0.20
0.15
Cook's distance

●4
16 ●


0.10



0.05





0.00

● ●
● ● 0

0 0.1 0.2 0.3 0.4 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


## fit lwr upr
## 1 3205 2521 3890
## 2 2750 2131 3370
## 3 2657 2036 3278
## 4 3228 2601 3854
## 5 3214 2563 3864
## 6 3529 2940 4119
## 7 3538 2945 4132
## 8 3138 2556 3720
## 9 3116 2526 3706
## 10 3283 2664 3903
## 11 3469 2825 4113
## 12 3148 2501 3795
## 13 2913 2309 3517
## 14 3367 2803 3931
## 15 3627 3050 4203
## 16 4362 3691 5034
## 17 3617 3026 4208

155
Intervalo de confianza para la media.

predict(a.lm, interval = "confidence")

## fit lwr upr


## 1 3205 2788 3623
## 2 2750 2451 3050
## 3 2657 2355 2959
## 4 3228 2915 3540
## 5 3214 2854 3573
## 6 3529 3299 3760
## 7 3538 3297 3779
## 8 3138 2927 3349
## 9 3116 2884 3348
## 10 3283 2984 3583
## 11 3469 3122 3816
## 12 3148 2795 3501
## 13 2913 2648 3179
## 14 3367 3212 3522
## 15 3627 3432 3821
## 16 4362 3966 4758
## 17 3617 3383 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 3Q Max
## -395.7 -98.1 -6.7 113.0 512.7
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -5984.288 1628.318 -3.68 0.00089 ***
## M 8.783 4.171 2.11 0.04344 *
## So -3.803 148.755 -0.03 0.97977
## Ed 18.832 6.209 3.03 0.00486 **
## Po1 19.280 10.611 1.82 0.07889 .
## Po2 -10.942 11.748 -0.93 0.35883
## LF -0.664 1.470 -0.45 0.65465
## M.F 1.741 2.035 0.86 0.39900
## Pop -0.733 1.290 -0.57 0.57385
## NW 0.420 0.648 0.65 0.52128
## U1 -5.827 4.210 -1.38 0.17624
## U2 16.780 8.234 2.04 0.05016 .
## GDP 0.962 1.037 0.93 0.36075
## Ineq 7.067 2.272 3.11 0.00398 **
## Prob -4855.266 2272.375 -2.14 0.04063 *
## Time -3.479 7.165 -0.49 0.63071
## ---
## Signif. codes: 0 '***' 0.001 '**' 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 3Q Max
## -470.7 -78.4 -19.7 133.1 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: Crime ~ M + So + Ed + Po1 + Po2 + LF + M.F + Pop + NW + U1 +
## U2 + GDP + Ineq + Prob + Time
## Model 2: Crime ~ M + Ed + Po1 + U2 + Ineq + Prob
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 31 1354946
## 2 40 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 per-
mite seleccionar el espejo desde traer los paquetes adicionales cómoda-
mente.
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 encon-
trar 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. Abrimos el fichero R con emacs.
2. Abrimos una nueva ventana (mejor separada) con CTRL x 52.
3. En la nueva ventana marcamos el icono de R.
4. Utilizamos la ventana donde está el código para editar y podemos
usar los distintos controles que nos dá el menú ESS de emacs pode-
mos trabajar muy cómodamente.

7.2. ¿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-python-
xref.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 Interdiscipli-


nary 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 machi-
ne 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