You are on page 1of 185

Tema 1: Introduccion al Analisis de

datos Categ oricos


Introducci on
Los datos categoricos aparecen cuando una variable se mide en una escala que s olo
clasica a los encuestados en un n umero limitado de grupos. Por ejemplo, una encuesta
donde se recoge informacion sobre variables como sexo, estado civil y aliaci on poltica.
Adem as de distinguir una variable como categorica (cualitativa) o continua (cuanti-
tativa), las variables tambien se pueden clasicar como independientes o dependientes.
El termino independiente se reere a una variable que se puede manipular experimen-
talmente (e.g. el tipo de tratamiento que se le asigna a cada persona), pero tambien
se aplica a menudo a una variable que se utiliza para predecir otra variable (e.g. nivel
socio-econ omico).
El termino dependiente se reere en general a una variable cuyo interes primordial
es el resultado o la respuesta. Por ejemplo, se pueden considerar como variables depen-
dientes, el resultado de un tratamiento (basado en el tipo de tratamiento) o el nivel
educativo previsto a partir de una situacion socio-economica,.
Otro ejemplo: supongamos que se desea determinar si los colegios concertados di-
eren de manera sustancial de los colegios privados y p ublicos en base a ciertos datos
demogr acos. Por ejemplo, la ubicacion: urbano, suburbano o rural, tipo: p ublica o pri-
vada, situacion predominante socio-economica de los estudiantes: bajo, medio o alto,
etc. Para este tipo de an alisis es necesario usar tecnicas de an alisis de datos categoricos,
porque todas las variables involucradas son categoricas.
Otro ejemplo: supongamos que un investigador quiere predecir si un estudiante se
graduar a en secundaria en base a cierta informacion como el n umero de das de asisten-
cia, promedio de las calicaciones y los ingresos familiares.
En este caso, se necesita un enfoque de analisis categ orico donde la graduaci on (s o
no) sirve como variable dependiente en funci on de otras variables explicativas.
1
Escalas de medida
La escala de medida de una variable de respuesta categ orica es fundamental para la
elecci on del an alisis estadstico apropiado.
Las variables de respuesta categ orica pueden ser
Dicot omicas
Ordinales
Nominales
De recuento
Respuestas dicotomicas son aquellas que tienen dos posibles resultados que a menudo
son s y no. Se desarrollar a la enfermedad? El votante votar a por el candidato A o
por el B? Aprobar a el examen?
Con frecuencia, las respuestas de los datos categ oricos representan mas de dos re-
sultados posibles y con frecuencia en estos resultados es posible considerar alg un orden
inherente. Estas variables tienen una escala de respuesta ordinal de medici on. El nuevo
plan de estudios gusta a los estudiantes? La muestra de agua es de dureza baja, media
o alta? En el primer caso, el orden de los niveles de respuesta es clara, pero no hay
ninguna pista en cuanto a las distancias relativas entre los niveles. En el segundo caso,
hay una distancia posible entre los niveles: medio podra tener el doble de la dureza de
baja y alta podra tener tres veces la dureza de baja.
Si existen m as de dos categoras posibles de resultados y no hay un orden inherente
entre las categoras, entonces se tiene una escala de medida nominal. A cu al de los
cuatro candidatos votaste en las elecciones municipales de la ciudad? Preeres la playa,
la monta na o la ciudad para ir de vacaciones? No existe una escala subyacente en esos
resultados y no hay una forma aparente de ordenarlos.
Las variables categ oricas a veces contienen recuentos. En lugar de considerar las
categoras que presenta cada observacion, (s, no) (bajo, medio, alto), los resultados que
se estudian son los n umeros mismos. El tama no de la camada, fue de 1, 2, 3, 4 o 5
animales? La casa tiene 1, 2, 3 o 4 equipos de aire acondicionado?
En la metodologa cl asica habitual se analiza la media de los recuentos, pero los
supuestos que se tienen que cumplir en un modelo lineal est andar con datos continuos,
no se cumplen a menudo con datos discretos. En general, los recuentos no se distribuyen
seg un una distribuci on normal y la varianza no suele ser homogenea.
2
Distribuciones de Probabilidad
Distribuci on binomial
Habitualmente, los datos proceden de n ensayos independientes e identicos con dos
posibles resultados para cada uno: exito y fracaso, con igual probabilidad de exito para
cada prueba. Ensayos independientes signica que los resultados son variables aleatorias
independientes. En particular, el resultado de una prueba no afecta al resultado de otra.
Se denominan ensayos de Bernoulli.
Se denota como a la probabilidad de exito para un ensayo dado e Y denota el
n umero de exitos de las n pruebas:
P(y) =
n!
y! (n y)!

y
(1 )
ny
para 0, 1, 2, . . . , n.
La distribuci on binomial para n ensayos con par ametro tiene como media y des-
viaci on est andar:
E(Y ) = = n
=
_
n(1 )
Las gracas de las funciones de probabilidad y distribuci on son, respectivamente,
# Script de R
# Funcion de probabilidad de una binomial
plot (0:8, dbinom (0:8,8,0.3), type="h", xlab="x",ylab="P(X=x)",
xlim=c(-1,9))
title("Funcion de probabilidad de XBin(8, 0.3)")
# Funcion de distribucion de una binomial
plot (0:8, pbinom (0:8,8,0.3), type="n", xlab="x", ylab="F(x)",
xlim=c(-1,9), ylim=c(0,1))
segments (-1,0,0,0)
segments (0:8, pbinom (0:8,8,.3), 1:9, pbinom (0:8,8,.3))
lines (0:7, pbinom (0:7,8,.3), type="p", pch =16)
segments (-1,1,9,1, lty=2)
title("Funcion de distribucion de XBin(8, 0.3)")
3
4
Para generar 1000 observaciones de una distribuci on binomial Bin(n = 5, p = 0,5):
# Uso la libreria PASWR
library(PASWR)
bino.gen (1000 , 5, 0.5)
Distribuci on Multinomial
Algunos ensayos tienen mas de dos resultados posibles. Por ejemplo, el resultado de
un un accidente de autom ovil se puede clasicar en varias posibles categoras:
1. sin lesiones,
2. lesiones que no requieren hospitalizacion,
3. lesiones que requieren hospitalizacion,
4. muerte.
Cuando los ensayos son independientes respecto a cada categora, la distribucion de
los recuentos en cada categora sigue una distribucion multinomial.
5
Sea c el n umero de posibles categoras. Dados n sucesos, se puede denir la variable
aleatoria X
i
(para i = 1, . . . , c) que indica el n umero de veces que aparece el resultado
i. Se denota la probabilidad de obtener cada resultado i como {
1
,
2
, . . . ,
c
} donde

i
= 1.
Para n observaciones independientes, la probabilidad de que n
1
observaciones caigan
en la categora 1, n
2
caigan en la categora 2, ..., n
c
caigan en la categora c, (donde

i
n
i
= n) es igual a
P (n
1
, n
1
, . . . , n
c
) =
_
n!
n
1
!n
2
! n
c
!
_

n
1
1

n
2
2

n
c
c
.
La distribuci on binomial es, en realidad, un caso particular de la distribucion multinomial
cuando c = 2.
Ejemplos:
Se puede generar una muestra de una multinomial Mult(10, (0,1, 0,2, 0,7)), o bien
calcular la probabilidad conjunta del vector (3, 7, 2) o del vector (1, 2, 9).
# Distribucion multinomial con R
rmultinom (10, size=12, prob=c(0.1, 0.2, 0.7))
dmultinom(c(3, 7, 2), prob=c(0.1, 0.2, 0.7))
dmultinom(c(1, 2, 9), prob=c(0.1, 0.2, 0.7))
La esperanza y varianza de observar el suceso i en n ensayos es
E (X
i
) = np
i
V ar (X
i
) = np
i
(1 p
i
)
La covarianza entre los sucesos i y j observados en n ensayos es
Cov (X
i
, X
j
) = np
i
p
j
(i = j)
Inferencia para la distribuci on binomial
El metodo habitual en Inferencia Estadstica, desde el punto de vista clasico, es
la estimacion por m axima verosimilitud. El estimador de m axima verosimilitud de un
par ametro es el valor del par ametro, para el que la probabilidad de obtener los datos
observados es mayor. Por ejemplo, si en n = 10 ensayos se obtienen 0 exitos, la funcion
de verosimilitud en este caso l() = (1 )
10
alcanza el maximo para = 0. Es decir el
resultado de 0 exitos en 10 ensayos es mas probable que ocurra cuando = 0 que para
cualquier otro valor.
6
As, en general, si una variable aleatoria X se observa con x exitos en n ensayos, el
estimador de maxima verosimilitud (EMV) de la probabilidad de exito p es simplemente
p = x/n, la proporci on observada de exitos entre n ensayos. La varianza es
V ar( p) =
p(1 p)
n
y un intervalo de conaza al 100(1 ) aproximado para p es
p z

s
_
p(1 p)
n
que se denomina, en algunos textos, intervalo de Wald.
Una mejor alternativa es el llamado intervalo de Wilson, (o q-interval ) que se calcula
como un subproducto del Teorema Central del Lmite.
p
_
n
n + z
2

s
_
+
1
2
_
z
2

s
n + z
2

s
_

_
_
p(1 p)
n
_
_

_
n
2
z
2

s
_
n + z
2

s
_
2
_

_
+
1
4
_

_
z
4

s
_
n + z
2

s
_
2
_

_
Esta aproximaci on funciona mejor que el intervalo de Wald para valores peque nos de n.
Estimacion numerica de la funci on de verosimilitud
En R se puede calcular de manera numerica los estimadores de m axima verosimilitud.
Por ejemplo:
# Funcion de verosimilitud de una binomial
# Se define la funcion de verosimilitud para una muestra de
# una binomial con N=10 Y=7 exitos
lklhd <- function(p){
dbinom (7,10,p)}
# Grafica de la funcion de verosimilitud
plot(lklhd , 0, 1, xlab="p_i", ylab="l(p)",
main="Verosimilitud de una Binomial , N=10, Y=7")
# Estimador de maxima verosimiltud mediante la funcion nlm()
optimize(lklhd ,c(0,1), maximum=TRUE)
Los intervalos de conanza exactos, o intervalos de Clopper-Pearson, se basan en el
c alculo mediante la funcion de distribucion de la distribuci on binomial, no en aproxima-
ciones mediante la normal. Sin embargo, no son exactas en el sentido de que la funcion de
distribuci on binomial es discontinua en s, lo que impide en la realidad el calculo exacto.
Estos intervalos son conservadores, es decir, suelen ser mayores que los calculados seg un
los metodos asint oticos.
7
Test de hip otesis usando el metodo de la raz on de verosimilitu-
des
En el metodo de la raz on de verosimilitudes se compara la verosimilitud (probabilidad)
de los datos observados usando la proporcion especicada bajo la hip otesis nula, respecto
a la verosimilitud de los datos observados usando la estimaci on muestral. La verosimilitud
obtenida bajo la hipotesis nula se denota mediante L
0
y la verosimilitud obtenida usando
el estimador muestral se denota como L
1
.
El cociente L
0
/L
1
representa la raz on de verosimilitudes. Si L
1
(la verosimilitud
obtenida a partir de los datos observados) es mucho mayor que L
0
(la verosimilitud bajo
la hipotesis nula H
0
) la raz on de verosimilitudes ser a mucho menor que uno e indicar a que
los datos muestran evidencia contra la hipotesis nula.
El test de la razon de verosimilitudes se obtiene tomando el logaritmo (ln) de la raz on
de verosimilitudes y multiplicandola por 2. En concreto,
G
2
= 2 ln
_
L
0
L
1
_
= 2 [ln (L
0
) ln (L
1
)] .
Un valor alto de G
2
(m as positivo) indica una fuerte evidencia en contra de H
0
. Bajo
la hipotesis nula y para una muestra razonablemente grande, G
2
sigue una distribucion

2
con los grados de libertad igual al n umero de par ametros libres que existen bajo la
hip otesis nula. En el caso de las proporciones es igual a 1.
Ejemplo
Se tiene una muestra de 2818 personas tal que el 34 % bebe la cantidad diaria de
agua recomendada (1.5 litros). Un intervalo de conanza aproximado del 95 % para la
proporci on de toda la poblaci on es, entonces,
0,34
_
0,34 0,66
2818
= 0,34 0,017 = (0,323, 0,357).
El intervalo de Wilson calculado es
8
p
_
n
n + z
2

s
_
+
1
2
_
z
2

s
n + z
2

s
_

_
_
p(1 p)
n
_
_

_
n
2
z
2

s
_
n + z
2

s
_
2
_

_
+
1
4
_

_
z
4

s
_
n + z
2

s
_
2
_

_
=
0,34
_
2818
2818 + 1,96
2
_
+
1
2
_
1,96
2
2818 + 1,96
2
_

0,34 0,66
2818

_
2818
2
1,96
2
(2818 + 1,96
2
)
2
_
+
1
4

_
1,96
4
(2818 + 1,96
2
)
2
_
=
(0,32274, 0,35770)
Ejemplo
Uso de R para calcular intervalos de conanza para el parametro p de la binomial.
Supongamos un ensayo con 50 observaciones, entre los que se encuentran 46 exitos.
Se trata de calcular los intervalos de conanza.
# x=46 exitos
# n=50 observaciones
res = prop.test(x=46, n=50, conf.level =0.95 , correct=F)
res
Salida R

1-sample proportions test without continuity correction
data: 46 out of 50, null probability 0.5
X-squared = 35.28, df = 1, p-value = 2.855e-09
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
0.8116175 0.9684505
sample estimates:
p
0.92

# Alternativa
library(Hmisc)
binconf (46,50, method="all")
Salida R

PointEst Lower Upper
Exact 0.92 0.8076572 0.9777720
Wilson 0.92 0.8116175 0.9684505
Asymptotic 0.92 0.8448027 0.9951973

9
Ejemplo
Proporcion de personas vegetarianas: Supongamos que se plantea un cuestionario a un
grupo de estudiantes donde se pregunta si son vegetarianos o no. Entre n = 25 estudian-
tes, y = 0 de ellos dicen ser vegetarianos. Aunque no es realmente una muestra aleatoria
de una poblacion, se puede usar como ejemplo para calcular los intervalos de conanza
al 95 % para el par ametro p de la binomial.
lklhd <- function(p){
dbinom (0,25,p)}
# Grafica de la funcion de verosimilitud
plot(lklhd , 0, 1, xlab="p_i", ylab="l(p)",
main="Verosimilitud de una Binomial , N=25, Y=0")
# Estimador de maxima verosimiltud mediante la funcion nlm()
optimize(lklhd ,c(0,1), maximum=TRUE)
res = prop.test(x=0, n=25, conf.level =0.95 , correct=F)
res$conf.int
Inferencia para la distribuci on multinomial
Los parametros que se tienen que estimar son (
1
, . . . ,
c
) donde
c
= 1

c1
i=1

i
.
Se obtiene que los estimadores por m axima verosimilitud son

j
=
n
j
n
para j = 1, . . . c.
Es decir, los estimadores son simplemente las proporciones muestrales.
Contraste para la distribuci on de una multinomial
En 1900 Karl Pearson present o una prueba de hip otesis que fue uno de los prime-
ros metodos de inferencia que se inventaron y tuvo un gran impacto en el an alisis de
datos categoricos, que hasta ese momento se haba centrado en la descripci on de las
asociaciones entre variables.
La prueba de Pearson eval ua si los par ametros de una multinomial son iguales a unos
valores previos especicados.
Se considera como hip otesis nula
H
0
:
j
=
j0
para j = 1, . . . , c donde

j

j0
= 1
Cuando la hipotesis nula es cierta, entonces los valores esperados de n
j
llamadas
frecuencias esperadas son iguales a n
j0
para j = 1, . . . , c.
10
Se dene el siguiente estadstico:
X
2
=

j
(n
j
n
j0
)
2
n
j0
.
Intuitivamente, diferencias elevadas entre lo que se espera seg un H
0
y lo observado
implica a su vez valores grandes de X
2
.
Para un el tama no muestral no peque no, X
2
se distribuye como una chi cuadrado
2
con c 1 grados de libertad.
El test es muy sensible a los tama nos muestrales. Si alguna categora tiene una
frecuencia esperada baja (menor que 5) el test pierde mucha potencia ya que se basa en
la aproximaci on asintotica de la distribuci on
2
.
Ejemplo
El test de Pearson se us o en Genetica para contrastar las teoras de Mendel so-
bre la herencia. Mendel cruzo guisantes amarillos puros con guisantes verdes puros. Su
predicci on era que 3/4 tenan que ser amarillos y 1/4 verdes.
En un experimento se obtuvo n = 8023 guisantes, de los cuales n
1
= 6022 fueron
amarillos y n
2
= 2001 verdes.
Las frecuencias esperadas son, entonces,
H
0
:
10
= 0,75

20
= 0,25
de modo que
X
2
=
(6022 8023 0,75)
2
8023 0,75
+
(2001 8023 0,25)
2
8023 0,25
= 1,59 10
2
Al compararlo con una distribuci on
2
con 1 grado de libertad, se obtiene un p-valor
igual a 0.90.
# Con R
pchisq (0.015 ,1, lower.tail=FALSE)
# Directamente con el comando chisq.test
chisq.test(x=c(6022 ,2001) ,p=c(.75 ,.25))
Salida R

[1] 0.9025233
Chi -squared test for given probabilities
data: c(6022, 2001)
X-squared = 0.015, df = 1, p-value = 0.9025

11
Pero Fisher (y otros) vieron que Mendel tuvo demasiada suerte en su experimenta-
ci on...
Fisher coment o textualmente: The general level of agreement between Mendels ex-
pectations and his reported results shows that it is closer than would be expected in the
best of several thousand repetitions... I have no doubt that Mendel was deceived by a
gardening assistant, who knew only too well what his principal expected from each trial
made.
Con SAS se usara el siguiente programa:
OPTIONS ls=70;
DATA prueba1;
INPUT prof $ count;
DATALINES;
amarillos 6022
verdes 2001
;
PROC freq order=data;
weight count;
tables prof / binomial (p=0.75) alpha =0.05;
exact binomial;
RUN;
Se obtiene el siguiente resultado:
12
Salida SAS

Procedimiento FREQ
Frecuencia Porcentaje
prof Frecuencia Porcentaje acumulada acumulado
_________________________________________________________________
amarillo 6022 75.06 6022 75.06
verdes 2001 24.94 8023 100.00
Proporcion binomial para prof = amarillo
________________________________________
Proporcion (P) 0.7506
ASE 0.0048
95 % Limite conf. inferior 0.7411
95 % Limite conf. superior 0.7601
Limites conf. exactos
95 % Limite conf. inferior 0.7410
95 % Limite conf. superior 0.7600
Test de H0: Proporcion = 0.75
ASE bajo H0 0.0048
Z 0.1225
Pr de un lado > Z 0.4513
Pr de dos lados > |Z| 0.9025
Test exacto
Pr de un lado >= P 0.4572
Dos colas = 2 * Una cola 0.9144
Tamano de la muestra = 8023

13
Ejemplo
El departamento de instrucci on p ublica de Wisconsin usa cuatro categoras para
medir las habilidades matem aticas: advanced, procient, basic y minimal.
Se considera una muestra de 71709 estudiantes de grado 10
o
en 2006 y se supone que
las proporciones se mantienen en los mismos niveles que en a nos anteriores. Los datos
est an en la siguiente tabla:
Nivel matematico Proporci on esperada Frecuencia esperada Frecuencia observada
Advanced 15 % 10756.35 18644
Procient 40 % 28683.60 32269
Basic 30 % 21512.70 10039
Minimal 15 % 10756.35 10757
Con R bastara escribir:
chisq.test(x=c(18644 ,32269 ,10039 ,10757) ,
p=c(0.15 ,0.40 ,0.30 ,0.15))
Con SAS se usara el siguiente programa:
OPTIONS ls=70;
DATA prueba2;
INPUT prof $ count;
DATALINES;
advanced 18644
proficient 32269
basic 10039
minimal 10757
;
PROC freq order=data;
weight count;
tables prof / testp =(0.15 0.40 0.30 0.15);
RUN;
14
Salida SAS

Procedimiento FREQ
Test Frecuencia Porcentaje
prof Frecuencia Porcentaje Porcentaje acumulada acumulado
______________________________________________________________________
advanced 18644 26.00 15.00 18644 26.00
proficie 32269 45.00 40.00 50913 71.00
basic 10039 14.00 30.00 60952 85.00
minimal 10757 15.00 15.00 71709 100.00
Test chi -cuadrado
para proporciones especificadas
_______________________________
Chi -cuadrado 12351.6415
DF 3
Pr > ChiSq <.0001
Tamano de la muestra = 71709

15
Tema 2: Tablas de Contingencia
Introducci on
Una tabla de contingencia es una de las formas m as comunes de resumir datos ca-
teg oricos. En general, el interes se centra en estudiar si existe alguna asociaci on entre
una variable la y otra variable columna y/o calcular la intensidad de dicha asociaci on.
Sean X e Y dos variables categoricas con I y J categoras respectivamente. Un
sujeto puede venir clasicado en una de las I J categoras, que es el n umero posible
de categoras que existe.
Cuando las casillas de la tabla contienen las frecuencias observadas, la tabla se de-
nomina tabla de contingencia, termino que fue introducido por Pearson en 1904.
Una tabla de contingencia (o tabla de clasicacion cruzada), con I las y J columnas
se denomina una tabla I J.
Por ejemplo, se considera la distribucion conjunta de dos variables y la correspon-
diente tabla de contingencia en una muestra de pacientes de un hospital. Se tiene la
siguiente tabla:
X Se toma aspirina o placebo (I = 2)
Y Se sufre ataque cardaco o no (J = 3).
Ataque mortal Ataque no mortal No ataque
Placebo 18 171 10845
Aspirina 5 99 10933
Como resumen de la informaci on que presenta la tabla, de los 11034 enfermos que
tomaron un placebo, 18 tuvieron un ataque al coraz on, mientras que de los 11037 que
tomaron aspirina, 5 tuvieron ataques al coraz on.
1
La distribucion conjunta de dos variables categoricas determina su relaci on. Esta
distribuci on tambien determina las distribuciones marginales y condicionales.
Distribuci on conjunta
La distribucion conjunta viene dada por

ij
= P (X = i, Y = j)
con i = 1, . . . , I y j = 1, , . . . , J.
Es la probabilidad de (X, Y ) en la casilla de la la i y la columna j.
Distribuci on marginal
Las distribuciones marginales son

i+
= P (X = i) =
J

j=1
P (X = i, Y = j) =
J

j=1

ij

+j
= P (Y = j) =
I

i=1
P (X = i, Y = j) =
I

i=1

ij
es decir, el smbolo + indica la suma de las casillas correspondientes a unndice dado.
Se cumple siempre que

+j
=

i+
=

ij
= 1
Distribuci on condicional
En la mayor parte de las tablas de contingencia, como en el ejemplo anterior, una
de las variables, digamos Y, es una variable respuesta y la otra variable X es una va-
riable explicativa o predictora. En esta situaci on no tiene sentido hablar de distribuci on
conjunta.
Cuando se considera una categora ja de X, entonces Y tiene una distribuci on de
probabilidad que se expresa como una probabilidad condicionada.
As, se puede estudiar el cambio de esta distribucion cuando van cambiando los
valores de X.
Distribuci on condicionada de Y respecto de X
P (Y = j|X = i) =
j|i
=

ij

i+
2
Se tiene que

j|i
= 1
y el vector de probabilidades
_

1|i
, . . . ,
J|i
_
forman la distribuci on condicionada de Y
en la categora i de X.
La mayor parte de los estudios se centran en la comparacion de las distribuciones
condicionadas de Y para varios niveles de las variables explicativas.
Independencia y Homogeneidad
Cuando las variables que se consideran son de tipo respuesta, se pueden usar distri-
buciones conjuntas o bien distribuciones condicionales para describir la asociaci on entre
ellas.
Dos variables son independientes si

ij
=
i+

+j
lo cual implica que la distribucion condicionada es igual a la marginal:

j|i
=
+j
para j = 1, . . . , J, dado que

j|i
=

ij

i+
para todo i y j.
Si X e Y son variables respuesta entonces se habla de independencia
Si Y es variable respuesta y X es variable explicativa entonces se habla de homoge-
neidad.
Ejemplo con SAS
Muchas veces, los datos categ oricos se presentan en forma de tablas como la anterior,
y otras veces se presentan en forma de matriz de datos.
Supongamos, por ejemplo, que los datos se presentan seg un la siguiente tabla:
Tratamiento Favorable Desfavorable
Placebo 16 48
Test 40 20
En SAS el modo de introducir esta tabla sera:
3
OPTIONS ls=70;
DATA respira;
INPUT treat $ outcome $ count;
datalines;
placebo f 16
placebo u 48
test f 40
test u 20
;
proc freq;
weight count;
tables treat*outcome;
RUN;
Salida SAS

Procedimiento FREQ
Tabla de treat por outcome
treat outcome
Frequencia|
Porcentaje|
Pct fila |
Pct col | | | Total
-----------------------------
placebo | 16 | 48 | 64
| 12.90 | 38.71 | 51.61
| 25.00 | 75.00 |
| 28.57 | 70.59 |
-----------------------------
test | 40 | 20 | 60
| 32.26 | 16.13 | 48.39
| 66.67 | 33.33 |
| 71.43 | 29.41 |
-----------------------------
Total 56 68 124
45.16 54.84 100.00

Estos datos pueden estar grabados en forma de matriz de datos, es decir, cada indi-
viduo esta representado por una unica observaci on.
En SAS el programa sera semejante al anterior, pero no se tiene que usar el comando
weight.
4
OPTIONS ls =70;
DATA respira ;
INPUT treat $ outcome $ @@;
datalines;
placebo f placebo f placebo f
placebo f placebo f
placebo u placebo u placebo u
placebo u placebo u placebo u
placebo u
test f test f test f
test f test f
test u test u test u
test u test u test u
test u test u test u
test u test u
;
proc freq;
tables treat*outcome;
RUN;
TITLE Diagrama de Barras ;
PROC GCHART DATA=respira;
VBAR outcome;
RUN;
TITLE Diagrama de Barras Horizontal ;
PROC GCHART DATA=respira;
HBAR outcome/ DISCRETE;
RUN;
TITLE Diagrama de tartas ;
PROC GCHART DATA=respira;
PIE outcome/ DISCRETE VALUE=INSIDE
PERCENT=INSIDE SLICE=OUTSIDE;
RUN;
5
Salida SAS

Procedimiento FREQ
Tabla de treat por outcome
treat outcome
Frequencia|
Porcentaje|
Pct fila |
Pct col | | | Total
-----------------------------
placebo | 5 | 7 | 12
| 17.86 | 25.00 | 42.86
| 41.67 | 58.33 |
| 50.00 | 38.89 |
-----------------------------
test | 5 | 11 | 16
| 17.86 | 39.29 | 57.14
| 31.25 | 68.75 |
| 50.00 | 61.11 |
-----------------------------
Total 10 18 28
35.71 64.29 100.00

Cuando se consideran datos ordinales, es importante asegurase de que los niveles de
las las y columnas se ordenen correctamente, ya que los datos en SAS se ordenan de
forma alfanumerica por defecto. Para ello se usa el comando order=data.
Por ejemplo, supongamos la siguiente tabla:
Mejora
Sexo Tratamiento Alta Escasa Ninguna
Mujer Activo 16 5 6
Mujer Placebo 6 7 19
Hombre Activo 5 2 7
Hombre Placebo 1 0 10
6
El programa en SAS para introducir la tabla anterior es
OPTIONS ls =70;
DATA artritis;
INPUT sex $ treat $ improve $ count @@;
datalines;
female active marked 16 female active some 5 female active none 6
female placebo marked 6 female placebo some 7 female placebo none 19
male active marked 5 male active some 2 male active none 7
male placebo marked 1 male placebo some 0 male placebo none 10
;
RUN;
PROC freq order = data;
weight count;
tables sex*treat*improve / nocol nopct ;
RUN;
TITLE Diagrama de Tartas ;
PROC GCHART DATA=artritis;
pie3d improve / sumvar=count;
RUN;
TITLE Diagrama de Barras ;
PROC GCHART DATA=artritis;
hbar3d improve / sumvar=count patternid=midpoint group=sex;
RUN;
Se obtiene el siguiente resultado.
7
Salida SAS

Procedimiento FREQ
Tabla 1 de treat por improve
Controlando para sex=female
treat improve
Frequencia|
Pct fila |marked |some |none | Total
--------------------------------------
active | 16 | 5 | 6 | 27
| 59.26 | 18.52 | 22.22 |
--------------------------------------
placebo | 6 | 7 | 19 | 32
| 18.75 | 21.88 | 59.38 |
--------------------------------------
Total 22 12 25 59
Tabla 2 de treat por improve
Controlando para sex=male
treat improve
Frequencia|
Pct fila |marked |some |none | Total
--------------------------------------
active | 5 | 2 | 7 | 14
| 35.71 | 14.29 | 50.00 |
--------------------------------------
placebo | 1 | 0 | 10 | 11
| 9.09 | 0.00 | 90.91 |
--------------------------------------
Total 6 2 17 25

Ejemplo con R
datos = c(16, 40, 48, 20)
tabla = cbind(expand.grid(list(Tratamiento=c("Placebo","Test"),
Situacion=c("Favor","Desfavor"))), count=datos)
# Opcion simple
ftable(xtabs(count Tratamiento + Situacion , tabla ))
# Opcion tipo SAS
library(gmodels)
CrossTable(xtabs(count Tratamiento + Situacion , tabla),
expected=TRUE , format="SAS")
8
Distribuci on multinomial en tablas 2 2
Cuando se considera muestras aleatorias, es habitual considerar que los recuentos de
las casillas en las tablas de contingencia se distribuyen como una multinomial.
En el muestreo multinomial, jamos el tama no total n pero no los totales de la y
columna. As se modeliza la situaci on de que las las se reeren a diferentes grupos, los
tama nos muestrales est an jados previamente en el experimento, pero los totales por
las y columnas no lo est an. Si se tienen I J casillas con observaciones, la distribucion
de probabilidad de los recuentos es
n!
n
11
! n
IJ
!

n
ij
ij
.
A veces, las observaciones en una variable respuesta Y aparecen de manera separada
seg un cada nivel de una variable explicativa X. En este caso se trata los totales por las
como jos.
Se simplica la notacion de modo que n
i+
= n
i
, y suponemos que las n
i
en Y , para
un nivel jado de i of X, son independientes entre s y con distribuci on de probabilidad
_

1|i
, . . . ,
J|i
_
.
Los recuentos {n
ij
, j = 1, . . . , J} tal que

j
n
ij
= n
i
, se distribuyen como
n
i
!

j
n
ij
!

n
ij
j|i
. (1)
Cuando las muestras que se toman en diferentes niveles de X son independientes, la
distribuci on conjunta de todos los datos es el producto de distribuciones multinomiales [1]
para cada nivel i de X. Este esquema se denomina muestreo multinomial independiente
o muestreo de producto de multinomiales.
Ejemplos
Consideremos el estudio del n umero de accidentes mortales y no mortales, con cin-
tur on y sin cintur on.
Muestreo multinomial: Tomamos un muestra aleatoria de 200 accidentes que tuvieron
lugar el mes pasado y jamos el tama no total de la muestra.
Muestreo multinomial (binomial aqu) independiente: Tomamos una muestra de 100
accidentes donde hubo muertos y otros 100 en los que no hubo muertos. Fijamos los
totales por columna.
9
Comparaci on de proporciones en tablas 2 2
Muchos estudios se dise nan para comparar grupos bas andonos en una respuesta Y
binaria. Con dos grupos tenemos una tabla de contingencia 2 2.

Exito Fracaso
Grupo 1
1|1

2|1
Grupo 2
1|2

2|2
Se denota

1|i
=
i

2|i
= 1
1|i
= 1
i
de modo que la tabla se puede reescribir como
Exito Fracaso
Grupo 1
1
1
1
Grupo 2
2
1
2
Se quiere comparar
1
con
2
. Para ello, se puede estudiar,
(i ) La diferencia de las proporciones

2
(ii ) El riesgo relativo

2
(iii) La razon de odds:
=

1
/(1
1
)

2
/(1
2
)
Ejemplo:
Inuencia de la toma de aspirina respecto a los ataques cardacos:
Ataque No ataque
Placebo 189 10845
Aspirina 104 10933
10
Para contrastar H
0
: p
1
= p
2
(igual probabilidades de ataque al coraz on por grupo),
se puede usar el comando prop.test
Para contrastar una hip otesis unilateral, H
0
: p
1
p
2
frente a H
1
: p
1
< p
2
se hace
usando la opci on alternative.
x = c(104, 189) # aspirina y placebo
n = c((189+10845) , (104+10933))
prop.test(x, n)
prop.test(x, n, alt="less")
Se obtiene
Salida R

2-sample test for equality of proportions with continuity correction
data: x out of n
X-squared = 24.3828 , df = 1, p-value = 7.897e-07
alternative hypothesis: two.sided
95 percent confidence interval:
-0.010807464 -0.004590148
sample estimates:
prop 1 prop 2
0.009425412 0.017124219
2-sample test for equality of proportions with continuity correction
data: x out of n
X-squared = 24.3828 , df = 1, p-value = 3.949e-07
alternative hypothesis: less
95 percent confidence interval:
-1.000000000 -0.005075369
sample estimates:
prop 1 prop 2
0.009425412 0.017124219

Se pueden obtener las proporciones a partir del componente estimate que en este
caso es un vector numerico de longitud 2. As, la diferencia de las proporciones se calcula
como:
temp = prop.test(x,n)
names(temp$estimate) = NULL
temp$estimate [1]-temp$estimate [2]
[1] -0.007698806
Se puede calcular tambien el riesgo relativo y la raz on de odds:
11
# Riesgo relativo
temp$estimate [2]/temp$estimate [1]
[1] 1.816814
# Razon de odds
x[2]*(n[1]-x[1])/(x[1]*(n[2]-x[2]))
[1] 1.831045
Para programar las razones de odds en SAS, se usa:
OPTIONS ls=70;
DATA riesgos;
INPUT ataque $ medica $ cuenta;
datalines;
ataque placebo 189
ataque aspirina 104
NOataque placebo 10845
NOataque aspirina 10933
;
PROC freq order=data;
weight cuenta;
tables ataque*medica / nocol;
exact or;
RUN;
Se obtiene el siguiente resultado.
12
Salida SAS

The FREQ Procedure
Table of ataque by medica
ataque medica
Frequency|
Percent |
Row Pct |placebo |aspirina| Total
---------.--------.--------.
ataque | 189 | 104 | 293
| 0.86 | 0.47 | 1.33
| 64.51 | 35.49 |
---------.--------.--------.
NOataque | 10845 | 10933 | 21778
| 49.14 | 49.54 | 98.67
| 49.80 | 50.20 |
---------.--------.--------.
Total 11034 11037 22071
49.99 50.01 100.00
Statistics for Table of ataque by medica
Estimates of the Relative Risk (Row1/Row2)
Type of Study Value 95 % Confidence Limits
-----------------------------------------------------------------
Case -Control (Odds Ratio) 1.8321 1.4400 2.3308
Cohort (Col1 Risk) 1.2953 1.1886 1.4116
Cohort (Col2 Risk) 0.7070 0.6056 0.8255
Odds Ratio (Case -Control Study)
-----------------------------------
Odds Ratio 1.8321
Asymptotic Conf Limits
95 % Lower Conf Limit 1.4400
95 % Upper Conf Limit 2.3308
Exact Conf Limits
95 % Lower Conf Limit 1.4323
95 % Upper Conf Limit 2.3539
Sample Size = 22071

13
Odds y raz on de odds
Si es la probabilidad de exito entonces los odds se denen como
=

1
o de modo equivalente
=

+ 1
.
Se tiene que > 1 cuando un exito es m as probable que un fallo.
Por ejemplo, cuando = 0,75, entonces
=
0,75
0,25
= 3
es decir un exito es tres veces mas probable que un fallo.
Si se tiene una tabla 2 2 se pueden denir los odds en la la i:

i
=

i
1
i
.
El cociente de los odds de las dos las se denomina razon de odds:
=

1

2
=

1
/ (1
1
)

2
/ (1
2
)
y se obtiene de manera equivalente cuando se tiene distribuciones conjuntas
ij
que
=

11

22

12

21
por lo que tambien se denomina cociente de los productos cruzados.
Propiedades
Puede ser cualquier valor positivo.
= 1 signica que no hay asociacion entre X e Y .
Valores de alejados de 1 indican una asociaci on mayor.
Se suele trabajar con log ya que el valor que se obtiene es simetrico respecto a
cero.
La razon de odds no cambia cuando se intercambian las y columnas.
14
Raz on de odds condicionales y marginales
Las asociaciones marginales y condicionales pueden ser descritas mediante la raz on
de odds.
Supongamos una tabla 2 2 K, si denominamos
ijk
a la frecuencia esperada en
la celda correspondiente.
Fijamos Z = k, y se dene la raz on de odds condicional como

XY (k)
=

11k

22k

12k

21k
y la raz on de odds marginal como

XY
=

11+

22+

12+

21+
Si se sustituyen los valores de
ijk
por las frecuencias observadas se obtienen las
razones de odds muestrales.
Un valor de igual a 1 en la razon de odds supone, o bien independencia marginal, o
bien condicionada a que Z = k, es decir, si
XY (k)
= 1.
Nota:
La independencia condicional a que Z = k es equivalente a que
P (Y = j|X = i, Z = k) = P (Y = j|Z = k)
para todo i, j.
Si se cumple para todo valor de la variable Z, entonces se dice que X e Y son
condicionalmente independientes dado Z y se obtiene que

ijk
=

i+k

+jk

++k
para cualquier i, j, k.
La independencia condicional no implica la independencia marginal.
Ejemplo
Consideramos un ejemplo famoso en USA sobre procesamientos por asesinatos m ulti-
ples en Florida entre los a nos 1976 y 1987:
15
Raza Raza Pena de Muerte Porcentaje
Victima Acusado Si No Si
Blanca Blanco 53 414 11.3
Negro 11 37 22.9
Negro Blanco 0 16 0
Negro 4 139 2.8
Total Blanco 53 430 11
Negro 15 176 7.9
Esta es una tabla de contingencia 222 El ejemplo de la pena de muerte sirve para
ilustrar las razones de odds condicionales. Se estudia el efecto de la raza del acusado
(X) en el veredicto de culpabilidad (Y ), tratando a la raza de la vctima (Z) como si
fuera una variable control.
vic.raza = c("blanca", "negra")
def.raza = vic.raza
pena.muerte = c("SI", "NO")
datalabel = list(acusado=def.raza ,muerte=pena.muerte ,victima=vic.raza)
tabla = expand.grid(acusado=def.raza ,muerte=pena.muerte ,victima=vic.raza)
data = c(53, 11, 414, 37, 0, 4, 16, 139)
tabla = cbind(tabla , recuento=data)
xtabs(recuento acusado+muerte+victima , data=tabla)
Se obtiene
Salida R

, , victima = blanca
muerte
acusado SI NO
blanca 53 414
negra 11 37
, , victima = negra
muerte
acusado SI NO
blanca 0 16
negra 4 139

Se calculan la raz on de odds condicionales.
temp = xtabs(recuento acusado+muerte+victima , data=tabla)
apply(temp , 3, function(x) x[1,1] * x[2, 2]/(x[2,1] * x[1 ,2]))
# Con el paquete vcd
library(vcd)
summary(oddsratio(temp , log=F, stratum =3))
Se obtiene en ambos casos
16
Salida R

blanca negra
0.4306105 0.0000000
Odds Ratio
blanca 0.4306
negra 0.9394

Se obtienen resultados diferentes en ambos casos, ya que la funci on oddsratio a nade
0.5 a cada casilla de la tabla.
Asociacion Homogenea
Una tabla 2 2 K tiene una asociaci on XY homogenea cuando

XY (1)
=
XY (2)
= =
XY (K)
El tipo de asociacion entre X e Y es el mismo para las distintas categoras de Z.
La independencia condicional entre X e Y es un caso particular donde
XY (K)
= 1.
Si existe una asociacion XY homogenea entonces tambien tenemos una asociacion
XZ homogenea y una asociaci on Y Z homogenea. Se dice tambien que no existe inter-
acci on entre las dos variables con respecto a sus efectos en la otra variable.
Cuando existe interaccion, la raz on de odds para cada par de variables cambia a lo
largo de las categoras de la tercera variable.
Ejemplo
X fumador (s, no)
Y c ancer de pulm on (s, no)
Z = edad (< 45, 45 65, > 65)
Si las razones de odds observadas son

XY (1)
= 1,2

XY (2)
= 3,9

XY (3)
= 8,8
El efecto de fumar se acent ua conforme la edad es mayor. La edad se denomina efecto
modicador, dado que el efecto de fumar queda modicado por la edad de las personas.
17
Inferencia en tablas de contingencia
Intervalos de conanza para parametros de asociaci on
Intervalo para la razon de odds
El estimador que se utiliza para la razon de odds es

=
n
11
n
22
n
12
n
21
Este estimador puede ser 0 o (si alg un n
ij
= 0) o no estar denido (0/0) dependiendo
de los recuentos que se tengan.
Una posible opci on es trabajar con el estimador corregido:

=
(n
11
+ 0,5) (n
22
+ 0,5)
(n
12
+ 0,5) (n
21
+ 0,5)
o bien con la transformacion log(

).
Una estimacion del error est andar de log(

) es

log(

)
=
_
1
n
11
+
1
n
12
+
1
n
21
+
1
n
22
_1
2
de modo que el correspondiente intervalo de Wald es
log(

) z

2

log(

)
Si se toman las exponenciales (antilogaritmo) de los extremos se obtiene el intervalo
correspondiente para .
El test es algo conservador (la probabilidad de cubrimiento es algo mayor que el nivel
nominal).
Intervalo de conanza para la diferencia de proporciones
Supongamos que tenemos muestras de binomiales independientes, de modo que en
el grupo i tenemos Y
i
Binom(n
i
,
i
) de modo que el estimador es

i
=
Y
i
n
i
y la media y desviacion est andar son
E (
1

2
) =
1

(
1

2
)
=
_

1
(1
1
)
n
1
+

2
(1
2
)
n
2
_
1/2
,
18
de modo que un estimador es

(
1

2
)
=
_

1
(1
1
)
n
1
+

2
(1
2
)
n
2
_
1/2
.
El intervalo de conanza de Wald es

1

2
z

2

(
1

2
)
Cuando los valores de
1
y
2
est an proximos a 0 o a 1 este intervalo tiene una proba-
bilidad de cubrimiento menor que la teorica que se considera.
Intervalo de conanza para el riesgo relativo
El riesgo relativo muestral viene dado por
r =

1

2
Se preere usar mejor el logaritmo ya que converge m as r apido a la normal. El estimador
del correspondiente error est andar es

log(r)
=
_
1
1
n
1

1
+
1
2
n
2

2
_
1/2
El intervalo de conanza de Wald para log(

1

2
) es
log(r) z

2

log(r)
Ejemplo
Por ejemplo, en la tabla de contingencia sobre el uso de la aspirina y el infarto de
miocardio.
Infarto Miocardio
SI NO Total
Placebo 28 656 684
Aspirina 18 658 656
Se crea la tabla en R:
Medicina <- c("Placebo", "Aspirina")
Infarto <- c("SI", "NO")
tabla <- expand.grid(Medicina=Medicina , Infarto=Infarto)
datos <- c(28, 18, 656, 658)
tabla <- cbind(tabla , count=datos)
temp = tapply(tabla$count , tabla[, 1:2], sum)
19
Para calcular los intervalos, se puede usar la funcion de R escrita por Laura A.
Thompson (R (and S-PLUS) Manual to Accompany Agrestis Categorical Data Analysis
(2009)):
# Function from Laura A. Thompson
Wald.ci <-function(Table , aff.response , alpha=.05){
# Gives two -sided Wald CIs for odds ratio ,
# difference in proportions and relative risk.
# Table is a 2x2 table of counts with rows giving
# the treatment populations
# aff.response is a string like "c(1 ,1)" giving the cell
# of the beneficial response and the treatment category
# alpha is significance level
pow <-function(x, a=-1) x^a
z.alpha <-qnorm(1-alpha/2)
if(is.character(aff.response )) where <-eval(parse(text=aff.response ))
else where <-aff.response
Next <-as.numeric(where ==1) + 1
# OR
odds.ratio <-Table[where [1],where [2]]*Table[Next[1],Next [2]]/
(Table[where [1],Next [2]]*Table[Next[1],where [2]])
se.OR <-sqrt(sum(pow(Table )))
ci.OR <-exp(log(odds.ratio) + c(-1,1)*z.alpha*se.OR)
# difference of proportions
p1<-Table[where[1], where [2]]/(n1<-Table[where[1],Next [2]] +
Table[where [1],where [2]])
p2<-Table[Next[1], where [2]]/(n2<-Table[Next[1], where [2]] +
Table[Next[1],Next [2]])
se.diff <-sqrt(p1*(1-p1)/n1 + p2*(1-p2)/n2)
ci.diff <-(p1 -p2) + c(-1,1)*z.alpha*se.diff
# relative risk
RR<-p1/p2
se.RR <-sqrt((1-p1)/(p1*n1) + (1-p2)/(p2*n2))
ci.RR <-exp(log(RR) + c(-1,1)*z.alpha*se.RR)
list(OR=list(odds.ratio=odds.ratio , CI=ci.OR),
proportion.difference=list(diff=p1-p2, CI=ci.diff),
relative.risk=list(relative.risk=RR,CI=ci.RR ))
}
As, aplicando la funcion anterior, se obtiene las estimaciones y los intervalos de
conanza para las razones de odds, la diferencia de proporciones y el riesgo relativo.
Wald.ci(temp , c(1, 1))
20
Se obtiene:
Salida R

odds.ratio
1.560298
odds.ratio -CI
0.8546703 2.8485020
proportion.difference
0.01430845
proportion.difference -CI
-0.004868983 0.033485890
relative.risk
1.537362
relative.risk -CI
0.858614 2.752671

Como el intervalo de conanza para es igual a (0,8546703; 2,8485020), y este con-
tiene a 1, entonces es razonable pensar que la verdadera raz on de odds para la muerte
por infarto de miocardio, es igual para los casos de toma de aspirina y placebo.
Quiz as se necesitara tomar una muestra mayor, para comprobar el posible efecto
benecioso de la aspirina, dado que con este ejemplo la razon de odds no es grande.
21
Contraste de independencia en tablas de doble entrada
Los contrastes de independencia se pueden aplicar tanto para muestreo multinomial
(con I J categoras) como para muestreo multinomial independiente (para las distintas
las).
En el primer caso se contrasta independencia y en el segundo, homogeneidad.
El contraste que se plantea es
H
0
:
ij
=
i+

+j
para todo i, j.
H
1
:
ij
=
i+

+j
para alg un i, j.
Se utiliza el contraste de Pearson.
Si es cierta H
0
entonces el n umero esperado de observaciones en cada casilla es
E (n
ij
) = n
i+

+j
=
ij
y los estimadores de maxima verosimilitud son

ij
= n
i+

+j
= n
n
i+
n
n
+j
n
=
n
i+
n
+j
n
Se utiliza el siguiente estadstico
X
2
=

j
(n
ij

ij
)
2

ij
Si es cierta H
0
, entonces
X
2

2
(I1)(J1)
es decir un test de la chi cuadrado.
Otra alternativa es usar el test del cociente de verosimilitudes
G
2
= 2

j
n
ij
log
n
ij

ij
que tambien se distribuye como
2
(I1)(J1)
cuando H
0
es cierta.
Se rechaza para valores grandes de X
2
. La convergencia a la distribucion chi cuadrado
es mas r apida para X
2
que para G
2
.
La aproximaci on para X
2
puede ser razonablemente buena si las frecuencias espera-
das son mayores que 1 y la mayor parte son mayores que 5.
Cunado no se pueden aplicar, se pueden utilizar metodos para muestras peque nas.
22
Ejemplo
Creencias Religiosas
Educaci on Fundamentalista Moderada Liberal Total
< Secundaria 178 138 108 424
Secundaria 570 648 442 1660
Graduado 138 252 252 642
Total 886 1038 802 2726
religion.recuento <- c(178, 138, 108, 570, 648, 442, 138, 252, 252)
tabla = cbind(expand.grid(list(Religiosidad = c("Fund",
"Mod", "Lib"), Grado = c("<HS", "HS o JH", "Graduado"))),
count = religion.recuento)
tabla.array = tapply(tabla$count , tabla[, 1:2], sum)
(res = chisq.test(tabla.array ))
# Recuentos esperados
res$expected
Se obtiene
Salida R

Pearson s Chi -squared test
data: tabla.array
X-squared = 69.1568 , df = 4, p-value = 3.42e-14
Grado
Religiosidad <HS HS o JH Graduado
Fund 137.8078 539.5304 208.6618
Mod 161.4497 632.0910 244.4593
Lib 124.7425 488.3786 188.8789

Los contrastes y las frecuencias esperadas pueden obtenerse con el paquete vcd.
library(vcd)
assocstats(tabla.array)
Se obtiene
Salida R

X^2 df P(> X^2)
Likelihood Ratio 69.812 4 2.4869e-14
Pearson 69.157 4 3.4195e-14
Phi -Coefficient : 0.159
Contingency Coeff .: 0.157
Cramer s V : 0.113

23
Con la funci on chisq.test tambien se pueden hacer contrastes por simulacion Mon-
tecarlo, es decir, calculando el estadstico de la chi cuadrado para todas las posibles
tablas con las mismas sumas marginales por las y columnas de la tabla original.
chisq.test(tabla.array , sim=T, B=2000)
Se obtiene
Salida R

Pearson s Chi -squared test with simulated p-value
(based on 2000 replicates)
data: tabla.array
X-squared = 69.1568 , df = NA , p-value = 0.0004998

Ejemplo
Consideramos la siguiente tabla en relacion a las primarias del partido dem ocrata en
2008, en una muestra de un distrito electoral.
Candidato
Genero Clinton Obama Total
Hombre 200 406 606
Mujer 418 418 836
Total 618 824 1442
El programa en SAS sera
OPTIONS ls=70;
DATA primarias;
INPUT genero $ candidato $ recuento;
DATALINES;
Hombre Clinton 200
Hombre Obama 406
Mujer Clinton 418
Mujer Obama 428
;
proc freq order=data;
weight recuento;
tables genero*candidato/expected deviation chisq relrisk;
RUN;
En la ultima lnea se pide la tabla de contingencia con las las representadas por la
primera variable y las columnas por la segunda variable. Se pide, despues,
24
Las frecuencias esperadas suponiendo independencia (expected)
Discrepancia entre las frecuencias observadas y las esperadas (deviation)
Test chi cuadrado de independencia (chisq)
Raz on de Odds (relrisk)
25
Salida SAS

Procedimiento FREQ
Tabla de genero por candidato
genero candidato
Frecuencia|
Esperada |
Desviacion|
Porcentaje|
Pct fila |
Pct col |Clinton |Obama | Total
----------.--------.--------.
Hombre | 200 | 406 | 606
| 257.93 | 348.07 |
| -57.93 | 57.926 |
| 13.77 | 27.96 | 41.74
| 33.00 | 67.00 |
| 32.36 | 48.68 |
----------.--------.--------.
Mujer | 418 | 428 | 846
| 360.07 | 485.93 |
| 57.926 | -57.93 |
| 28.79 | 29.48 | 58.26
| 49.41 | 50.59 |
| 67.64 | 51.32 |
----------.--------.--------.
Total 618 834 1452
42.56 57.44 100.00
Estadisticos para Tabla de genero por candidato
Estadistico DF Valor Probabilidad
----------------------------------------------------------------------
Chi -cuadrado 1 38.8726 <.0001
Ratio chi -cuadrado de la verosimilitud 1 39.3080 <.0001
Adj. chi -cuadrado de continuidad 1 38.2044 <.0001
Chi -cuadrado Mantel -Haenszel 1 38.8458 <.0001
Coeficiente Phi -0.1636
Coeficiente de contingencia 0.1615
V de Cramer -0.1636

26
Salida SAS

Test exacto de Fisher
------------------------------------
Celda (1,1) Frecuencia (F) 200
Left -sided Pr <= F 2.580E-10
Right -sided Pr >= F 1.0000
Table Probability (P) 1.300E-10
Two -sided Pr <= P 4.029E-10
Estimadores de riesgo relativo (fila1/fila2)
Tipo de estudio Valor 95 % Limites de confianza
--------------------------------------------------------------------
Case -Control (Odds Ratio) 0.5044 0.4062 0.6263
Cohort (Col1 Risk) 0.6680 0.5852 0.7625
Cohort (Col2 Risk) 1.3243 1.2140 1.4446
Tamano de la muestra = 1452

La salida presenta la tabla de contingencia, con
la frecuencia observada,
la frecuencia esperada (asumiendo independencia),
la desviacion entre las frecuencias observadas y esperadas,
la contribuci on de la anterior desviaci on al valor global del estadstico de la chi-
cuadrado.
Los restantes valores representan la proporcion de casillas con respecto al n umero
total de observaciones, la proporci on relativa de las observaciones totales de la la, y la
proporci on relativa a las observaciones totales en la columna, respectivamente.
Finalmente, aparece la prueba de independencia (incluyendo la prueba chi-cuadrado,
y la prueba exacta de Fisher). De acuerdo a la salida, la chi cuadrado de Pearson es
igual a 41.44, con un p-valor menor que 0.0001, por lo que se rechaza la hip otesis nula
de independencia. El test de la razon de verosimilitudes presenta resultados similares:
41.92 y un valor de p-valor inferior a 0.0001.
27
Test de independencia con muestras peque nas
Test exacto de Fisher para tablas 2 2
Todos los procedimientos vistos hasta ahora se basan en distribuciones asintoticas. Si
tenemos muestras grandes no hay problemas, pero con muestras peque nas es preferible
usar contrastes exactos.
Consideramos una tabla 2 2 donde la hip otesis nula es de independencia entre las
dos variables. Esto corresponde a que la raz on de odds es igual a uno, = 1.
Supongamos que los recuentos de las casillas {n
ij
} provienen de dos muestras aleato-
rias independientes, o de una unica distribuci on multinomial denida sobre las 4 casillas
de la tabla. Se consideran todas las posibles tablas, que tienen como totales por las
y columnas los valores observados en los datos reales; entonces la distribuci on de los
recuentos de las casillas es una hipergeometrica.
Si condicionamos a los totales por la y columna, solamente nos queda libre o sin jar
un recuento, por ejemplo n
11
, de modo que este determina los otros tres recuentos de las
casillas. As, la distribucion hipergeometrica expresa la probabilidad de los recuentos, en
terminos de s olo n
11
:
p(t) = P (n
11
= t) =
_
n
1+
t
__
n
2+
n
+1
t
_
_
n
n
+1
_
donde los posibles valores son
m

n
11
m
+
con
m

= max {0, n
1+
+n
+1
n}
m
+
= mn {n
1+
, n
+1
}
Dados los valores totales de las marginales, las tablas que tienen mayores valores n
11
tambien tienen mayores valores de la raz on de odds
=
n
11
n
22
n
12
n
21
,
El contraste de independencia entre las dos variables se puede formular como
H
0
: 1
H
1
: > 1
28
El p-valor es igual a la probabilidad de la cola derecha de la distribucion hiper-
geometrica de que n
11
sea al menos tan grande como el observado, digamos t
0
,
P (n
11
t
0
) ,
de modo que se tiene una evidencia mas fuerte a favor de H
1
.
Ejemplo
Consideramos un ejemplo cl asico de Fisher. Un colega suyo armaba que era capaz
de distinguir en una taza de te con leche, que se haba echado primero, si la leche o
el te. Para comprobarlo dise no un experimento donde se probaban 8 tazas de te. De
ellas, en 4 se haba echado primero la leche, y en las otras 4, primero el te. Se trataba
de adivinar en que orden se haba echado la leche y el te. Las tazas se presentaron de
manera aleatoria, y se obtuvo:
Prediccion
Primer Servicio Leche Te Total
Leche 3 1 4
Te 1 3 4
Total 4 4
Evidentemente las distribuciones marginales estan jadas en 4.
La distribucion nula de n
11
es una hipergeometrica denida para todas las tablas
2 2 que tienen como marginales (4, 4).
Los posibles valores para n
11
son (0, 1, 2, 3, 4).
En la tabla observada, si se adivinan 3 de las 4 tazas donde se ha echado primero
leche, la probabilidad es
P(3) =
_
4
3
__
4
1
_
_
8
4
_ =
16
70
= 0,23
As, para que se apoye la hip otesis H
1
: > 1 el unico valor extermo que se obtiene
es con n
11
= 4, es decir que se adivinen todas.
P(4) =
_
4
4
__
4
0
_
_
8
4
_ =
1
70
= 0,014
29
Alternativa bilateral
Lo que aparece habitualmente programado en el software estadstico es
p = P (p(n
11
) p(t
0
))
donde p(t
0
) = P(n
11
= t
0
)
Es decir, se suman las probabilidades de todas aquellas tablas que son menos o igual
de probables que la tabla observada.
En el ejemplo de las tazas de te, se tiene que
P (n
11
= 0) = 0,014
P (n
11
= 1) = 0,229
P (n
11
= 2) = 0,514
P (n
11
= 3) = 0,229
P (n
11
= 4) = 0,014
Por tanto, se suman todas las probabilidades que son menores o iguales que la probabi-
lidad P(3) = 0,229 de la tabla observada. Se obtiene,
P(0) + P(1) + P(3) + P(4) = 0,486
# Alternativa bilateral
(fisher.test(matrix(c(3, 1, 1, 3), byrow=T, ncol =2)))
# Alternativa unilateral
(fisher.test(matrix(c(3, 1, 1, 3), byrow=T, ncol=2),
alternative="greater"))
# Hipotesis nula: razon de odds ratio igual a 0.2
(fisher.test(matrix(c(3, 1, 1, 3), byrow=T, ncol=2),
or=0.2))
Se obtiene
Salida R

Fisher s Exact Test for Count Data
data: matrix(c(3, 1, 1, 3), byrow = T, ncol = 2)
p-value = 0.4857
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.2117329 621.9337505
30
sample estimates:
odds ratio
6.408309
.............................................................
Fisher s Exact Test for Count Data
data: matrix(c(3, 1, 1, 3), byrow = T, ncol = 2)
p-value = 0.2429
alternative hypothesis: true odds ratio is greater than 1
95 percent confidence interval:
0.3135693 Inf
sample estimates:
odds ratio
6.408309
.............................................................
Fisher s Exact Test for Count Data
data: matrix(c(3, 1, 1, 3), byrow = T, ncol = 2)
p-value = 0.02246
alternative hypothesis: true odds ratio is not equal to 0.2
95 percent confidence interval:
0.2117329 621.9337505
sample estimates:
odds ratio
6.408309

31
Categoras Ordinales
Es muy frecuente que las categoras en las tablas presenten una ordenaci on entre las
categoras. Este hecho no lo tienen en cuenta los tests de la
2
.
Para tratar con variables ordinales, es mejor asignar rangos a las categoras de X
(u
1
. . . u
n
) y a las categoras de Y (v
1
. . . v
n
) de modo que se conserve la
ordenaci on original.
Si se denomina r al coeciente de correlaci on entre los rangos, entonces el estadstico
M
2
= (n 1)r
2

2
1
para muestras grandes. Se rechaza la hipotesis de independencia para valores grandes
de M
2
.
La hipotesis alternativa es que existe una relaci on lineal entre las variables X e Y .
Ejemplo
En la siguiente tabla las variables son ingresos y satisfaci on en el trabajo en una
muestra dada. Ambas variables son ordinales, de modo que las categoras de satisfacci on
laboral son donde MI : muy insatisfecho, PI : un poco insatisfecho, S: satisfecho, MS:
muy satisfecho.
Satisfacion laboral
Ingresos (miles $) MI PI S MS
< 15 1 3 10 6
15 25 2 3 10 7
25 40 1 6 14 12
> 40 0 1 9 11
income <- c(" <15000", "15000 -25000", "25000 -40000", " >40000")
jobsat <- c("VD", "LD", "MS", "VS")
tabla <- expand.grid(income = income , jobsat = jobsat)
data <- c(1, 2, 1, 0, 3, 3, 6, 1, 10, 10, 14, 9, 6, 7, 12, 11)
tabla <- cbind(tabla , count = data)
levels(tabla$income) <- c(7.5 , 20, 32.5 , 60)
levels(tabla$jobsat) <- 1:4
res <- apply(tabla[, 1:2], 2, function(x)
{as.numeric(rep(x, tabla$count ))})
(cor(res)[2, 1]^2)*(nrow(res) - 1)
1 - pchisq (3.807461 , 1)
Se obtiene
32
Salida R

> (cor(res)[2, 1]^2)*(nrow(res) - 1)
[1] 3.807461
> 1 - pchisq (3.807461 , 1)
[1] 0.05102474

Se puede considerar una hipotesis alternativa mas debil: la relaci on entre las variables
ordinales es mon otona.
En ese caso se puede considerar el coeciente de asociacion gamma de Goodman
y Kruskal. Se tiene que 1 < < 1, la independencia implica que = 0, aunque lo
contrario no es cierto.
Gamma2.f <-function(x, pr=0.95)
{
# Subrutina de L. Thompson
# x is a matrix of counts.
# You can use output of crosstabs or xtabs in R.
# A matrix of counts can be formed from a data frame
# by using design.table.
# Confidence interval calculation and output from Greg Rodd
# Check for using S-PLUS and output is from crosstabs
if(is.null(version$language) && inherits(x, "crosstabs"))
{ oldClass(x)<-NULL; attr(x, "marginals")<-NULL}
n <- nrow(x)
m <- ncol(x)
pi.c <-pi.d <-matrix(0,nr=n,nc=m)
row.x <-row(x)
col.x <-col(x)
for(i in 1:(n)){
for(j in 1:(m)){
pi.c[i, j]<-sum(x[row.x <i & col.x <j]) +
sum(x[row.x >i & col.x >j])
pi.d[i, j]<-sum(x[row.x <i & col.x >j]) +
sum(x[row.x >i & col.x <j])
}
}
C <- sum(pi.c*x)/2
D <- sum(pi.d*x)/2
psi <-2*(D*pi.c -C*pi.d)/(C+D)^2
sigma2 <-sum(x*psi^2)-sum(x*psi )^2
gamma <- (C - D)/(C + D)
pr2 <- 1 - (1 - pr)/2
CIa <- qnorm(pr2) * sqrt(sigma2) * c(-1, 1) + gamma
list(gamma = gamma , C = C, D = D, sigma = sqrt(sigma2),
33
Level = paste (100 * pr, " %", sep = ""),
CI = paste(c("[", max(CIa[1], -1),
", ", min(CIa[2], 1), "]"), collapse = ""))
}
temp <- xtabs(formula=count income+jobsat , data=tabla)
Gamma2.f(temp)
Se obtiene
Salida R

gamma
[1] 0.2211009
C
[1] 1331
D
[1] 849
sigma
[1] 0.1171628
Level
[1] "95 %"
CI
[1] "[ -0.00853400851071168 , 0.450735843373097]"

Con una estimaci on del error estandar igual a 0.117, el intervalo de conanza al 95 %
de la gamma es igual a (0,01; 0,45). As, el valor de la gamma no resulta signicativa-
mente distinto de 0.
34
Ejemplo
Los datos vienen de un estudio de enfermedades coronarias (Corneld, 1962). Se con-
sideran n = 1329 pacientes clasicados por el nivel de colesterol y si se han diagnosticado
con enfermedad coronaria (CHD).
0-199 200-219 220-259 260+ Totales
CHD 12 8 31 41 92
no CHD 307 246 439 245 1237
Totales 319 254 470 286 1329
OPTIONS nodate ls=70;
/* Se graban los resultados en un fichero rtf
ODS rtf file=d:\kk\cosa.rtf style=minimal startpage=no;
*/
DATA chd;
INPUT CHD $ serum $ count @@;
DATALINES;
chd 0-199 12 chd 200 -199 8 chd 220 -259 31 chd 260+ 41
nochd 0-199 307 nochd 200 -199 246 nochd 220 -259 439 nochd 260+ 245
;
proc freq; weight count;
tables CHD*serum /chisq expected deviation cmh measures;
exact fisher or / alpha =.05;
tables CHD*serum/chm1 scores=ridits;
RUN;
35
Salida SAS

Procedimiento FREQ
Tabla de CHD por serum
CHD serum
Frequencia|
Esperada |
Desviacion|
Porcentaje|
Pct fila |
Pct col |0-199 |200 -199 |220 -259 |260+ | Total
----------.--------.--------.--------.--------.
chd | 12 | 8 | 31 | 41 | 92
| 22.083 | 17.583 | 32.536 | 19.798 |
| -10.08 | -9.583 | -1.536 | 21.202 |
| 0.90 | 0.60 | 2.33 | 3.09 | 6.92
| 13.04 | 8.70 | 33.70 | 44.57 |
| 3.76 | 3.15 | 6.60 | 14.34 |
----------.--------.--------.--------.--------.
nochd | 307 | 246 | 439 | 245 | 1237
| 296.92 | 236.42 | 437.46 | 266.2 |
| 10.083 | 9.5831 | 1.5357 | -21.2 |
| 23.10 | 18.51 | 33.03 | 18.43 | 93.08
| 24.82 | 19.89 | 35.49 | 19.81 |
| 96.24 | 96.85 | 93.40 | 85.66 |
----------.--------.--------.--------.--------.
Total 319 254 470 286 1329
24.00 19.11 35.36 21.52 100.00
Estadisticos para Tabla de CHD por serum
Estadistico DF Valor Probabilidad
----------------------------------------------------------------------
Chi -cuadrado 3 35.0285 <.0001
Ratio chi -cuadrado de la verosimilitud 3 31.9212 <.0001
Chi -cuadrado Mantel -Haenszel 1 26.1475 <.0001
Coeficiente Phi 0.1623
Coeficiente de contingencia 0.1603
V de Cramer 0.1623
Test exacto de Fisher
----------------------------------
Table Probability (P) 2.232E-10
Estimacion Monte Carlo para el test exacto
Pr <= P 0.0000
95 % Lower Conf Limit 0.0000
95 % Upper Conf Limit 2.995E-04
Numero de muestras 10000
Semilla inicial 85206
36
Estadistico Valor ASE
------------------------------------------------------
Gamma -0.4266 0.0764
Kendall s Tau -b -0.1327 0.0250
Stuart s Tau -c -0.0816 0.0167
Somers D C|R -0.3167 0.0578
Somers D R|C -0.0556 0.0114
Correlacion Pearson -0.1403 0.0268
Correlacion Spearman -0.1448 0.0273
Lambda Asymmetric C|R 0.0116 0.0098
Lambda Asymmetric R|C 0.0000 0.0000
Lambda Symmetric 0.0105 0.0089
Uncertainty Coefficient C|R 0.0089 0.0032
Uncertainty Coefficient R|C 0.0477 0.0168
Uncertainty Coefficient Symmetric 0.0149 0.0054
Estadisticos de Cochran -Mantel -Haenszel(Basado
en puntuaciones de tabla)
Estadistico Hipotesis alternativa DF
----------------------------------------------------------------------
1 Correlacion nonzero 1
2 Diferencia de puntuaciones de la media de la fila 1
3 Asociacion general 3
Estadistico Valor Probabilidad
-----------------------------------------
1 26.1475 <.0001
2 26.1475 <.0001
3 35.0021 <.0001
Tamano total de muestra = 1329

37
Salida SAS

Tabla de CHD por serum
CHD serum
Frequencia|
Porcentaje|
Pct fila |
Pct col |0-199 |200 -199 |220 -259 |260+ | Total
----------.--------.--------.--------.--------.
chd | 12 | 8 | 31 | 41 | 92
| 0.90 | 0.60 | 2.33 | 3.09 | 6.92
| 13.04 | 8.70 | 33.70 | 44.57 |
| 3.76 | 3.15 | 6.60 | 14.34 |
----------.--------.--------.--------.--------.
nochd | 307 | 246 | 439 | 245 | 1237
| 23.10 | 18.51 | 33.03 | 18.43 | 93.08
| 24.82 | 19.89 | 35.49 | 19.81 |
| 96.24 | 96.85 | 93.40 | 85.66 |
----------.--------.--------.--------.--------.
Total 319 254 470 286 1329
24.00 19.11 35.36 21.52 100.00
Estadisticos de Cochran -Mantel -Haenszel(Basado en puntuaciones Ridit)
Estadistico Hipotesis alternativa DF
----------------------------------------------------------------------
1 Correlacion nonzero 1
Estadistico Valor Probabilidad
-----------------------------------------
1 27.8381 <.0001
Tamano total de muestra = 1329

38
Algunas medidas de asociacion para tablas que presenta SAS
Consideramos el estadstico de la chi cuadrado:
X
2
=

j
(n
ij

ij
)
2

ij
Coeciente phi ()
Se deriva del estadstico chi cuadrado y se dene como
=
_
X
2
n
Para tablas 2 2 se dene como
=
n
11
n
22
n
12
n
21

n
1+
n
2+
n
+1
n
+2
.
toma como posibles valores
1 1
V de Cramer
Para tablas 22 coincide con el coeciente phi. Para tablas generales se dene como
V =

X
2
/n
mn (I 1, J 1)
toma como posibles valores
1 V 1
Estadstico de Mantel-Haenszel
Contrasta como hipotesis alternativa que existe una relaci on lineal entre las variables
X e Y . Se dene como
Q
MH
= (n 1)r
2
donde r
2
es el coecente de correlaci on de Pearson calculado sobre los rangos de las dos
variables.
Para m as informaci on sobre otros coeciente se puede consultar en:
http://www.math.wpi.edu/saspdf/stat/chap28.pdf
39
Tema 3: Modelos lineales
generalizados
Componentes de un modelo generalizado lineal (GLM)
Un modelo lineal generalizado tiene tres componentes b asicos:
Componente aleatoria: Identica la variable respuesta y su distribuci on de pro-
babilidad.
Componente sistematica: Especica las variables explicativas (independientes
o predictoras) utilizadas en la funcion predictora lineal.
Funcion link: Es una funcion del valor esperado de Y , E(Y ), como una combi-
naci on lineal de las variables predictoras.
Componente aleatoria
La componente aleatoria de un GLM consiste en una variable aleatoria Y con obser-
vaciones independientes (y
1
, . . . , y
N
).
En muchas aplicaciones, las observaciones de Y son binarias, y se identican como
exito y fracaso. Aunque de modo mas general, cada Y
i
indicara el n umero de exitos de
entre un n umero jo de ensayos, y se modelizara como una distribuci on binomial.
En otras ocasiones cada observaci on es un recuento, con lo que se puede asignar a
Y una distribuci on de Poisson o una distribuci on binomial negativa. Finalmente, si las
observaciones son continuas se puede asumir para Y una distribucion normal.
Todos estos modelos se pueden incluir dentro de la llamada familia exponencial de
distribuciones
f (y
i
|
i
) = a (
i
) b (y
i
) exp [y
i
Q(
i
)] ,
de modo que Q() recibe el nombre de parametro natural.
1
Componente Sistematica
La componente sistematica de un GLM especica las variables explicativas, que en-
tran en forma de efectos jos en un modelo lineal, es decir, las variables x
j
se relacionan
como
+
1
x
1
+ +
k
x
k
Esta combinaci on lineal de variables explicativas se denomina predictor lineal.
Alternativamente, se puede expresar como un vector (
1
, . . . ,
N
) tal que

i
=

j
x
ij
donde x
ij
es el valor del j -esimo predictor en el i -esimo individuo, e i = 1, . . . , N. El
termino independiente se obtendra con esta notacion haciendo que todos los x
ij
sean
igual a 1 para todos los i.
En cualquier caso, se pueden considerar variables que est an basadas en otras varia-
bles como x
3
= x
1
x
2
o x
3
= x
2
2
, para modelizar interacciones entre variables o efectos
curvilneos de x
2
.
Funcion link
Se denota el valor esperado de Y como = E(Y ), entonces, la funci on link especica
una funcion g() que relaciona con el predictor lineal como
g() = +
1
x
1
+ +
k
x
k
As, la funci on link g() relaciona las componentes aleatoria y sistem atica.
De este modo, para i = 1, . . . , N,

i
= E (Y
i
)

i
= g(
i
) =

j
x
ij
,
La funcion g m as simple es g() = , esto es, la identidad que da lugar al modelo de
regresi on lineal cl asico
= E(Y ) = +
1
x
1
+ +
k
x
k
Los modelos de regresi on lineal tpicos para respuestas continuas son un caso par-
ticular de los GLM. Estos modelos generalizan la regresion ordinaria de dos modos:
permitiendo que Y tenga distribuciones diferentes a la normal y, por otro lado, incluyen-
do distintas funciones link de la media. Esto resulta bastante util para datos categoricos.
2
Los modelos GLM permiten la unicaci on de una amplia variedad de metodos es-
tadsticos como la regresion, los modelos ANOVA y los modelos de datos categ oricos.
En realidad se usa el mismo algoritmo para obtener los estimadores de maxima verosi-
militud en todos los casos. Este algoritmo es la base del procedimiento GENMOD de SAS
y de la funci on glm de R.
Modelos lineales Generalizados para datos binarios
En muchos casos las respuestas tienen solo dos categoras del tipo s /no de modo
que se puede denir una variable Y que tome dos posibles valores 1 (exito) y 0 (fracaso),
es decir Y Bin(1, ). En este caso
f (y|) =
y
(1 )
1y
= (1 )

y
= (1 ) exp

y log

con y = 0, 1.
El parametro natural es
Q() = log

= logit()
En este caso
E(Y ) = P (Y = 1) = (x)
dependiente de p variables explicativas x = (x
1
, . . . , x
p
) y
V ar(Y ) = (x)(1 (x))
En respuestas binarias, un modelo an alogo al de regresi on lineal es
(x) = + x
que se denomina modelo de probabilidad lineal, ya que la probabilidad de exito cambia
linealmente con respecto a x.
El parametro representa el cambio en probabilidad por unidad de x. Este modelo
es un GLM con un componente aleatorio binomial y con funci on link igual a la identidad.
Sin embargo, este modelo tiene el problema de que aunque las probabilidades deben
estar entre 0 y 1, el modelo puede predecir a veces valores (x) > 1 y (x) < 0.
3
Ejemplo
Se tiene la siguiente tabla donde se eligen varios niveles de ronquidos y se ponen en
relaci on con una enfermedad cardaca. Se toma como puntuaciones relativas de ronquidos
los valores {0, 2, 4, 5}.
Enfermedad Cardiaca
Ronquido SI NO Proporcion de SI
Nunca 24 1355 0.017
Ocasional 35 603 0.055
Casi cada noche 21 192 0.099
Cada noche 30 224 0.118
# Fijamos los niveles de manera ordinal
roncas = c(0, 2, 4, 5)
prop.SI = c(24/(1355+24) , 35/(35+603) , 21/(21+192) , 30/(30+224))
irls = glm(prop.SI roncas)
summary(irls)$coefficients
Se obtiene
Salida R
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.01631222 0.0015861606 10 .28409 0.0093231257
roncas 0.02033780 0.0004729017 43 .00639 0.0005402341
Es decir, el modelo que se obtiene es
= 0,0163 + 0,0203x
Por ejemplo, para gente que no ronca (x = 0) la probabilidad estimada de enfermedad
cardaca sera
= 0,0163
4
Regresi on Logstica
Normalmente las relaciones entre (x) y x son no lineales, de modo que el cambio
en x tiene menor impacto cuando est a cerca de 0 o de 1 que cuando est a mas cerca
de la mitad del rango.
La relacion habitualmente tiene forma de curva en forma sigmoidal, como puede verse
en la gr aca siguiente.
La funcion matem atica que modeliza esta forma es
(x) =
exp ( + x)
1 + exp ( + x)
,
que se denomina la funcion logstica de la que se derivan los modelos de regresi on logsti-
ca:
1 (x) = 1
exp ( + x)
1 + exp ( + x)
=
1
1 + exp ( + x)
por lo que
(x)
1 (x)
= exp ( + x) =
log

(x)
1 (x)

= + x
5
La funcion link log

de se denomina funci on logit, de modo que se asegura


que no exista ning un problema estructural respecto al posible rango de valores de .
El par ametro determina el rango y la velocidad de incremento o decremento de la
curva.
En el ejemplo de los niveles de ronquidos, los resultados que se obtendran son
roncas = c(0, 2, 4, 5)
logit.irls <- glm(cbind(SI=c(24, 35, 21, 30), NO=c(1355 ,
603, 192, 224)) roncas , family=binomial(link=logit))
summary(logit.irls)$coefficients
Se obtiene
Salida R
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.8662481 0.16621436 -23.260614 1.110885e -119
roncas 0.3973366 0.05001066 7.945039 1.941304e -15
De modo que
logit ( (x)) = 3,87 + 0,40x
Como

= 0,40 > 0 la probabilidad de ataque cardaco aumenta cuando los niveles
de ronquidos se incrementan.
6
Regresi on Probit
Otro modelo en el que se pueden considerar curvas en forma de S son los modelos
probit. Una idea natural es que
(x) = F(x),
siendo F una funci on de distribucion. Cuando X es una v.a. continua, la funcion de
distribuci on como funcion de x, tiene forma de S. Esto sugiere una clase de modelos de
dependencia para modelos binarios
Como caso particular se puede considerar el link probi t que transforma probabilidades
en valores estandar de la funcion de distribucion normal, F(x) = (x).
(x) = ( + x)

1
((x)) = + x
As, se dene probit
1
.
Por ejemplo,
probit(0,05) = 1,645
probit(0,975) = 1,96
En el ejemplo anterior, sobre el sue no y la enfermedad cardiaca, se programa en R
como,
roncas = c(0, 2, 4, 5)
probit.irls <- glm(cbind(SI=c(24, 35, 21, 30), NO=c(1355,
603, 192, 224)) roncas , family=binomial(link=probit ))
summary(probit.irls)$coefficients
Se obtiene
Salida R
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.0605516 0.07016673 -29.36651 1.471042e -189
roncas 0.1877705 0.02348052 7.99686 1.276323e -15
7
Es decir,
probit( (x)) = 2,061 + 0,188x
Con un nivel de ronquido x = 0, el probit es igual a
2,061 + 0,188(0) = 2,06
As, para (0) la funcion de distribucion (probabilidad de la cola izquierda) de la
normal estandar en z = 2,06, es igual a 0,020. Esto equivale a la probabilidad de tener
una enfermedad cardiaca.
Por otro lado, para un nivel x = 5, el probit es igual a
2,061 + 0,188(5) = 1,12
que corresponde a una probabilidad de enfermedad cardiaca de 0,131
En la pr actica, tanto los modelos probit como logit producen ajustes similares.
8
Modelos GLM para recuentos
En muchos casos las variables respuesta son recuentos, y en muchas ocasiones los
recuentos aparecen al resumir tablas de contingencia.
En el modelo m as simple se asume que el componente aleatorio Y sigue una distri-
buci on de Poisson. Esta distribuci on es unimodal y su propiedad mas destacada es que
la media y la varianza coinciden
E(Y ) = V ar(Y ) =
de modo que cuando el n umero de recuentos es mayor en media, tambien tienden a tener
mayor variabilidad.
En el modelo GLM se usa habitualmente el logaritmo de la media para la funci on
link, de modo que el modelo loglineal con una variable explicativa X se puede expresar
como
log() = + x
de modo que
= exp [ + x] = e

x
Ejemplo
Entre los cangrejos cacerola
http://en.wikipedia.org/wiki/Horseshoe crab
se sabe que cada hembra tiene un macho en su nido, pero puede tener m as machos con-
cubinos. Se considera que la variable respuesta es el n umero de concubinos y las variables
explicativas son: color, estado de la espina central, peso y anchura del caparaz on. En un
primer analisis solo consideramos la anchura del caparaz on como variable explicativa
tabla <- read.csv("http://www.hofroe.net/stat557/data/crab.txt",
header=T, sep="\t")
dimnames(tabla )[[2]] = c("color","spine","width","satell","weight")
names(tabla)
plot.tabla = aggregate(rep(1, nrow(tabla)),
list(Sa=tabla$satell , W=tabla$width), sum)
plot(y=plot.tabla$Sa , x=plot.tabla$W, xlab="Ancho (cm)",
ylab="Numero de Concubinos", bty="L", axes=F, type="n")
axis(2, at =1:15)
axis(1, at=seq(20, 34, 2))
text(y=plot.tabla$Sa , x=plot.tabla$W, labels=plot.tabla$x)
Se obtiene
9
# Discretizamos la anchura del caparazon
tabla$W.fac = cut(tabla$width , breaks=c(0, seq(23.25 , 29.25), Inf))
# Calculamos el numero medio de concubinos para cada
# categoria segun la anchura del caparazon.
plot.y = aggregate(tabla$satell , by=list(W=tabla$W.fac), mean)$x
# Determinamos la media de la anchura del caparazon por categoria
plot.x = aggregate(tabla$width , by=list(W=tabla$W.fac), mean)$x
# Representamos las medias de anchura y la media
# del numero de concubinos
plot(x=plot.x , y=plot.y , ylab="Numero de Concubinas",
xlab="Anchura (cm)", bty="L", axes=F, type="p", pch =16)
axis(2, at =0:5)
axis(1, at=seq(20, 34, 2))
10
Se ajusta un modelo GLM de Poisson.
attach(tabla)
log.fit = glm(satell width ,
family=poisson(link=log), data=tabla)
summary(log.fit)
Se obtiene
11
Salida R
Call:
glm(formula = satell width , family = poisson(link = log),
data = tabla)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.8526 -1.9884 -0.4933 1.0970 4.9221
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.30476 0.54224 -6.095 1.1e -09 ***
width 0.16405 0.01997 8.216 < 2e-16 ***
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 632 .79 on 172 degrees of freedom
Residual deviance: 567.88 on 171 degrees of freedom
AIC: 927 .18
Number of Fisher Scoring iterations: 6
La Null deviance es la desviaci on para el modelo que tiene solo la constante. La
Residual deviance es la desviaci on del modelo que tiene la constante y la variable
width. La diferencia entre los valores tiene una distribucion chi-cuadrado con 1 grado
de libertad y permite contrastar si el coeciente de width puede considerarse nulo.
log.fit$null.deviance - log.fit$deviance
64.91309
1-pchisq(64.91309,1)
7.771561e-16
Se puede rechazar claramente la hipotesis nula. Hay un aportaci on signicativa de la
anchura del caparaz on.
Se puede ver los atributos del objeto de clase glm, y obtener cada uno de ellos.
attributes(log.fit)
# los valores esperados vienen dados por
log.fit$fitted.values
# o
fitted(log.fit)
# Para obtener los residuos:
log.fit$residuals
# o
12
resid(log.fit)
# o
residuals(log.fit)
# Para obtener los coeficientes
log.fit$coefficients
# o
coef(log.fit)
# o
coefficients(log.fit)
Se puede predecir la media de la respuesta para el valor de width que queramos con
predict. Por ejemplo para una anchura igual a 26.3:
predict.glm(log.fit , type="response", newdata=data.frame(width =26.3))
2.744581
Sobredispersion en GLM Poisson
En una distribuci on de Poisson, la media y la varianza son iguales, pero cuando
trabajamos con recuentos reales no suele ser cierta esta hip otesis.
Con frecuencia la varianza es mayor que la media. A esto se le llama sobredispersion
(overdispersion).
La causa habitual de esta situaci on es debido a la existencia de heterogeneidad entre
las observaciones o sujetos. Esto se puede interpretar como una mezcla o mixtura de
distribuciones de Poisson. No es un problema cuando Y tiene una distribuci on normal
porque la normal tiene un par ametro especco que modeliza la variabilidad.
# Se leen los datos de los cangrejos cacerola
# Se discretiza la anchura del caparazon
log.fit.over <- glm(satell width ,
family=quasipoisson(link=log), data=tabla)
summary.glm(log.fit.over)$dispersion
[1] 3.182205
Aqu la varianza es algo m as de tres veces la media. La estimaci on del par ametro de
dispersion no es mas que la suma de los residuos dividida por sus grados de libertad.
13
GLM binomiales negativos
Si una v.a. Y se distribuye como una binomial negativa, entonces la funci on de
probabilidad es
P (y|k, ) =
(y + k)
(k)(y + 1)

k
+ k

k

1
k
+ k

y
con y = 0, 1, 2, . . . donde k y son los par ametros de la distribuci on.
Se tiene que
E(Y ) =
V ar(Y ) = +

2
k
El parametro
1
k
es un par ametro de dispersi on, de modo que si
1
k
0 entonces
V ar(Y ) y la distribuci on binomial negativa converge a una distribuci on de Poisson.
Por otro lado, para un valor jo de k esta distribuci on pertenece a la familia expo-
nencial natural, de modo que se puede denir un modelo GLM binomial negativo. En
general, se usa una funci on link de tipo logaritmo, aunque tambien se puede usar el link
identidad.
log.fit = glm(satell width , family=poisson(link=log), data=tabla)
library(MASS)
glm(satell width , family=negative.binomial(theta=1, link="log"),
data=tabla , start=coef(log.fit ))
glm(satell width , family=negative.binomial(theta=1,
link="identity"), data=tabla , start=coef(log.fit ))
Se obtiene
14
Salida R
Call: glm(formula = satell width ,
family = negative.binomial(theta = 1,
link = "log"), data = tabla , start = coef(log.fit))
Coefficients:
(Intercept) width
-4.0322 0.1913
Degrees of Freedom: 172 Total (i.e. Null); 171 Residual
Null Deviance: 224.9
Residual Deviance: 206.4 AIC: 755.6
Call: glm(formula = satell width ,
family = negative.binomial(theta = 1,
link = "identity"), data = tabla , start = coef(log.fit))
Coefficients:
(Intercept) width
-11.6329 0.5539
Degrees of Freedom: 172 Total (i.e. Null); 171 Residual
Null Deviance: 224.9
Residual Deviance: 202.9 AIC: 752.1
De modo que
log ( ) = 4,032 + 0,191x
Con un valor SE = 0,040 para

.
15
Ejemplo con SAS
Se considera un estudio de 400 pacientes con melanoma maligno. Se considera como
variables de interes d onde aparece el tumor y el tipo celular del mismo. Se asume que los
recuentos del tumor se distribuyen como una Poisson y se trata de comprobar si estan
inuidos por el lugar de aparici on y el tipo de tumor. Se tiene la siguiente tabla:
Zona Tumor
Tipo Tumor Cabeza-cuello Tronco Extremidades Total
Melanoma de Hutchinson 22 2 10 34
Melanoma supercial 16 54 115 185
Nodulos 19 33 73 125
Indeterminado 11 17 28 56
Total 68 106 226 400
El programa en SAS de regresion de Poisson es
OPTIONS nodate ls=70;
/* Se graban los resultados en un fichero rtf o en uno pdf
ODS rtf file = c :\ curras \ cosa . rtf style = minimal startpage = no ;
*/
ODS pdf file=c:\ curras\cosa.pdf style=minimal startpage=no;
DATA melanomas;
INPUT tipo $ sitio $ recuento;
DATALINES;
Hutchinson Cabeza&Cuello 22
Hutchinson Tronco 2
Hutchinson Extremidades 10
Superficial Cabeza&Cuello 16
Superficial Tronco 54
Superficial Extremidades 115
Nodular Cabeza&Cuello 19
Nodular Tronco 33
Nodular Extremidades 73
Indeterminado Cabeza&Cuello 11
Indeterminado Tronco 17
Indeterminado Extremidades 28
;
RUN;
PROC genmod;
class tipo sitio;
model recuento=tipo|sitio / dist=poisson link=log type3;
RUN;
16
Salida SAS
Criterios para valorar la bondad de ajuste
Criterio DF Valor Valor/DF
Desviacion 0 0.0000 .
Desviacion escala 0 0.0000 .
Chi -cuadrado de Pe 0 0.0000 .
Pearson X2 escala 0 0.0000 .
Verosimilitud 1150 .2247
Estadisticos LR para analisis de tipo 3
Chi -
Fuente DF cuadrado Pr > ChiSq
tipo 3 85.07 <.0001
sitio 2 33.34 <.0001
tipo*sitio 6 51.80 <.0001
Se obtiene la tabla de los estadsticos de bondad de ajuste. El modelo es saturado
por lo que no aparece ning un estadstico de ajuste. La interaccion entre tipo y sitio es
muy signicativa y tambien lo son los efectos principales.
17
Tema 4: Regresion Logstica
Introducci on
Es uno de los procedimientos estadsticos m as utilizados con miles de artculos pu-
blicados en aplicaciones usando esta tecnica.
Se considera una respuesta binaria Y junto con una variable explicativa X de manera
que
(x) = P (Y = 1|X = x) = 1 P (Y = 0|X = x)
El modelo de regresi on logstica asume que
(x) =
exp [ + x]
1 + exp [ + x]
o de manera equivalente
log

(x)
1 (x)

= logit ((x)) = + x
La interpretaci on del par ametro se hace mediante la funci on e

. Este valor es un
cociente de los odds de X = x + 1 dividido entre los odds de X = x.
El parametro determina la tasa de incremento o decremento de la curva en forma
de S para (x).
En la gr aca siguiente se ve la curva en forma de S para (x).
1
El cambio en (x) depende del valor de cada x. La tangente en un punto particular
de x describe la tasa de cambio en ese punto. La tangente tiene una pendiente igual a
(x)(1 (x)). Por ejemplo, la tangente en el punto x tal que (x) = 0,50 tiene una
pendiente igual a 0,50 0,50 = 0,25 ; sin embargo cuando (x) = 0,90 o (x) = 0,10
la pendiente es 0,09.
La pendiente se aproxima a 0 cuando la probabilidad se aproxima a 1 o a 0.
La pendiente m as pronunciada se obtiene cuando (x) = 0,50; el correspondiente
valor de x es
x =

y se denomina nivel mediano efectivo (EL


50
). Representa el valor al que los resultados
tienen una probabilidad igual a 0.50.
El parametro no suele tener un interes especial.
2
Ejemplo
En los cangrejos cacerola hembra: el hecho de que tengan alg un amante depende de
la anchura de su caparaz on? El tama no importa?
La variable respuesta que interesa es si las hembras de los cangrejos cacerola tienen,
al menos, un amante. Como predictor solamente se utiliza la anchura del caparazon. Se
construye la variable a partir de la variable original que recoge el n umero de amantes.
tabla <- read.csv("http://www.hofroe.net/stat557/data/crab.txt",
header=T, sep="\t")
dimnames(tabla )[[2]] = c("color","spine","width","satell","weight")
names(tabla)
# Se crea una variable de tipo 0-1
# Es 1 si el numero de amantes es mayor que 0
(tabla$satell.bin = ifelse(tabla$satell > 0, 1, 0))
# Se aplica un modelo de regresion logit
crab.fit.logit = glm(tabla$satell.bin tabla$width ,
family=binomial , data=tabla)
summary(crab.fit.logit)
# Se discretiza la variable width
tabla$W.fac = cut(tabla$width , breaks=c(0,seq(23.25 , 29.25), Inf))
# Se calcula la proporcion de cangrejos que tienen al menos
# un amante para cada grupo de anchura de caparazon
prop = aggregate(tabla$satell.bin , by=list(W=tabla$W.fac), mean)$x
# Se calcula la anchura media del caparazon en cada grupo
# de anchura de caparazon
plot.x = aggregate(tabla$width , by=list(W=tabla$W.fac), mean)$x
X11()
plot(y=prop , x=plot.x , pch=16, type="p",
xlab=expression(paste("Anchura , ",italic(x), "(cm)")),
ylab=expression(paste("Proporcion de amantes que tiene ",
{pi},"(x)")), ylim=c(0,1), xlim=c(20 ,34))
ind = order(tabla$width)
lines(x=tabla$width[ind],
y=predict(crab.fit.logit , type="response")[ind],type="l", lty=3)
# Intervalos de confianza para los parametros.
library(MASS)
confint(crab.fit.logit)
# Se estima las probabilidades de que la respuesta sea igual a 1
crab.predict = predict(crab.fit.logit , type="response", se=T)
# Se representan los intervalos de confianza
ind = order(tabla$width)
3
X11()
par(family="sans")
plot(tabla$width[ind], crab.predict$fit[ind],
axes=F, type="l", xlim=c(20,33),
ylab="Probabilidad de tener al menos un amante",
xlab=expression(paste("Anchura ", italic(x), "(cm)")) )
axis(2, at=seq(0,1,0.2))
axis(1, at=seq (20 ,32 ,2))
lines(tabla$width[ind], crab.predict$fit[ind] -
1.96*crab.predict$se[ind], lty=3, col="blue", lwd=2)
lines(tabla$width[ind], crab.predict$fit[ind] +
1.96*crab.predict$se[ind], lty=3, col="blue", lwd=2)
summary(crab.fit.logit)
Call:
glm(formula = satell.bin ~ tabla$width, family = binomial, data = tabla)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.0281 -1.0458 0.5480 0.9066 1.6942
Coefficients:
Estimate Std. Error z value Pr(>|z|)
4
(Intercept) -12.3508 2.6287 -4.698 2.62e-06 ***
tabla$width 0.4972 0.1017 4.887 1.02e-06 ***
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 225.76 on 172 degrees of freedom
Residual deviance: 194.45 on 171 degrees of freedom
AIC: 198.45
Number of Fisher Scoring iterations: 4
confint(crab.fit.logit)
Waiting for profiling to be done...
2.5 % 97.5 %
(Intercept) -17.8100090 -7.4572470
tabla$width 0.3083806 0.7090167
En este caso, los odds de la respuesta para x = 1 (es decir los odds de un exito) son
(x)
1 (x)
= e

x
5
de modo que interviene en los odds multiplicando por e

cada incremento de 1 unidad


de x.
As, los odds al nivel x + 1 son iguales que los odds al nivel x multiplicados por e

.
Cuando = 0, e

= 1, de modo que los odds no cambian cuando x cambia.


En el ejemplo se tiene que
log

(x)
1 (x)

= logit ( (x)) = 12,35 + 0,497x


De este modo, los odds estimados para cada cm de incremento de anchura en el caparaz on
implica multiplicar por e

= exp(0,497) = 1,64. Es decir, hay un incremento del 64 %


de la probabilidad de tener 1 amante por cada incremento de 1 cm de anchura.
Por ejemplo, con valor medio de anchura igual a x = 26,3 se obtiene
(x) =
exp ( + x)
1 + exp ( + x)
=
exp (12,35 + 0,497x)
1 + exp (12,35 + 0,497x)
=
exp (12,35 + 0,497 26,3)
1 + exp (12,35 + 0,497 26,3)
= 0,6729
As los odds son
0,6729
1 0,6729
= 2,057
Si aumentamos una unidad x, es decir se toma x = 27,3, entonces
(x) =
exp (12,35 + 0,497 27,3)
1 + exp (12,35 + 0,497 27,3)
= 0,772
de modo que los odds son
0,772
1 0,772
= 3,386
de manera que
log

3,386
2,057

= 0,497
6
Modelos Logit con predictores categoricos
Supongamos una variable o factor X con I categoras. Se pueden representar los
datos en una tabla I 2 donde en la primera columna est an los y
i
, el n umero de exitos
en las n
i
pruebas.
Se tiene, entonces, que cada y
i
se distribuye como una binomial Bin(
i
, n
i
).
El modelo logit con un factor sera
log


i
1
i

= +
i
,
de modo que un valor mayor de
i
implica un mayor valor de la probabilidad
i
.
la parte derecha de la expresion es semejante a un modelo ANOVA unifactorial. En
este caso hay tantos par ametros
i
como categoras, pero uno es redundante. Es decir,
con I categoras X tiene I 1 parametros no redundantes.
Una opci on habitual que se considera es jar el valor de uno de los parametros en 0,
por ejemplo,
I
= 0.
Si los valores originales no satisfacen la restriccion anterior, los parametros se pueden
recodicar para que esto se cumpla. Por ejemplo, se jan

i
=
i

I
y = +
I
que
satisfacen

I
= 0. De este modo,
logit(
i
) = +
i
= (
I
) + (

i
+
I
) = +

i
Si el factor X no tiene efecto, entonces

1
= =
I
= 0
o equivalentemente

1
= =
I
El modelo con solo el termino equivale a la independencia entre las variables X e Y.
Una formulaci on alternativa con variables dummy
En la tabla original I 2, se puede plantear una formulaci on alternativa si conside-
ramos que x
i
= 1 para las observaciones de la la iesima y x
i
= 0 para las restantes
las i = 1, . . . , I 1.
De este modo, el modelo se puede expresar como
logit(
i
) = +
1
x
1
+ +
I1
x
I1
Esta formulacion es equivalente a la que se usa con la restricci on
I
= 0 para una
categora arbitraria.
7
Otra posible opci on que se puede considerar es tomar

i
= 0
En el caso de I = 2, se tiene
1
=
2
que equivale a denir una variable dummy
que vale x = 1 en la categora 1 y x = 1 en la categora 2.
Ejemplo
Se considera la siguiente tabla en la que se plantea la relaci on entre el consumo de
alcohol, con la proporci on de malformaciones en el feto durante el embarazo.
Consumo de alcohol Presente Ausente
0 48 17066
< 1 38 14464
1 2 5 788
3 5 1 126
6 1 37
Para evitar la redundancia entre los par ametros, se utiliza el comando options en
R.
La opcion de que la suma sea nula lo indicamos del siguiente modo:
options(contrasts = c("contr.sum", "contr.poly"))
Tambien podemos indicar que el par ametro asociado a la primera categora sea nulo:
options(contrasts = c("contr.treatment", "contr.poly"))
Vamos a estudiar la posible asociaci on entre el consumo de alcohol y las malforma-
ciones en los fetos.
Alcohol = factor(c("0", "<1", "1-2", "3-5", " >=6"),
levels = c("0","<1", "1-2", "3-5", " >=6"))
malformaciones = c(48, 38, 5, 1, 1)
n = c(17066 , 14464 , 788, 126, 37) + malformaciones
Primero, indicamos que
1
ha de ser nula y luego se dene un modelo logit.
8
options(contrasts = c("contr.treatment", "contr.poly"))
# Ajustamos un modelo logit
(tabla.logit1 = glm(malformaciones/n Alcohol ,
family=binomial , weights=n))
Se obtiene
Call: glm(formula = malformaciones/n ~ Alcohol, family = binomial,
weights = n)
Coefficients:
(Intercept) Alcohol<1 Alcohol1-2 Alcohol3-5 Alcohol>=6
-5.87364 -0.06819 0.81358 1.03736 2.26272
Degrees of Freedom: 4 Total (i.e. Null); 0 Residual
Null Deviance: 6.202
Residual Deviance: 5.995e-15 AIC: 28.63
Ahora, de manera alternativa, se ja que la ultima categora sea nula (
I
= 0)
revAlcohol = factor(c("0", " <1", "1-2", "3-5", " >=6"),
levels=rev(c("0","<1", "1-2", "3-5", " >=6")))
(tabla.logit2 = glm(malformaciones/n revAlcohol ,
family=binomial , weights=n))
Se obtiene
Call: glm(formula = malformaciones/n ~ revAlcohol, family = binomial,
weights = n)
Coefficients:
(Intercept) revAlcohol3-5 revAlcohol1-2 revAlcohol<1 revAlcohol0
-3.611 -1.225 -1.449 -2.331 -2.263
Degrees of Freedom: 4 Total (i.e. Null); 0 Residual
Null Deviance: 6.202
Residual Deviance: 6.084e-14 AIC: 28.63
Se obtiene que las predicciones de las probabilidades son las mismas con ambos
modelos; es decir, no inuye el hecho de jar en 0 un efecto u otro.
cbind(logit = predict(tabla.logit1),
fitted.prop = predict(tabla.logit1 , type="response"))
9
logit fitted.prop
1 -5.873642 0.002804721
2 -5.941832 0.002620328
3 -5.060060 0.006305170
4 -4.836282 0.007874016
5 -3.610918 0.026315789
cbind(logit = predict(tabla.logit2),
fitted.prop = predict(tabla.logit2 , type="response"))
logit fitted.prop
1 -5.873642 0.002804721
2 -5.941832 0.002620328
3 -5.060060 0.006305170
4 -4.836282 0.007874016
5 -3.610918 0.026315789
Podemos observar c omo la proporci on de malformaciones se incrementa conforme
aumenta el consumo de alcohol.
Pero, en el analisis previo no se ha tenido en cuenta la naturaleza ordinal de la
covariable consumo de alcohol. Entonces, se puede considerar un modelo alternativo
logit(
i
) = + x
i
y la hip otesis de independencia equivale a = 0.
Fijamos como valores de x
i
:
x
1
= 0, x
2
= 0

5, x
3
= 1

5, x
4
= 4, x
5
= 7.
Donde el ultimo valor es arbitrario.
puntuaciones = c(0, 0.5 , 1.5 , 4, 7)
tabla.orden = glm(malformaciones/n puntuaciones ,
family=binomial , weights=n)
summary(tabla.orden)
Se obtiene
10
Call:
glm(formula = malformaciones/n ~ puntuaciones, family=binomial,
weights = n)
Deviance Residuals:
1 2 3 4 5
0.5921 -0.8801 0.8865 -0.1449 0.1291
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -5.9605 0.1154 -51.637 <2e-16 ***
puntuaciones 0.3166 0.1254 2.523 0.0116 *
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 6.2020 on 4 degrees of freedom
Residual deviance: 1.9487 on 3 degrees of freedom
AIC: 24.576
Number of Fisher Scoring iterations: 4
Se pueden obtener los logits y las proporciones ajustadas:
cbind(logit = predict(tabla.orden),
fitted.prop = predict(tabla.orden , type="response"))
logit fitted.prop
1 -5.960461 0.002572090
2 -5.802181 0.003011861
3 -5.485620 0.004128844
4 -4.694219 0.009065077
5 -3.744538 0.023100302
Tambien se pueden obtener los intervalos de conanza para los par ametros con este
modelo
library(MASS)
confint(tabla.orden)
2.5 % 97.5 %
(Intercept) -6.19302366 -5.7396968
puntuaciones 0.01868149 0.5234947
11
Regresi on logstica con m ultiples predictores categoricos
Tanto en la regresion logstica, como en la regresion ordinaria, habitualmente se
trabaja con varias variables predictoras o explicativas, es decir, se pueden estudiar varios
factores al mismo tiempo.
Supongamos que una variable de respuesta binaria Y tiene dos variables predictoras,
X y Z. Los datos se pueden presentar, entonces, en forma de una tabla de contingencia
de orden 2 2 2.
Supongamos que x y z toman valores 0 o 1 para representar las dos categoras de
cada variable. El modelo, entonces, se escribe como
logit [P (Y = 1)] = +
1
x +
2
z
y se puede visualizar como
x z Logit
0 0
1 0 +
1
0 1 +
2
1 1 +
1
+
2
Este modelo supone que no hay interaccion, es decir, el efecto de un factor es igual
a lo largo de cada categora del otro factor. Para un valor jo de la categora z de Z el
efecto del cambio de x = 0 a x = 1 es
[ +
1
(1) +
2
z] [ +
1
(0) +
2
z] =
1
As, para Z jada, los odds para el exito en x = 1 son iguales a exp(
1
) veces los
odds del exito para x = 0.
Existe independencia condicional entre X e Y , controlando mediante Z, si
1
= 0.
En este caso, la razon de odds com un es igual a 1. Se puede aplicar, entonces el modelo
m as simple a la tabla de tres variables:
logit [P (Y = 1)] = +
2
z.
12
Ejemplo: SIDA y AZT
Se considera un estudio antiguo (1991) que trataba el efecto de un retroviral (AZT) en
el desarrollo de los sntomas del SIDA. Se obtuvo una muestra de 338 personas afectadas
de SIDA en donde como respuesta consideramos si desarrollan sntomas de SIDA y como
predictores la raza y si se les administra AZT de modo inmediato o cuando los linfocitos
tipo T muestran debilidad inmune.
Sntomas
Raza Uso AZT Si No
Blanca Si 14 93
No 32 81
Negra Si 11 52
No 12 43
Denominamos como X AZT, Z Raza e Y SIDA.
En el modelo, consideramos que y = 1 si se desarrollan los sntomas del SIDA,
y = 0 si no se desarrollan. Del mismo modo, x = 1 son aquellos que tomaron AZT
inmediatamente, x = 0 para los que no, y z = 1 son personas de raza blanca y z = 0
son personas de color. As, el modelo se puede expresar como
logit [P(Y = 1)] = +
AZT
Si
+
blanc
En este caso, es la raz on de odds correspondiente a desarrollar sntomas de SIDA
para personas de color a los que no se les administro inmediatamente AZT.
Por otro lado,
AZT
Si
es el incremento en la raz on de odds para los que usan inmedia-
tamente AZT y
blanc
es el incremento de los odds para las personas blancas.
tabla.pre = expand.grid(AZT = factor(c("Si", "No"),
levels = c("No", "Si")),
Raza = factor(c("Blanca", "Negra"),
levels = c("Negra", "Blanca")))
tabla = data.frame(tabla.pre , Si = c(14, 32, 11, 12),
No = c(93, 81, 52, 43))
options(contrasts = c("contr.treatment", "contr.poly"))
fit1 = glm(cbind(Si , No) AZT + Raza , family=binomial , data=tabla)
summary(fit1)
13
Call:
glm(formula = cbind(Si, No) ~ AZT + Raza, family = binomial,
data = tabla)
Deviance Residuals:
1 2 3 4
-0.5547 0.4253 0.7035 -0.6326
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.07357 0.26294 -4.083 4.45e-05 ***
AZTSi -0.71946 0.27898 -2.579 0.00991 **
RazaBlanca 0.05548 0.28861 0.192 0.84755
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 8.3499 on 3 degrees of freedom
Residual deviance: 1.3835 on 1 degrees of freedom
AIC: 24.86
Number of Fisher Scoring iterations: 4
Por tanto, la raz on de odds para los que usan AZT inmediatamente despues de
desarrollar sntomas de SIDA sera exp(0,71946) = 0,49. Un intervalo de conanza se
puede obtener con
confint(fit1)
2.5 % 97.5 %
(Intercept) -1.6088054 -0.5734959
AZTSi -1.2773237 -0.1798769
RazaBlanca -0.5022982 0.6334104
Veamos si la raza y la aparici on de sntomas son condicionalmente independientes
dado el tratamiento AZT.
fit2 = update(object=fit , formula = . - Raza)
anova(fit2 , fit1 , test = "Chisq")
Analysis of Deviance Table
Model 1: cbind(Si, No) ~ AZT
Model 2: cbind(Si, No) ~ AZT + Raza
Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1 2 1.4206
2 1 1.3835 1 0.037084 0.8473
14
No parece pues que se tenga que considerar la raza en el modelo.
Opci on de SAS:
OPTIONS nodate ls=70;
/* Se graban los resultados en un fichero rtf o en uno pdf
ODS pdf file = c :\ dondesea \ cosa . pdf style = minimal
startpage = no ; */
ODS rtf file=c:\ dondesea\cosa.rtf style=minimal
startpage=no;
DATA sida;
input raza $ azt $ si no @@;
casos = si + no;
DATALINES;
blanca y 14 93 blanca n 32 81
negra y 11 52 negra n 12 43
;
PROC genmod order=data;
class raza azt;
model si/casos=raza azt / dist=bin link=logit obstats type3;
RUN;
15
Salida SAS
Criterios para valorar la bondad de ajuste
Criterio DF Valor Valor/DF
Desviaci 1 1.3835 1.3835
Desviacion esca 1 1.3835 1.3835
Chi -cuadrado de Pe 1 1.3910 1.3910
Pearson X2 escala 1 1.3910 1.3910
Verosimilitud -167.5756
Analisis de estimadores de parametros
Error Wald 95 % Limites
Parametro DF Estimacion estandar de confianza
Intercept 1 -1.0736 0.2629 -1.5889 -0.5582
raza blan 1 0.0555 0.2886 -0.5102 0.6212
Analisis de estimadores de parametros
Chi -
Parametro cuadrado Pr > ChiSq
Intercept 16.67 <.0001
raza blanca 0.04 0.8476
Procedimiento GENMOD
Analisis de estimadores de parametros
Error Wald 95 % Limites
Parametro DF Estimacion estandar de confianza
raza neg 0 0.0000 0.0000 0.0000 0.0000
azt y 1 -0.7195 0.2790 -1.2662 -0.1727
azt n 0 0.0000 0.0000 0.0000 0.0000
Escal 0 1.0000 0.0000 1.0000 1.0000
Analisis de estimadores de parametros
Chi -
Parametro cuadrado Pr > ChiSq
raza negra . .
azt y 6.65 0.0099
azt n . .
Escal
Estadisticos LR para analisis de tipo 3
Chi -
Fuente DF cuadrado Pr > ChiSq
raza 1 0.04 0.8473
azt 1 6.87 0.0088
16
Ejemplo: Cangrejos cacerola
Se considera el ejemplo de los cangrejos cacerola y se aplica el modelo,
logit [] = +
1
c
1
+
2
c
2
+
3
c
3
+
4
x
donde
= P(Y = 1)
x anchura (cm).
c
1
= 1 para color medio-claro y 0 en otro caso.
c
2
= 1 para color medio y 0 en otro caso.
c
3
= 1 para color medio-oscuro y 0 en otro caso.
Se trata de ver la relacion entre el color del caparaz on y la probabilidad de tener
alg un amante.
tabla <- read.csv("http://www.hofroe.net/stat557/data/crab.txt",
header=T, sep="\t")
dimnames(tabla )[[2]] = c("color","spine","width","satell","weight")
names(tabla)
options(contrasts = c("contr.treatment", "contr.poly"))
# Definimos como factor la variable que nos indica el color.
tabla$C.fac <- factor(tabla$color , levels=c("5","4","3","2"),
labels=c("oscuro", "med -oscuro", "med", "med -claro"))
# Se define una variable binaria: tiene o no tiene amantes
tabla$satell.bin = ifelse(tabla$satell > 0, 1, 0)
crab.fit.logist <- glm(satell.bin C.fac + width ,
family=binomial , data=tabla)
summary(crab.fit.logist , cor=F)
library(MASS)
confint(crab.fit.logist)
res1 = predict(crab.fit.logist , type="response",
newdata=data.frame(width=seq(18, 34, 1), C.fac="med -claro"))
res2 = predict(crab.fit.logist , type="response",
newdata=data.frame(width=seq(18, 34, 1), C.fac="med"))
res3 = predict(crab.fit.logist , type="response",
newdata=data.frame(width=seq(18, 34, 1), C.fac="med -oscuro"))
res4 = predict(crab.fit.logist , type="response",
17
newdata=data.frame(width=seq(18, 34, 1), C.fac="oscuro"))
plot(seq(18, 34, 1), res1 , type="l", bty="L",
ylab="Probabilidad Predicha", axes=F,
xlab=expression(paste("Ancho ,", italic(x), "(cm)")), col="yellow")
axis(2, at=seq(0, 1, 0.2))
axis(1, at=seq(18, 34, 2))
lines(seq(18, 34, 1), res2 , col="orange")
lines(seq(18, 34, 1), res3 , col="red")
lines(seq(18, 34, 1), res4 , col="darkred")
arrows(x0=29, res1 [25 - 17], x1=25, y1=res1 [25 - 17], length =0.09)
text(x=29.1 , y=res1 [25 - 17], "Color 1", adj=c(0, 0), col="yellow")
arrows(x0=23, res2 [26 - 17], x1=26, y1=res2 [26 - 17], length =0.09)
text(x=21.1 , y=res2 [26 - 17], "Color 2", adj=c(0, 0), col="orange")
arrows(x0=28.9 , res3 [24 - 17], x1 = 24, y1=res3 [24 - 17],
length =0.09)
text(x=29, y=res3 [24 - 17], "Color 3", adj=c(0, 0), col="red")
arrows(x0=25.9 , res4 [23 - 17], x1=23, y1=res4 [23 - 17],
length =0.09)
text(x=26, y=res4 [23 - 17], "Color 4", adj=c(0, 0),
col="darkred")
18
Call:
glm(formula = satell.bin ~ C.fac + width, family = binomial,
data = tabla)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.1124 -0.9848 0.5243 0.8513 2.1413
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -12.7151 2.7617 -4.604 4.14e-06 ***
C.facmed-oscuro 1.1061 0.5921 1.868 0.0617 .
C.facmed 1.4023 0.5484 2.557 0.0106 *
C.facmed-claro 1.3299 0.8525 1.560 0.1188
width 0.4680 0.1055 4.434 9.26e-06 ***
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 225.76 on 172 degrees of freedom
Residual deviance: 187.46 on 168 degrees of freedom
AIC: 197.46
19
Number of Fisher Scoring iterations: 4
2.5 % 97.5 %
(Intercept) -18.45674069 -7.5788795
C.facmed-oscuro -0.02792233 2.3138635
C.facmed 0.35269965 2.5260703
C.facmed-claro -0.27377584 3.1356611
width 0.27128167 0.6870436
Se puede considerar un modelo con interacci on color y anchura del caparaz on.
crab.fit.logist.ia = update(object=crab.fit.logist ,
formula = . + width:C.fac)
anova(crab.fit.logist , crab.fit.logist.ia , test="Chisq")
Analysis of Deviance Table
Model 1: satell.bin ~ C.fac + width
Model 2: satell.bin ~ C.fac + width + C.fac:width
Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1 168 187.46
2 165 183.08 3 4.3764 0.2236
As la interacci on no es signicativa.
20
Opci on de SAS:
OPTIONS nodate ls=70;
/* Se graban los resultados en un fichero rtf o en uno pdf
ODS rtf file = c :\ dondesea \ cosa . rtf style = minimal
startpage = no ; */
ODS pdf file=c:\ dondesea\cosa.pdf style=minimal
startpage=no;
data crabs;
input anchura casos amante;
datalines;
22.69 14 5
23.84 14 4
24.77 28 17
25.84 39 21
26.79 22 15
27.74 24 20
28.67 18 15
30.41 14 14
;
PROC genmod;
model amante/casos = anchura / dist=bin link=logit waldci
lrci alpha =.01;
PROC logistic;
model amante/casos = anchura / influence;
OUTPUT out=predict p=pi_hat lower=LCL upper=UCL;
PROC print data=predict;
RUN;
21
Salida SAS
Criterios para valorar la bondad de ajuste
Criterio DF Valor Valor/DF
Desviaci 6 5.9696 0.9949
Desviacion esca 6 5.9696 0.9949
Chi -cuadrado de Pe 6 5.0292 0.8382
Pearson X2 escala 6 5.0292 0.8382
Verosimilitud -98.8470
Algoritmo convergido.
Analisis de estimadores de parametros
Error Wald 99 % Limites
Parametro DF Estimacion estandar de confianza
Intercept 1 -11.5140 2.5489 -18.0796 -4.9485
anchura 1 0.4647 0.0985 0.2108 0.7185
Escal 0 1.0000 0.0000 1.0000 1.0000
Analisis de estimadores de parametros
Cociente de
verosimilitud 99 % Chi -
Parametro Limites de confianza cuadrado Pr > ChiSq
Intercept -18.5807 -5.3345 20.41 <.0001
anchura 0.2267 0.7388 22.23 <.0001
Escal 1.0000 1.0000
NOTA: The scale parameter was held fixed.
Procedimiento LOGISTIC
Perfil de respuesta
Valor Resultado Frecuencia
ordenado binario total
1 EVENTO 111
2 No event 62
Estado de convergencia del modelo
Convergence criterion (GCONV =1E-8) satisfied.
Estadisticos de ajuste del modelo
Terminos independientes
Solo terminos y
Criterio independientes Variables adicionales
AIC 227 .759 201 .694
SC 230 .912 208 .001
-2 LOG L 225 .759 197 .694
22
Prueba de la hipotesis nula global: BETA=0
Test Chi -cuadrado DF Pr > ChiSq
Ratio de verosim 28.0644 1 <.0001
Puntuacion 25.6828 1 <.0001
Wald 22 .2312 1 <.0001
Analisis del estimador de maxima verosimilitud
Error Chi -cuadrado
Parametro DF Estimador estandar de Wald Pr > ChiSq
Intercept 1 -11.5128 2.5488 20.4031 <.0001
anchura 1 0.4646 0.0985 22 .2312 <.0001
Estimadores de cocientes de disparidad;
Estimador 95 % Wald
Efecto del punto Limites de confianza
anchura 1.591 1.312 1.930
Asociacion de probabilidades predichas y respuestas observadas
Concordancia de porcentaje 66.3 D de Somers 0.454
Discordancia de porcentaje 20.9 Gamma 0.520
Porcentaje ligado 12.8 Tau -a 0.210
Pares 6882 c 0.727
Obs anchura casos amante pi_hat LCL UCL
1 22.69 14 5 0.27481 0.15971 0.43036
2 23.84 14 4 0.39268 0.28007 0.51800
3 24.77 28 17 0.49901 0.40218 0.59592
4 25.84 39 21 0.62086 0.53879 0.69655
5 26.79 22 15 0.71801 0.63346 0.78953
6 27.74 24 20 0.79835 0.70525 0.86756
7 28.67 18 15 0.85913 0.76133 0.92102
8 30.41 14 14 0.93192 0.84095 0.97256
23
Ejemplo con SAS
Un investigador esta interesado en analizar como las variables gre (Graduate Record
Exam), gpa (promedio de calicaciones) y el prestigio de la universidad, afectan en la
admisi on en unos estudios de posgrado. La variable en estudio admitir/no admitir, es
binaria.
Este conjunto de datos tiene una variable respuesta binaria llamada admit, que es
igual a 1 si el individuo fue admitido en los estudios de posgrado, y 0 en caso contrario.
Hay tres variables predictoras: gre, gpa, y rank. Se consideran gre y gpa como conti-
nuas. La variable rank toma los valores de 1 a 4. Las instituciones con un rango igual
a 1 tienen el prestigio m as alto, mientras que aquellos con un rango de 4 tienen el m as
bajo.
Los datos se encuentran en
http://www.ats.ucla.edu/stat/sas/dae/binary.sas7bdat
Se consideran primero algunas estadsticas descriptivas.
OPTIONS nodate ls=70;
/* Se graban los resultados en un fichero rtf o en uno pdf
ODS rtf file = c :\ dondesea \ cosa . rtf style = minimal
startpage = no ; */
ODS pdf file=c:\ dondesea\cosa.pdf style=minimal
startpage=no;
PROC means data="c:\ dondesea\binary ";
var gre gpa;
PROC freq data="c:\ dondesea\binary ";
TABLES rank admit admit*rank;
RUN;
24
Salida SAS
Procedimiento MEANS
Numero de Desviacion
Variable observaciones Media estandar
Minimo
---------------------------------------------------------------------
GRE 400 587 .7000000 115 .5165364
220 .0000000
GPA 400 3.3899000 0.3805668
2.2600000
---------------------------------------------------------------------
Variable Maximo
-----------------------
GRE 800 .0000000
GPA 4.0000000
-----------------------
Frequencia Porcentaje
RANK Frecuencia Porcentaje acumulada acumulado
-------------------------------------------------------------
1 61 15.25 61 15.25
2 151 37.75 212 53.00
3 121 30.25 333 83.25
4 67 16.75 400 100.00
Frequencia Porcentaje
ADMIT Frecuencia Porcentaje acumulada acumulado
--------------------------------------------------------------
0 273 68.25 273 68.25
1 127 31.75 400 100.00
Tabla de ADMIT por RANK
ADMIT RANK
Frequencia|
Porcentaje|
Pct fila |
Pct col | 1| 2| 3| 4| Total
----------.--------.--------.--------.--------.
0 | 28 | 97 | 93 | 55 | 273
| 7.00 | 24.25 | 23.25 | 13.75 | 68.25
| 10.26 | 35.53 | 34.07 | 20.15 |
| 45.90 | 64.24 | 76.86 | 82.09 |
----------.--------.--------.--------.--------.
1 | 33 | 54 | 28 | 12 | 127
| 8.25 | 13.50 | 7.00 | 3.00 | 31.75
| 25.98 | 42.52 | 22.05 | 9.45 |
| 54.10 | 35.76 | 23.14 | 17.91 |
----------.--------.--------.--------.--------.
Total 61 151 121 67 400
15.25 37.75 30.25 16.75 100 .00
25
Para modelizar los 1s en lugar de los 0s, se usa la opcion descending. Esto se
hace as, porque de manera predeterminada, el PROC logistic modeliza los 0s en
lugar de los 1s. En este caso, eso signicara modelizar la prediccion de la probabilidad
de no entrar en el curso (admit=0) frente a entrar (admit=1). Ambos modelos son
equivalentes pero tiene conceptualmente m as sentido modelizar la probabilidad de entrar
el curso que de no hacerlo. La opci on param=ref indica la codicacion mediante variables
dummy para los niveles de rank.
OPTIONS nodate ls=70;
proc logistic data="c:\ dondesea\binary" descending;
class rank / param=ref ;
model admit = gre gpa rank;
RUN;
26
Salida SAS
Perfil de respuesta
Valor Frecuencia
ordenado ADMIT total
1 1 127
2 0 273
La probabilidad modelada es ADMIT=1.
Informacion de nivel de clase
Variables
Clase Valor de diseno
RANK 1 1 0 0
2 0 1 0
3 0 0 1
4 0 0 0
Convergence criterion (GCONV =1E-8) satisfied.
Estadisticos de ajuste del modelo
Terminos independientes
Solo terminos y
Criterio independientes Variables adicionales
AIC 501 .977 470 .517
SC 505 .968 494 .466
-2 LOG L 499 .977 458 .517
Prueba de la hipotesis nula global: BETA=0
Test Chi -cuadrado DF Pr > ChiSq
Ratio de verosim 41.4590 5 <.0001
Puntuacion 40.1603 5 <.0001
Wald 36 .1390 5 <.0001
Tipo 3 Analisis de efectos
Chi -cuadrado
Efecto DF de Wald Pr > ChiSq
GRE 1 4.2842 0.0385
GPA 1 5.8714 0.0154
RANK 3 20 .8949 0.0001
En la salida muestra el ajuste del modelo. El valor de -2 LOG L = 499.977 se puede
usar para hacer comparaciones en modelos anidados.
27
La razon de verosimilitudes chi-cuadrado igual a 41.4590 con un p-valor igual a 0.0001
indica que el modelo completo tiene un ajuste mejor que el modelo con una constante.
En la parte del analisis de efectos de Type 3, se muestran los contrastes de hip otesis
para cada una de las variables de manera individual. Los p-valores de los estadsticos
muestran que cada una de las variables aumenta el ajuste del modelo.
Salida SAS
Analisis del estimador de maxima verosimilitud
Error Chi -cuadrado
Parametro DF Estimador estandar de Wald Pr > ChiSq
Intercept 1 -5.5414 1.1381 23.7081 <.0001
GRE 1 0.00226 0.00109 4.2842 0.0385
GPA 1 0.8040 0.3318 5.8714 0.0154
RANK 1 1 1.5514 0.4178 13 .7870 0.0002
RANK 2 1 0.8760 0.3667 5.7056 0.0169
RANK 3 1 0.2112 0.3929 0.2891 0.5908
Se muestran los coecientes, los errores est andar (error), los estadsticos y sus p-
valores. Los coecientes para gre y gpa son signicativos, as como los terminos corres-
pondientes a rank=1 y rank=2 (con respecto a la categora base rank=4).
Los coecientes de la regresi on logstica muestran el cambio en el logaritmo de los
odds cuando se incrementa en una unidad la variable predictora correspondiente.
Por cada cambio en una unidad de gre, el logaritmo del odds de la admisi on frente
a la no admisi on se incrementa en 0.002.
Por cada cambio en una unidad de gpa, el logaritmo del odds de la admisi on frente
a la no admisi on se incrementa en 0.804.
Los coecientes para las categoras de rank tienen una interpretaci on algo diferente.
Por ejemplo, el hecho de venir de una universidad con rango igual a 1, frente a otra con
rango igual a 4, incrementa el logaritmo del odds de la admision por 1.55.
28
Salida SAS
Estimadores de cocientes de disparidad;
Estimador 95 % Wald
Efecto del punto Limites de confianza
GRE 1.002 1.000 1.004
GPA 2.235 1.166 4.282
RANK 1 vs 4 4.718 2.080 10.701
RANK 2 vs 4 2.401 1.170 4.927
RANK 3 vs 4 1.235 0.572 2.668
Asociacion de probabilidades predichas y respuestas observadas
Concordancia de porcentaje 69.1 D de Somers 0.386
Discordancia de porcentaje 30.6 Gamma 0.387
Porcentaje ligado 0.3 Tau -a 0.168
Pares 34671 c 0.693
Se obtienen las razones de odds, (la exponencial de los coecientes de la regresion
logstica) que se pueden interpretar como el cambio multiplicativo en los odds por cada
cambio de una unidad en una variable explicativa. Por ejemplo, para el incremento de
una unidad en gpa, los odds de ser admitidos en el curso (frente a no ser admitidos) se
incrementa en un factor de 2.24.
Se muestra un test para el efecto total de la variable rank, as como los coecientes
que describen la diferencia entre el grupo de referencia (rank=4) y cada uno de los tres
otros grupos.
Se contrasta tambien las diferencias entre los otros niveles de rank. Por ejemplo, se
puede contrastar por la diferencia entre los coecientes para rank=2 y rank=3, es decir,
comparar los odds de la admisi on para estudiantes que proceden de una universidad
de rango 2 frente a una de rango 3. Seg un el p-valor, el coeciente para rank=2 es
signicativamente diferente del coeciente para rank=3.
En la tabla siguiente se muestra tambien la estimacion de de la diferencia que es
0.6648, lo que indica que el hecho de asistir a una universidad con rango igual a 2 frente
a una universidad con rango igual a 3, incrementa el logaritmo de los odds de la admisi on
por 0.67.
proc logistic data="c:\ dondesea\binary" descending;
class rank / param=ref ;
model admit = gre gpa rank;
contrast rank 2 vs 3 rank 0 1 -1 / estimate=parm;
run;
29
Salida SAS
Resultados del test de contraste
Chi -cuadrado
Contraste DF de Wald Pr > ChiSq
rank 2 vs 3 1 5.5052 0.0190
Estimacion de filas de contraste y resultados del test
Error Limites de
Contraste Tipo Fila Estimador estandar Alfa confianza
rank 2 vs 3 PARM 1 0.6648 0.2833 0.05 0.1095
1.2200
Se pueden usar tambien las probabilidades predichas para interpretar mejor el mo-
delo. Se estiman las probabilidades predichas de admisi on cuando gre cambia de 200 a
800 (en incrementos de 100). Cuando se estiman las probabilidades predichas se man-
tiene gpa constante en 3.39 (que es su media), y rank en 2 (poniendo rank 0 1 0).
El termino intercept seguido de un 1 indica que se incluye tambien en el modelo la
constante.
proc logistic data="c:\ dondesea\binary" descending;
class rank / param=ref ;
model admit = gre gpa rank;
contrast gre =200 intercept 1 gre 200 gpa 3.3899
rank 0 1 0 / estimate=prob;
contrast gre =300 intercept 1 gre 300 gpa 3.3899
rank 0 1 0 / estimate=prob;
contrast gre =400 intercept 1 gre 400 gpa 3.3899
rank 0 1 0 / estimate=prob;
contrast gre =500 intercept 1 gre 500 gpa 3.3899
rank 0 1 0 / estimate=prob;
contrast gre =600 intercept 1 gre 600 gpa 3.3899
rank 0 1 0 / estimate=prob;
contrast gre =700 intercept 1 gre 700 gpa 3.3899
rank 0 1 0 / estimate=prob;
contrast gre =800 intercept 1 gre 800 gpa 3.3899
rank 0 1 0 / estimate=prob;
run;
30
Salida SAS
Resultados del test de contraste
Chi -cuadrado
Contraste DF de Wald Pr > ChiSq
gre =200 1 9.7752 0.0018
gre =300 1 11 .2483 0.0008
gre =400 1 13 .3231 0.0003
gre =500 1 15 .0984 0.0001
gre =600 1 11 .2291 0.0008
gre =700 1 3.0769 0.0794
gre =800 1 0.2175 0.6409
Estimacion de filas de contraste y resultados del test
Limites de Chi -cuadrado
Contraste Estimador estandar confianza de Wald
Pr>ChiSq
gre =200 0.1844 0.0715 0.0817 0.3648 9.7752 0.0018
gre =300 0.2209 0.0647 0.1195 0.3719 11 .2483 0.0008
gre =400 0.2623 0.0548 0.1695 0.3825 13 .3231 0.0003
gre =500 0.3084 0.0443 0.2288 0.4013 15 .0984 0.0001
gre =600 0.3587 0.0399 0.2847 0.4400 11 .2291 0.0008
gre =700 0.4122 0.0490 0.3206 0.5104 3.0769 0.0794
gre =800 0.4680 0.0685 0.3391 0.6013 0.2175
En las probabilidades predichas se observa que la estimaci on de la probabilidad de
ser admitido es solo de 0.18 si la puntuaci on de alguien en gre es 200, pero se incrementa
a 0.47 si la puntuacion de gre es 800, manteniendo gpa en su media (3.39) y rank en 2.
31
Estrategias en la selecci on del modelo
Para un conjunto de datos con una respuesta binaria, una pregunta fundamental
es c omo seleccionar un modelo de regresion logstica adecuado? Se presentan los mis-
mos problemas que en la regresi on ordinaria. As, el proceso de selecci on de un modelo
adecuado se hace difcil cuando el n umero de variables explicativas aumenta, porque
aumentan a su vez los posibles efectos e interacciones.
Hay dos objetivos contrapuestos: el modelo debe ser lo sucientemente complejo
como para adaptarse bien a los datos, pero los modelos m as simples son m as f aciles de
interpretar. Es decir, es mejor encontrar una version suavizada en lugar de un sobreajuste
de los datos.
Cuantas variables predictoras se deben introducir en el modelo? Los datos
son no balanceados en Y si y = 1 o y = 0 aparecen relativamente pocas veces. Esto
limita el n umero de variables predictoras cuyos efectos se pueden estimar de manera
precisa.
Como una regla heurstica, se considera que debera haber al menos 10 observaciones
de 1 o 0 por cada variable predictora. Por ejemplo, si y = 1 solo 30 veces en n = 1000
observaciones, el modelo no debera tener m as de tres variables predictoras, aunque el
tama no total de la muestra fuera grande.
En general, modelos con muchas variables predictoras pueden presentar colinealida-
des lo cual hace necesario eliminar las variables que sean redundantes.
Como ocurre en regresi on ordinaria, se pueden usar diferentes algoritmos para incluir
o eliminar variables en un modelo de regresion logstica. As, se pueden usar metodos
de:
Selecci on hacia adelante (forward).
Selecci on hacia atr as (backward).
Selecci on stepwise.
Informaci on de Akaike:
AIC = 2(m aximo de la log-verosimilitud) n umero de parametros.
32
Ejemplo: Cangrejos cacerola
En los datos de los cangrejos cacerola, se tienen cuatro variables predictoras: color
(4 categoras), tipo de espina (3 categoras), peso, y anchura del caparaz on. Se plantea
un modelo de regresion logstica para predecir si una hembra tiene amantes o no: y = 1
si tiene al menos 1 amante e y = 0 en caso contrario.
Se denominan (c
1
, c
2
, c
3
) las variables indicadoras de los tres primeros colores (con
respecto al total de 4 colores) y (s
1
, s
2
) son las variables indicadoras de las dos primeras
condiciones de la espina (de las 3 que hay).
Se considera el modelo
logit(P(Y = 1)) = +
1
Peso +
2
Ancho +
3
c
1
+
4
c
2
+
5
c
3
+
6
s
1
+
7
s
2
tabla <- read.csv("http://www.hofroe.net/stat557/data/crab.txt",
header=T, sep="\t")
dimnames(tabla )[[2]] = c("color","spine","width","satell","weight")
names(tabla)
# Se define como factor la variable que nos indica el color.
tabla$C.fac <- factor(tabla$color , levels=c("5","4","3","2"),
labels=c("oscuro", "med -oscuro", "med", "med -claro"))
# Se define una variable binaria: tiene o no tiene amantes
tabla$Sa.bin = ifelse(tabla$satell > 0, 1, 0)
options(contrasts=c("contr.treatment", "contr.poly"))
tabla$C.fac <- factor(tabla$color , levels=c("5", "4", "3", "2"))
tabla$S.fac <- factor(tabla$spine , levels=c("3", "2", "1"))
# Se ajusta el modelo con todos los predictores
# El peso se divide por 1000 para evitar overflows
# Nota: I() indica que se toma la operacion aritmetica
# y se evita el sentido de la formula simbolica
cangre.fit.logist.todo <- glm(Sa.bin C.fac + S.fac + width
+ I(weight/1000) , family=binomial , data=tabla)
summary(cangre.fit.logist.todo , cor=T)
# Existe alta correlacion entre peso y anchura del caparazon.
# Por ello no se considera el peso en lo que sigue.
cangre.fit.logist.optimo <- glm(Sa.bin C.fac*S.fac*width ,
family=binomial , data=tabla)
res = step(cangre.fit.logist.optimo , list(lower = 1,
upper=formula(cangre.fit.logist.optimo )), scale=1, trace=F, direction="backward")
res$anova
res
33
# Se repite el analisis con el comando stepAIC de la libreria MASS
library(MASS)
stepAIC(cangre.fit.logist.optimo)
Se observa que en la matriz de correlaciones asintotica existe una alta correlaci on
entre el peso y la anchura del caparaz on.
Call:
glm(formula = Sa.bin ~ C.fac + S.fac + width + I(weight/1000),
family = binomial, data = tabla)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.1977 -0.9424 0.4849 0.8491 2.1198
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -9.2734 3.8378 -2.416 0.01568 *
C.fac4 1.1198 0.5933 1.887 0.05910 .
C.fac3 1.5058 0.5667 2.657 0.00788 **
C.fac2 1.6087 0.9355 1.720 0.08552 .
S.fac2 -0.4963 0.6292 -0.789 0.43024
S.fac1 -0.4003 0.5027 -0.796 0.42588
width 0.2631 0.1953 1.347 0.17788
I(weight/1000) 0.8258 0.7038 1.173 0.24069
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 225.76 on 172 degrees of freedom
Residual deviance: 185.20 on 165 degrees of freedom
AIC: 201.2
Number of Fisher Scoring iterations: 4
Correlation of Coefficients:
(Intercept) C.fac4 C.fac3 C.fac2 S.fac2 S.fac1 width
C.fac4 -0.13
C.fac3 -0.07 0.72
C.fac2 0.00 0.45 0.55
S.fac2 -0.22 -0.07 -0.17 -0.25
S.fac1 -0.01 -0.03 -0.21 -0.37 0.24
width -0.96 0.02 -0.03 -0.03 0.19 0.02
I(weight/1000) 0.67 -0.01 0.00 -0.04 -0.09 -0.04 -0.83
34
Los resultados que se obtienen con la fucion step y con la funcion stepAIC de la
librera MASS son:
Step Df Deviance Resid. Df Resid. Dev AIC
1 NA NA 152 170.4404 212.4404
2 - C.fac:S.fac:width 3 3.23334337 155 173.6738 209.6738
3 - C.fac:S.fac 6 7.88506583 161 181.5588 205.5588
4 - S.fac:width 2 0.07819029 163 181.6370 201.6370
5 - S.fac 2 1.44361451 165 183.0806 199.0806
6 - C.fac:width 3 4.37640503 168 187.4570 197.4570
---------------------------------------------------------------------
Step: AIC=197.46
Sa.bin ~ C.fac + width
Df Deviance AIC
<none> 187.46 197.46
- C.fac 3 194.45 198.45
- width 1 212.06 220.06
Call: glm(formula = Sa.bin ~ C.fac + width, family = binomial, data = tabla)
Coefficients:
(Intercept) C.fac4 C.fac3 C.fac2 width
-12.715 1.106 1.402 1.330 0.468
Degrees of Freedom: 172 Total (i.e. Null); 168 Residual
Null Deviance: 225.8
Residual Deviance: 187.5 AIC: 197.5
35
Curvas ROC: resumen de la potencia predictiva
Para comprobar la efectividad de un modelo dado en la clasicacion de observaciones,
se puede construir una tabla de clasicaci on donde se cruza el verdadero valor de la
observacion (1 o 0), con la prediccion de la misma seg un el modelo que se considera.
La prediccion se suele hacer con respecto a un valor de referencia arbitrario
0
:
y
i
= 1 si
i
>
0
mientras que
y
i
= 0 si
i

0
El valor habitual que se suele tomar como valor de corte es
0
= 0,5
Se resume la capacidad predictiva de un modelo de regresion logstica mediante el
concepto de sensibilidad:
P ( y = 1|y = 1)
y mediante el concepto de especicidad:
P ( y = 0|y = 0)
Todo esto es muy sensible a las frecuencias relativas de y = 1 e y = 0.
Una curva de tipo receiver operating characteristic (ROC) es un gr aco en el que se
representa la sensibilidad en funci on de (1 especicidad).
Si vamos modicando los valores de
0
y representamos la sensibilidad (en ordenadas)
frente a (1 especicidad) (en abscisas) tenemos la curva ROC. Es una curva concava
que conecta los puntos (0, 0) y (1, 1). Cuanto mayor sea el area bajo la curva mejores
ser an las predicciones.
La curva ROC ofrece un mejor resumen de la capacidad predictiva que una tabla de
clasicaci on, porque presenta la potencia predictiva para todos los posibles valores de
referencia
0
.
Cuando
0
est a cerca de 0 casi todas las predicciones ser an y = 1, con lo cual
la sensibilidad estara pr oxima a 1 y la especicidad estara cerca de 0. As, el punto
(1 especificidad, sensibilidad) tendra coordenadas (1, 1)
Cuando
0
est a cerca de 1 casi todas las predicciones ser an y = 0, con lo cual
la sensibilidad estara pr oxima a 0 y la especicidad estara cerca de 1. As, el punto
(1 especicidad, sensibilidad) tendr a coordenadas (0, 0). Para una especicidad dada,
la mayor potencia predictiva corresponde a la sensibilidad mas alta, de modo que cuanta
mayor sea el area bajo la curva ROC mejor ser a la potencia de prediccion.
36
En R existen numerosas libreras que consieran curvas ROC. Por ejemplo,
library(verification)
# Se consideran valores 0-1 frente a probabilidades pi_i
suceso = c(0,0,0,1,1,1,0,1,1,0,0,0,0,1,1)
p = c(0.928 ,0.576 ,0.008 ,0.944 ,0.832 ,0.816 ,0.136 ,
0.584 ,0.032 ,0.016 ,0.28 ,0.024 ,0,0.984 ,0.952)
A = data.frame(suceso , p)
roc.plot(A$suceso , A$p) # Dibujo la ROC
roc.area(A$suceso , A$p) # Area bajo ROC (Ho: A=0.5)
Se obtiene
$A
[1] 0.875
$n.total
[1] 15
$n.events
[1] 7
$n.noevents
[1] 8
$p.value
[1] 0.006993007
37
Se pueden dibujar varias curvas ROC de distintos modelos para comparar su potencia
de predicci on. Esta potencia se mide en terminos del area debajo de la curva. Un area
igual a 0.5 representa al peor modelo y un area igual a 1 al mejor.
38
Ejemplo con SAS
En el ejemplo, se dibuja una curva ROC, se estiman los par ametros y se presentan
las medidas de bondad de ajuste en una regresion logstica. Los datos consisten en tres
variables: n (n umero de personas en una muestra), enfermo (n umero de enfermos de la
muestra), y edad. Se considera un modelo de regresi on logstica para estudiar el efecto
de la edad sobre la probabilidad de contraer la enfermedad.
La opci on scale=none se pone para calcular los estadsticos de ajuste sin corregir
para overdispersion, La opci on rsquare se usa para calcular los estadsticos de tipo R
2
generalizados. La opci on clparm=wald muestra los intervalos para los par ametros de la
regresi on logstica. La opcion units muestra los estimadores de la razon de odds para
el cambio de 10 a nos en la variable edad. La opci on clodds=pl se pone para obtener los
intervalos de conanza para las razones de odds. La opcion outroc=roc1 muestra una
curva ROC.
El area que hay bajo la curva ROC aparece en el estadstico c en la tabla denominada
Asociacion de probabilidades predichas y respuestas observadas. En este ejemplo, el area
bajo la curva ROC es igual a 0.953.
OPTIONS nodate ls=70;
/* Se graban los resultados en un fichero rtf o en uno pdf */
ODS rtf file=c:\ dondesea\cosa.rtf style=minimal
startpage=no;
data cosas;
INPUT enfermo n edad;
DATALINES;
0 14 25
0 20 35
0 19 45
7 18 55
6 12 65
17 17 75
;
PROC logistic data=cosas;
model enfermo/n=edad / scale=none
clparm=wald clodds=pl rsquare outroc=roc1;
units edad =10;
RUN;
symbol1 i=join v=none c=blue;
PROC gplot data=roc1;
title Curva ROC;
plot _sensit_*_1mspec_=1 / vaxis=0 to 1 by .1 cframe=yellow;
RUN;
39
Analisis del estimador de maxima verosimilitud
Error Chi -cuadrado
Parametro DF Estimador estandar de Wald Pr > ChiSq
Intercept 1 -12.5016 2.5555 23.9317 <.0001
edad 1 0.2066 0.0428 23 .3475 <.0001
Estimadores de cocientes de disparidad;
Estimador 95 % Wald
Efecto del punto Limites de confianza
edad 1.229 1.131 1.337
Asociacion de probabilidades predichas y respuestas observadas
Concordancia de porcentaje 92.6 D de Somers 0.906
Discordancia de porcentaje 2.0 Gamma 0.958
Porcentaje ligado 5.4 Tau -a 0.384
Pares 2100 c 0.953
Intervalo de confianza de Wald para los parametros
Parametro Estimador 95 % Limites de confianza
Intercept -12.5016 -17.5104 -7.4929
edad 0.2066 0.1228 0.2904
Intervalo de confianza de verosimilitud del perfil
para cocientes de disparidad ajustados
Efecto Unidad Estimador 95 % Limites de confianza
edad 10 .0000 7.892 3.881 21.406
40
41
Tema 5: Regresion Logstica
Multinomial
Introducci on
Se considera, ahora, un modelo de regresion logstica donde se tiene una variable
dependiente con mas de dos categoras.
Los modelos de respuesta pueden ser nominales o bien ordinales. A su vez, las varia-
bles explicativas pueden ser categ oricas o cuantitativas.
En los modelos de regresi on multinomial se asume que los recuentos de las cate-
goras de Y tienen una distribuci on multinomial. Esta distribuci on es, a su vez, una
generalizaci on de la distribuci on binomial.
Modelos Logit para respuestas nominales
Denotamos como J el n umero de categoras de la variable Y y {
1
, . . . ,
J
} las
probabilidades de distintas respuestas que satisfacen

j

j
= 1.
La distribuci on de probabilidad del n umero de observaciones de las J categoras,
con n observaciones independientes, sigue una distribucion multinomial que modeliza
la probabilidad de cada una de las posibles maneras en que n observaciones pueden
repartirse entre las J categoras.
Al ser la escala de medida nominal, el orden entre las categoras es irrelevante.
Se toma una categora como respuesta base, por ejemplo la ultima categora (J), y
se dene un modelo logit con respecto a ella:
log
_

J
_
=
j
+
j
x
donde j = 1, . . . , J 1.
El modelo tiene J 1 ecuaciones con sus propios parametros, y los efectos varan
con respecto a la categora que se ha tomado como base.
Cuando J = 2, el modelo equivale a una unica ecuaci on log (
1
/
2
) = logit(
1
) y se
obtiene el modelo de regresion logstica est andar.
1
La ecuacion general logit con respecto a la categora base J determina tambien los lo-
gits para cualquier pareja de categoras. As, si consideramos dos categoras cualesquiera
a y b,
log
_

b
_
= log
_

a
/
J

b
/
J
_
= log
_

J
_
log
_

J
_
=
(
a
+
a
x) (
b
+
b
x) = (
a

b
) + (
a

b
)x
De este modo, la ecuacion para las categoras a y b tiene tambien la forma +x donde
= (
a

b
) y = (
a

b
).
Ejemplo
Se analizan los datos sobre 59 caimanes en diversas zonas de Florida (USA). La
variable respuesta es la elecci on del tipo de comida principal que se encuentra en el
est omago de los animales, con cinco posibles categoras: peces, invertebrados, reptiles,
pajaros y otros. Como variables predictoras se consideran:
1. El lago en donde se captura al animal (L);
2. Su sexo (G);
3. el tama no S (si es menor o igual a 2.3 metros o mayor que este valor).
library(MASS)
library(nnet)
comen.labs = factor(c("peces","invert","reptiles","pajaritos","otros"),
levels=c("peces", "invert", "reptiles", "pajaritos", "otros"))
tamano.labs = factor(c(" <2.3", " >2.3"), levels=c(" >2.3", " <2.3"))
sexo.labs = factor(c("m", "f"), levels=c("m","f"))
charca.labs = factor(c("hancock", "oklawaha", "trafford", "george"),
levels=c("george", "hancock", "oklawaha", "trafford"))
tabla = expand.grid(comen=comen.labs , tamano=tamano.labs ,
sexo=sexo.labs , charca=charca.labs)
temp = c(7, 1, 0, 0, 5, 4, 0, 0, 1, 2, 16, 3, 2, 2, 3, 3, 0,
1, 2, 3, 2, 2, 0, 0, 1, 13, 7, 6, 0, 0, 3, 9, 1, 0, 2, 0, 1,
0, 1, 0, 3, 7, 1, 0, 1, 8, 6, 6, 3, 5, 2, 4, 1, 1, 4, 0, 1,
0, 0, 0, 13, 10, 0, 2, 2, 9, 0, 0, 1, 2, 3, 9, 1, 0,
1, 8, 1, 0, 0, 1)
tabla = structure(.Data=tabla[rep(1: nrow(tabla), temp), ],
row.names =1:219)
options(contrasts = c("contr.treatment", "contr.poly"))
fits1 = multinom(comen tamano , data=tabla)
summary(fits1 , cor=F)
2
Call:
multinom(formula = comen ~ tamano, data = tabla)
Coefficients:
(Intercept) tamano<2.3
invert -1.034070 0.9489120
reptiles -1.241705 -0.8583649
pajaritos -1.727214 -0.5551882
otros -1.241709 0.2943162
Std. Errors:
(Intercept) tamano<2.3
invert 0.2910708 0.3568648
reptiles 0.3148729 0.5349960
pajaritos 0.3836949 0.6063277
otros 0.3148735 0.4149523
Residual Deviance: 589.2134
AIC: 605.2134
La categora base que se toma es justamente la primera: peces.
Se pueden ajustar distintos modelos logit con la categora base en peces y com-
pararlos en terminos de sus diferencias en deviance, es decir mediante las diferencias
2(log(L(
1
, y)) log(L(
2
, y))).
fitS = multinom(comen charca*tamano*sexo , data=tabla)
fit0 = multinom(comen 1, data=tabla)
fit1 = multinom(comen charca , data=tabla)
fit2 = multinom(comen tamano , data=tabla)
fit3 = multinom(comen sexo , data=tabla)
fit4 = multinom(comen charca + tamano , data=tabla)
fit5 = multinom(comen charca + tamano + sexo , data=tabla)
deviance(fit0) - deviance(fitS)
deviance(fit1) - deviance(fitS)
deviance(fit2) - deviance(fitS)
deviance(fit3) - deviance(fitS)
deviance(fit4) - deviance(fitS)
deviance(fit5) - deviance(fitS)
fitS2 = multinom(comen charca*tamano , data=tabla)
deviance(fitS2) - deviance(fitS)
# Se usa como modelo el que no considera sexo
deviance(fit4) - deviance(fitS2)
# Se usa el modelo con las variables charca y tamano
summary(fit4 , cor=F)
3
> deviance(fit0) - deviance(fitS)
[1] 116.7611
> deviance(fit1) - deviance(fitS)
[1] 73.56589
> deviance(fit2) - deviance(fitS)
[1] 101.6116
> deviance(fit3) - deviance(fitS)
[1] 114.6571
> deviance(fit4) - deviance(fitS)
[1] 52.47848
> deviance(fit5) - deviance(fitS)
[1] 50.26368
> deviance(fitS2) - deviance(fitS)
[1] 35.39865
> # Se usa como modelo el que no considera sexo
> deviance(fit4) - deviance(fitS2)
[1] 17.07983
> # Se usa el modelo con las variables charca y tamano
> summary(fit4, cor=F)
Call:
multinom(formula = comen ~ charca + tamano, data = tabla)
Coefficients:
(Intercept) charcahancock charcaoklawaha charcatrafford tamano<2.3
invert -1.549021 -1.6581178 0.937237973 1.122002 1.4581457
reptiles -3.314512 1.2428408 2.458913302 2.935262 -0.3512702
pajaritos -2.093358 0.6954256 -0.652622721 1.088098 -0.6306329
otros -1.904343 0.8263115 0.005792737 1.516461 0.3315514
Std. Errors:
(Intercept) charcahancock charcaoklawaha charcatrafford tamano<2.3
invert 0.4249185 0.6128466 0.4719035 0.4905122 0.3959418
reptiles 1.0530577 1.1854031 1.1181000 1.1163844 0.5800207
pajaritos 0.6622972 0.7813123 1.2020025 0.8417085 0.6424863
otros 0.5258313 0.5575446 0.7765655 0.6214371 0.4482504
Residual Deviance: 540.0803
AIC: 580.0803
Se trabaja con el modelo que utiliza como covariables la charca y el tama no. Se
obtienen los coecientes de los odds en los que se compara cada tipo de comida con la
categora base peces.
Se pueden estimar, por ejemplo, las probabilidades de cada tipo de comida cuando
el tama no de un animal es > 2,3 y est a en el lago Hancok.
4
predict(fit4 , type="probs", newdata=data.frame(tamano=">2.3",
charca="hancock"))
peces invert reptiles pajaritos otros
0.57018414 0.02307664 0.07182898 0.14089666 0.19401358
Tambien se pueden estimar las probabilidades de cada una de las categoras para
distintos valores de las covariables.
predictions = predict(fit4 , type="probs",
newdata=expand.grid(tamano=tamano.labs , charca=charca.labs ))
cbind(expand.grid(tamano=tamano.labs ,charca=charca.labs),
predictions)
tamano charca peces invert reptiles pajaritos otros
1 <2.3 hancock 0.5352844 0.09311221 0.04745855 0.070402770 0.25374209
2 >2.3 hancock 0.5701841 0.02307664 0.07182898 0.140896661 0.19401358
3 <2.3 oklawaha 0.2581899 0.60188004 0.07723295 0.008820525 0.05387663
4 >2.3 oklawaha 0.4584248 0.24864187 0.19484367 0.029424141 0.06866547
5 <2.3 trafford 0.1843017 0.51682297 0.08877041 0.035897986 0.17420698
6 >2.3 trafford 0.2957471 0.19296047 0.20240167 0.108228505 0.20066229
7 <2.3 george 0.4521217 0.41284675 0.01156715 0.029664777 0.09379957
8 >2.3 george 0.6574619 0.13968167 0.02389991 0.081046951 0.09790956
5
Modelos Acumulados para datos ordinales
Cuando las respuestas de la variable categorica son ordinales se pueden utilizar
modelos logit acumulados.
La probabilidad acumulada de una variable Y es la probabilidad de que Y sea me-
nor o igual que un determinado valor, es decir, para una categora dada j se dene la
probabilidad acumulada como
P (Y j) =
1
+ +
j
para j = 1, . . . , J.
Las probabilidades acumuladas reejan el orden entre las categoras:
P (Y 1) P (Y 2) P (Y J) = 1
Los logits de las probabilidades acumuladas son
logit [P (Y j)] = log
_
P (Y j)
1 P (Y j)
_
=
log
_

1
+ +
j

j+1
+ +
J
_
= log
_

j
i=1

J
i=j+1

i
_
para j = 1, . . . , J 1.
El modelo logit de odds proporcionales, cuando se consideran d variables explicati-
cativas x = (x
1
, . . . , x
d
), se puede expresar como
logit [P (Y j|x)] =
j
+
d

i=1

i
x
i
para j = 1, . . . , J 1.
Cada variable independiente tiene un solo coeciente que no depende del valor j. La
dependencia con respecto al valor j aparece en el coeciente o constante
j
.
Teniendo en cuenta que si j

< j entonces
logit [P (Y j

|x)] logit [P (Y j|x)]


se tiene que vericar que
j

j
, es decir, los valores de
j
aumentan junto con los
valores de j.
Si se toman dos vectores de variables independientes
x
1
= (x
11
, . . . , x
1d
)

x
2
= (x
21
, . . . , x
2d
)

6
entonces
logit [P (Y j|x
1
)] logit [P (Y j|x
2
)] =
d

i=1

i
(x
1i
x
2i
) .
Pero, por otro lado,
logit [P (Y j|x
1
)] logit [P (Y j|x
2
)] = log
_
P (Y j|x
1
) /P (Y > j|x
1
)
P (Y j|x
2
) /P (Y > j|x
2
)
_
por lo que se puede reescribir como
log
_
P (Y j|x
1
) /P (Y > j|x
1
)
P (Y j|x
2
) /P (Y > j|x
2
)
_
=
d

i=1

i
(x
1i
x
2i
) .
La parte izquierda de la ecuacion es el llamado cociente de odds acumulado.
De este modo, los odds para un valor de respuesta menor o igual que j para x = x
1
es igual a exp
_

d
i=1

i
(x
1i
x
2i
)
_
veces los odds para x = x
2
y esta proporcionalidad
no depende del valor de j. Es por esto que al modelo se le denomina tambien modelo de
odds proporcionales.
Supongamos que los vectores x
1
y x
2
son iguales salvo en la componente i-esima.
Es decir, ambos individuos coinciden en todos los valores salvo en dicha componente y
supongamos, adem as, que dieren en una unidad en la i-esima componente. Se tiene,
bajo estas hip otesis, la siguiente ecuaci on:
P (Y j|x
1
) /P (Y > j|x
1
)
P (Y j|x
2
) /P (Y > j|x
2
)
= e

i
(x
1i
x
2i
)
= e

i
.
As, manteniendo todas las dem as variables constantes, el cambio de los odds de la
funci on de distribuci on de Y condicionada a x
1
y a x
2
es igual a e

i
.
7
Ejemplo: Enfermedad mental
En el libro Categorical Data Analysis (2002) de Agresti (pag. 279) se muestran los
datos de un estudio sobre una enfermedad mental donde se trata de relacionarla con dos
variables explicativas. La enfermedad mental se resume en una variable categorica con
los siguientes niveles: buen estado, sntomas leves, sntomas moderados y enfermedad.
Como variables predictoras tenemos:
x
1
mide el n umero de sucesos impactantes en la vida de la persona en los ultimos tres
a nos (divorcios, fallecimientos, etc.).
x
2
Estatus socio-economico con niveles 1 (alto) y 0 (bajo).
La enfermedad mental, como variables respuesta, es un factor que presenta ordenacion
entre sus categoras.
dat <- read.table(
"http://www.biostat.jhsph.edu/bcaffo/aglm/files/
mentalImpairmentData.dat")
names(dat) <- c("estado", "estatus", "chungos")
dat$mental <- ordered(dat$estado , levels =1:4,
labels=c("Well","Mild","Moderate","Impaired"))
# La libreria polr utiliza como parametrizacion
# el negativo del vector de efectos: se cambia el signo
dat$estatus2 <- -dat$estatus
dat$chungos2 <- -dat$chungos
library(MASS)
fit <- polr(mental estatus2 + chungos2 , data=dat)
summary(fit)
Call:
polr(formula = mental ~ estatus2 + chungos2, data = dat)
Coefficients:
Value Std. Error t value
estatus2 1.1112 0.6109 1.819
chungos2 -0.3189 0.1210 -2.635
Intercepts:
Value Std. Error t value
Well|Mild -0.2819 0.6423 -0.4389
Mild|Moderate 1.2128 0.6607 1.8357
Moderate|Impaired 2.2094 0.7210 3.0644
Residual Deviance: 99.0979
AIC: 109.0979
Otra opci on es usar la funcion lrm. Esta funci on est a en la librera rms. Se utiliza, en
este caso, las variables con sus signos originales. Tambien hay que reordenar los niveles
y que sea el mejor estado el que tenga el valor mas alto.
8
dat$mental.rev = ordered(dat$estado , levels =4:1,
labels=c("impaired", "moderate", "mild", "well"))
library(rms)
fit.lrm <- lrm(mental.rev estatus + chungos , data=dat)
fit.lrm
Logistic Regression Model
lrm(formula = mental.rev ~ estatus + chungos, data = dat)
Frequencies of Responses
impaired moderate mild well
9 7 12 12
Model Likelihood Discrimination Rank Discrim.
Ratio Test Indexes Indexes
Obs 40 LR chi2 9.94 R2 0.236 C 0.705
max |deriv| 8e-10 d.f. 2 g 1.116 Dxy 0.409
Pr(> chi2) 0.0069 gr 3.053 gamma 0.425
gp 0.234 tau-a 0.310
Brier 0.197
Coef S.E. Wald Z Pr(>|Z|)
y>=moderate 2.2094 0.7210 3.06 0.0022
y>=mild 1.2128 0.6607 1.84 0.0664
y>=well -0.2819 0.6423 -0.44 0.6607
estatus 1.1112 0.6109 1.82 0.0689
chungos -0.3189 0.1210 -2.64 0.0084
Se puede considerar el mismo modelo con SAS:
OPTIONS nodate ls=70;
/* Se graban los resultados en un fichero rtf o en uno pdf
ODS rtf file=c:\ dondesea\cosa.rtf style=minimal startpage=no; */
data mental;
INFILE c:\ dondesea\DatosMental.txt;
INPUT estado estatus chungos;
PROC genmod ;
model estado = chungos estatus / dist=multinomial link=clogit lrci type3;
RUN;
9
Salida SAS

Response Profile
Ordered Total
Value estado Frequency
1 1 12
2 2 12
3 3 7
4 4 9
PROC GENMOD is modeling the probabilities of levels of estado having LOWER
Ordered Values in the response profile table. One way to change this to model
the probabilities of HIGHER Ordered Values is to specify the DESCENDING option
in the PROC statement.
Criteria For Assessing Goodness Of Fit
Criterion DF Value Value/DF
Log Likelihood -49.5489
Algorithm converged.
Analysis Of Parameter Estimates
Likelihood Ratio
Standard 95 % Confidence Chi -
Parameter DF Estimate Error Limits Square Pr > ChiSq
Intercept1 1 -0.2819 0.6423 -1.5615 0.9839 0.19 0.6607
Intercept2 1 1.2128 0.6607 -0.0507 2.5656 3.37 0.0664
Intercept3 1 2.2094 0.7210 0.8590 3.7123 9.39 0.0022
chungos 1 -0.3189 0.1210 -0.5718 -0.0920 6.95 0.0084
estatus 1 1.1112 0.6109 -0.0641 2.3471 3.31 0.0689
Scale 0 1.0000 0.0000 1.0000 1.0000
NOTE: The scale parameter was held fixed.
LR Statistics For Type 3 Analysis
Chi -
Source DF Square Pr > ChiSq
chungos 1 7.78 0.0053
estatus 1 3.43 0.0641

10
Ejemplo
Se tiene una muestra de 735 personas a los que se pregunta por sus preferencias en
cuanto a tres ramas (brands) de algunos productos. Se sabe tambien el sexo y la edad
de las personas de la encuesta.
Los datos (en formato SAS) se pueden descargar en
http://www.ats.ucla.edu/stat/sas/dae/mlogit.sas7bdat
La variable dependiente es brand. La variable female se codica como 0 para hombres
y 1 para mujeres.
library(sas7bdat)
lacosa = read.sas7bdat(
"http://www.ats.ucla.edu/stat/sas/dae/mlogit.sas7bdat")
colnames(lacosa) = c("brand","female","age")
attach(lacosa)
head(lacosa)
# Se considera un analisis descriptivo
table(brand)
table(female)
summary(age)
sd(age)
xtabs( female + brand)
brand
1 2 3
207 307 221
> table(female)
female
0 1
269 466
> summary(age)
Min. 1st Qu. Median Mean 3rd Qu. Max.
24.0 32.0 32.0 32.9 34.0 38.0
> sd(age)
[1] 2.333195
> xtabs(~ female + brand)
brand
female 1 2 3
0 92 99 78
1 115 208 143
Se aplica el modelo de regresion multinomial. Se usa el comando mlogit.data para
expandir el formato de los datos. As, para cada observacion de la base de datos original,
se obtienen 3 observaciones: una para cada una de los valores de la variable brand. En
el nuevo formato, el valor de brand aparece en la variable alt, y si una rama ha sido o
no seleccionada por la persona se indica como TRUE o FALSE.
11
library(mlogit)
lacosa$brand = as.factor(lacosa$brand)
# Con mlogit.data se expanden los datos
mldata = mlogit.data(lacosa , varying=NULL , choice="brand",
shape="wide")
head(mldata)
# brand 1 es el nivel de referencia
mlogit.model = mlogit(brand1| female+age , data=mldata , reflevel="1")
summary(mlogit.model)
> head(mldata)
brand female age chid alt
1.1 TRUE 0 24 1 1
1.2 FALSE 0 24 1 2
1.3 FALSE 0 24 1 3
2.1 TRUE 0 26 2 1
2.2 FALSE 0 26 2 2
2.3 FALSE 0 26 2 3
Call:
mlogit(formula = brand ~ 1 | female + age, data = mldata, reflevel = "1",
method = "nr", print.level = 0)
Frequencies of alternatives:
1 2 3
0.28163 0.41769 0.30068
nr method
5 iterations, 0h:0m:0s
g(-H)^-1g = 0.00158
successive function values within tolerance limits
Coefficients :
Estimate Std. Error t-value Pr(>|t|)
2:(intercept) -11.774478 1.774612 -6.6350 3.246e-11 ***
3:(intercept) -22.721201 2.058028 -11.0403 < 2.2e-16 ***
2:female 0.523813 0.194247 2.6966 0.007004 **
3:female 0.465939 0.226090 2.0609 0.039316 *
2:age 0.368201 0.055003 6.6942 2.169e-11 ***
3:age 0.685902 0.062627 10.9523 < 2.2e-16 ***
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
Log-Likelihood: -702.97
McFadden R^2: 0.11676
Likelihood ratio test : chisq = 185.85 (p.value = < 2.22e-16)
En los resultados anteriores se obtienen los coecientes y sus p-valores. Cada variable
independiente y el intercept aparecen dos veces, una para cada una de las categoras
12
denominadas alt2 y alt3. Corresponden a dos ecuaciones:
log
_
P(brand = 2)
P(brand = 1
_
= b
10
+ b
11
female + b
12
age
log
_
P(brand = 3)
P(brand = 1
_
= b
20
+ b
21
female + b
22
age
donde los b
ij
son los coecientes de regresion de la salida.
Por ejemplo, por cada aumento en una unidad de la variable age, el logaritmo del
ratio de las dos probabilidades, P(brand = 2)/P(brand = 1)), se incrementan en 0.368,
y el logaritmo del ratio de las dos probabilidades, P(brand = 3)/P(brand = 1)), se
incrementan en 0.686. Por tanto, en general, cuanto mayor sea una persona tendr a m as
preferencia por brand igual a 2 o a 3, que por brand igual a 1.
A continuaci on, se muestran los resultados de la regresi on en terminos de las pro-
babilidades. Por ejemplo, se muestra un rango de distintas edades y se calculan las
probabilidades de escoger cada categora de brand para mujeres y hombres. Se generan
los valores predichos en la escala logit usando los coecientes del modelo. En brand =
1, el valor se ja en 0.
Las columnas etiquetadas como pred.1, pred.2, y pred.3, contienen las probabilidades
predichas de que brand sea igual a 1, 2 y 3 respectivamente.
newdata = data.frame(cbind(age=rep (24:38 , 2),
female=c(rep(0, 15), rep(1, 15))))
logit1 = rep(0, 30)
logit2 = mlogit.model$coefficients [[1]] +
mlogit.model$coefficients [[3]]*newdata$female +
mlogit.model$coefficients [[5]]
logit3 = mlogit.model$coefficients [[2]] +
mlogit.model$coefficients [[4]]*newdata$female +
mlogit.model$coefficients [[6]]*newdata$age
logits = cbind(logit1 , logit2 , logit3)
p.unscaled = exp(logits)
p = cbind(newdata , (p.unscaled / rowSums(p.unscaled )))
colnames(p) = c("age", "female", "pred.1", "pred.2", "pred.3")
print(p)
13
age female pred.1 pred.2 pred.3
1 24 0 0.99808046 1.110408e-05 0.001908436
2 25 0 0.99620671 1.108323e-05 0.003782206
3 26 0 0.99250704 1.104207e-05 0.007481915
4 27 0 0.98524197 1.096124e-05 0.014747066
5 28 0 0.97112746 1.080421e-05 0.028861737
6 29 0 0.94426773 1.050539e-05 0.055721769
7 30 0 0.89511069 9.958493e-06 0.104879355
8 31 0 0.81125518 9.025564e-06 0.188735793
9 32 0 0.68402002 7.610018e-06 0.315972375
10 33 0 0.52159109 5.802926e-06 0.478403104
11 34 0 0.35446313 3.943555e-06 0.645532931
12 35 0 0.21663631 2.410173e-06 0.783361283
13 36 0 0.12225171 1.360103e-06 0.877746930
14 37 0 0.06554790 7.292487e-07 0.934451367
15 38 0 0.03412247 3.796272e-07 0.965877149
16 24 1 0.99694362 1.872735e-05 0.003037650
17 25 1 0.99396789 1.867145e-05 0.006013440
18 26 1 0.98811173 1.856145e-05 0.011869713
19 27 1 0.97668612 1.834682e-05 0.023295535
20 28 1 0.95476547 1.793505e-05 0.045216598
21 29 1 0.91403272 1.716989e-05 0.085950112
22 30 1 0.84265232 1.582903e-05 0.157331848
23 31 1 0.72953100 1.370407e-05 0.270455296
24 32 1 0.57599833 1.081999e-05 0.423990849
25 33 1 0.40624216 7.631164e-06 0.593750205
26 34 1 0.25627545 4.814074e-06 0.743719733
27 35 1 0.14788119 2.777913e-06 0.852116036
28 36 1 0.08037836 1.509889e-06 0.919620131
29 37 1 0.04216364 7.920341e-07 0.957835567
30 38 1 0.02168904 4.074236e-07 0.978310551
Se pueden presentar gr acamente las predicciones. Por ejemplo, se dibujan las pro-
babilidades predichas de que una persona seleccione brand = 1 en funci on de la variable
age, cuando es hombre (female = 0, en azul), y cuando es mujer (female = 1 , en rojo).
win.graph ()
plot(p$pred.1[p$female ==0]p$age[p$female ==0], type="l",col="blue",
lwd=1,ylab="Probabilidad predicha para Brand = 1", xlab="Age")
lines(p$pred.1[p$female ==1]p$age[p$female ==1],col="red",lwd=1)
legend (33.5 ,.93 ,c("Males","Females"),col=c("blue","red"),lwd=c(1,1))
14
15
Se usa ahora SAS para tratar el mismo conjunto de datos.
OPTIONS nodate ls=70;
/* Se graban los resultados en un fichero rtf o en uno pdf
ODS rtf file=c:\ dondesea\cosa.rtf style=minimal startpage=no; */
data market;
INFILE d:\ dondesea\market.txt;
INPUT brand female age;
proc freq data=market;
tables brand;
proc sort data=market;
by brand;
proc means data=market;
by brand;
var age female;
proc logistic data=market;
class brand (ref = "1");
model brand = female age / link = glogit;
run;
Salida SAS

Procedimiento FREQ
Frequencia Porcentaje
brand Frecuencia Porcentaje acumulada acumulado
--------------------------------------------------------------
1 207 28.16 207 28.16
2 307 41.77 514 69.93
3 221 30.07 735 100.00
------------------------------ brand =1 -------------------------------
Procedimiento MEANS
Numero de Desviacion
Variable observaciones Media estandar Minimo
---------------------------------------------------------------------
age 207 31.4879227 2.1083742 24.0000000
female 207 0.5555556 0.4981086 0
---------------------------------------------------------------------
Variable Maximo
-----------------------
age 38.0000000
female 1.0000000
-----------------------

16

------------------------------ brand =2 -------------------------------
Numero de Desviacion
Variable observaciones Media estandar Minimo
---------------------------------------------------------------------
age 307 32.8436482 1.8243945 28.0000000
female 307 0.6775244 0.4681870 0
---------------------------------------------------------------------
Variable Maximo
-----------------------
age 38.0000000
female 1.0000000
-----------------------
------------------------------ brand =3 -------------------------------
Numero de Desviacion
Variable observaciones Media estandar Minimo
---------------------------------------------------------------------
age 221 34.3031674 2.3478111 27.0000000
female 221 0.6470588 0.4789695 0
---------------------------------------------------------------------
Variable Maximo
-----------------------
age 38.0000000
female 1.0000000
-----------------------
Procedimiento LOGISTIC
Perfil de respuesta
Valor Frecuencia
ordenado brand total
1 1 207
2 2 307
3 3 221
Los logits modelados usan brand=1 como categoria de referencia.
Estado de convergencia del modelo
Convergence criterion (GCONV =1E-8) satisfied.

17

Estadisticos de ajuste del modelo
Terminos independientes
Solo terminos y
Criterio independientes Variables adicionales
AIC 1595.792 1417.941
SC 1604.991 1445.541
-2 LOG L 1591.792 1405.941
Prueba de la hipotesis nula global: BETA=0
Test Chi -cuadrado DF Pr > ChiSq
Ratio de verosim 185.8502 4 <.0001
Puntuacion 163.9538 4 <.0001
Wald 129.7966 4 <.0001
Tipo 3 Analisis de efectos
Chi -cuadrado
Efecto DF de Wald Pr > ChiSq
female 2 7.6704 0.0216
age 2 123.3880 <.0001
Analisis del estimador de maxima verosimilitud
Error Chi -cuadrado
Parametro brand DF Estimador estandar de Wald Pr > ChiSq
Intercept 2 1 -11.7746 1.7746 44.0239 <.0001
Intercept 3 1 -22.7214 2.0580 121.8897 <.0001
female 2 1 0.5238 0.1942 7.2719 0.0070
female 3 1 0.4659 0.2261 4.2472 0.0393
age 2 1 0.3682 0.0550 44.8133 <.0001
age 3 1 0.6859 0.0626 119.9541 <.0001
Estimadores de cocientes de disparidad;
Estimador 95 % Wald
Efecto brand del punto Limites de confianza
female 2 1.688 1.154 2.471
female 3 1.594 1.023 2.482
age 2 1.445 1.297 1.610
age 3 1.986 1.756 2.245

18
As, se obtiene que las variables female y age son signicativas en los dos modelos.
Las mujeres parecen preferir brand igual a 2 o igual a 3 en comparaci on con brand igual
a 1. Por otro lado, cuanto mayor es una persona es m as probable que preera brand
igual a 2 o a 3 que brand igual a 1.
Se observa que con el cambio en una unidad en la variable age, se espera que la razon
de odds entre elegir brand = 2 respecto de 1 se incrementa en exp(0,3682) = 1,45.
En el caso del sexo de las personas, female, la razon de odds de elegir brand = 2
respecto de 1 se incrementa en exp(0,5238) = 1,69.
19
Tema 6: Modelos Log-Lineales para
tablas de Contingencia
Introducci on
Habitualmente, las tablas de contingencia se suelen analizar calculando estadsticos
del tipo
2
para contrastar independencia. Cuando hay mas variables involucradas, una
posibilidad es repetir el an alisis para las distintas subtablas y determinar las interacciones
o asociaciones entre las variables.
Pero otra alternativa es aplicar modelos loglineales que son un caso particular de
los GLM para datos distribudos como como una distribuci on multinomial o como una
Poisson.
Los modelos loglineales se usan para analizar la relaci on entre dos, tres o mas
variables categ oricas en una tabla de contingencia. Todas las variables que se analizan
se consideran como variables respuesta, es decir, no se hace distinci on entre variables
independientes y dependientes. Es por ello que en estos modelos solo se estudia asociaci on
entre las variables.
Los modelos se representan mediante las frecuencias esperadas y se tienen en cuenta
las asociaciones o interacciones entre las variables. Los patrones de asociaci on entre las
variables pueden describirse en terminos de los odds y las razones de odds.
Se parte de una tabla de contingencia I J en la que se estudian n individuos.
Cuando las respuestas son independientes, las probabilidades conjuntas de cada casilla

ij
se obtienen como el producto de las marginales de las y columnas

ij
=
i+

+j
para i = 1, . . . , I, j = 1, . . . , J.
Las probabilidades
ij
son los parametros de una distribuci on multinomial. Los mo-
delos loglineales usan frecuencias esperadas
ij
= n
ij
en lugar de las probabilidades

ij
. Tambien se pueden considerar distribuciones de Poisson con valores esperados
ij
.
Asumiendo independencia se tiene que
ij
= n
i+

+j
para todo i y j.
1
Modelos loglineales de independencia para tablas de contingen-
cia
Dado que
ij
= n
i+

+j
para todo i y j, si se toman logaritmos:
log (
ij
) = log(n) + log (
i+
) + log (
+j
) =
+
X
i
+
Y
j
donde se denomina a
X
i
el efecto la,
Y
j
el efecto columna. Este modelo se denomina
loglineal de independencia.
La interpretacion de los parametros es m as sencilla para respuestas binarias. Por
ejemplo, en el modelo de independencia para una tabla I 2, donde las columnas co-
rresponden a la respuesta Y , en cada la i el logit de
i
para Y = 1 es
log


i
1
i

= log

i1

i2

= log(
i1
) log(
i2
) =
=

+
X
i
+
Y
1

+
X
i
+
Y
2

=
Y
1

Y
2
lo cual no depende de i, es decir, el logit de Y no depende del nivel de X (de la la), lo
que corresponde al caso simple en que logit(
i
) = cte.
As, la probabilidad de clasicar en una columna particular es constante a lo largo
de las las.
Identicabilidad y Restricciones sobre los parametros
En una tabla de 2 2, por ejemplo, el modelo de independencia especica 5 par ame-
tros, por lo tanto es redundante.
Como en el caso de los modelos ANOVA, se pueden imponer restricciones para los
par ametros para evitar resundancias entre ellos. Por ejemplo, se puede imponer que para
el primer nivel de cada variable el par ametro sea 0 o bien se puede imponer que la suma
de los par ametros correspondientes a una variable sea 0.
Por ejemplo, en una tabla 2 2:

X
1
+
X
2
= 0

Y
1
+
Y
2
= 0
y se cumple que la diferencia entre dos efectos principales es la misma.
Ejemplo
Se tiene una muestra de personas en donde se les ha preguntado si crean en la vida
despues de la muerte. El n umero de personas que responda s fue 1339 de entre 1639
de raza blanca, 260 de entre 315 de raza de color y 88 de 110 clasicadas como otros.
2
Se usa un modelo loglineal de independencia sobre la correspondiente tabla 3 2 y
se ja un nidel de los efectos en 0.
Raza <- c("White","White", "Black", "Black",
"Others", "Others")
Cree <- c("SI", "NO","SI", "NO","SI", "NO")
datos <- c(1339 , 300, 260, 55, 88, 22)
Raza = as.factor(Raza)
Cree = as.factor(Cree)
fit = glm(datos Raza + Cree , family=poisson(link="log"))
summary(fit)
Salida R
Call:
glm(formula = datos Raza + Cree , family = poisson(link = "log"))
Deviance Residuals:
1 2 3 4 5 6
-0.01717 0.03631 0.15781 -0.33688 -0.20194 0.41917
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 4.05242 0.07309 55.44 <2e-16 ***
RazaOthers -1.05209 0.11075 -9.50 <2e-16 ***
RazaWhite 1.64927 0.06152 26.81 <2e-16 ***
CreeSI 1.49846 0.05697 26.30 <2e-16 ***
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 2849 .21758 on 5 degrees of freedom
Residual deviance: 0.35649 on 2 degrees of freedom
AIC: 49.437
Number of Fisher Scoring iterations: 3
Se obtiene que
Y
1
= 1,4985 y
Y
2
= 0. Por tanto, el odds de la creencia en la vida
despues de la muerte fue de exp(1,4985) = 4,475 para cada raza.
3
Modelo Saturado
Cuando las variables son dependientes satisfacen un modelo m as complejo:
log (
ij
) = +
X
i
+
Y
j
+
XY
ij
donde los par ametros
XY
ij
reejan la asociacion entre X e Y . Este modelo describe
cualquier conjunto de frecuencias observadas y es el modelo m as general para una tabla
de contingencia bivariante. El caso de independencia corresponde a
XY
ij
= 0.
En tablas 2 2 existe una relaci on directa entre el logaritmo del raz on de odds y los
par ametros de asociaci on
XY
ij
.
log = log

11

22

12

21

=
XY
11
+
XY
22

XY
12

XY
21
Si
XY
ij
= 0 las razones de odds valen 1 y X e Y son independientes.
En los datos de las creencias en la vida eterna la raz on de odds es
=
434 134
147 375
= 1,057
de modo que log = 0,056 y, por tanto,

XY
11
+
XY
22

XY
12

XY
21
= 0,056
El modelo saturado tiene 1+(I1)+(J1)+(I1)(J1) = IJ par ametros, es decir,
tiene tantos parametros como observaciones, dando un ajuste perfecto. En la pr actica,
normalmente se trata de usar modelos no saturados ya que dan lugar a interpretaciones
m as simples.
Los modelos loglineales son modelos jer arquicos, es decir, incluyen todos los terminos
de orden menor que est an presentes en un termino de orden mayor. As, si el modelo
contiene
XY
ij
, entonces tambien est an presentes en el modelo los terminos
X
i
y
Y
j
.
Cuando un modelo tiene interacciones hay que tener cuidado con la interpretacion
de los efectos individuales, como sucede tambien en los modelos ANOVA bifactoriales,
ya que los efectos principales podran estar enmascarados por la interaccion.
4
Ejemplo
Se ajusta un modelo saturado en la tabla de las creencias en la vida eterna:
fitT = glm(datos Raza*Cree , family=poisson(link="log"))
summary(fitT)
Salida R
Call:
glm(formula = datos Raza * Cree , family = poisson(link = "log"))
Deviance Residuals:
[1] 0 0 0 0 0 0
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 4.00733 0.13484 29.719 < 2e-16 ***
RazaOthers -0.91629 0.25226 -3.632 0.000281 ***
RazaWhite 1.69645 0.14668 11.566 < 2e-16 ***
CreeSI 1.55335 0.14842 10.466 < 2e-16 ***
RazaOthers:CreeSI -0.16705 0.28080 -0.595 0.551889
RazaWhite:CreeSI -0.05745 0.16158 -0.356 0.722165
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 2.8492e +03 on 5 degrees of freedom
Residual deviance: 9.1038e -14 on 0 degrees of freedom
AIC: 53.081
Number of Fisher Scoring iterations: 3
A partir de los p-valores se observa que ninguna de las interacciones son signicativas
y que el mejor modelo es el de independencia.
5
Modelos loglineales para tablas tridimensionales
Supongamos que tenemos tres variables categ oricas X, Y y Z que tienen como valores
posibles:
X : 1, 2, . . . , I
Y : 1, 2, . . . , J
Z : 1, 2, . . . , K
En este caso, se pueden considerar distintos modelos loglineales para las frecuencias
esperadas por casilla.
Por ejemplo, el modelo
log (
ijk
) = +
X
i
+
Y
j
+
Z
k
+
XZ
ik
+
Y Z
jk
contiene un termino XZ

XZ
ik

, que modeliza la asociaci on entre X y Z, condicionada


por Y . Este modelo tambien permite la asociacion entre Y Z, condicionada por X.
No hay un termino de asociacion entre XY : se especica la independencia condicional
entre X e Y , condicionada por Z. Es decir, X e Y son independientes en la tabla parcial
correspondiente a cada nivel k (para todo k) de Z.
Este modelo se puede resumir como (XZ, Y Z), notaci on que indica los terminos de
interacci on mas alta de las variables. Se interpreta como la asociacion entre dos variables
(X e Y ) que desaparece cuando condicionamos por una tercera variable (Z).
Un modelo que permite todas las asociaciones condicionales de las tres variables por
parejas es
log (
ijk
) = +
X
i
+
Y
j
+
Z
k
+
XY
ij
+
XZ
ik
+
Y Z
jk
que corresponde a asociacion homogenea (XY, XZ, Y Z). En este modelo los par ametros
est an directamente relacionados mediante las razones de odds condicionales.
En el caso de tablas 2 2 K la razon de odds condicional de XY , que se denota
como
XY (k)
, describe la asociaci on entre X e Y en las subtablas que se obtienen para
un k jo. As,
log
XY (k)
= log

11k

22k

12k

21k

=
=
XY
11
+
XY
22

XY
12

XY
21
El lado derecho de la expresion no depende de k de modo que la raz on de odds es la
misma para cualquier nivel de Z.
6
Otro modelo posible es el de independencia mutua que contiene solo los terminos
individuales (X, Y, Z). Este trata a cada par de variables como independientes, tanto
marginal como condicionalmente, aunque se presenta raramente en la realidad.
El modelo loglineal m as general para tablas tridimensionales es
log (
ijk
) = +
X
i
+
Y
j
+
Z
k
+
XY
ij
+
XZ
ik
+
Y Z
jk
+
XY Z
ijk
que se denota por (XY Z) y es un modelo saturado que proporciona el ajuste perfecto.
Ejemplo
Se considera una muestra entre estudiantes de Ohio, donde se les pregunto si haban
tomado algun vez alcohol, tabaco o marihuana. Se denotan las variables como A para
alcohol, C para tabaco (cigarrillos) y M para marihuana.
Marihuana
Alcohol Tabaco Si No
Si Si 911 538
No 44 456
No Si 3 43
No 2 279
Se introducen los datos en R.
tabla <- data.frame(expand.grid(
marihuana=factor(c("Yes","No"),levels=c("No","Yes")),
tabaco=factor(c("Yes","No"),levels=c("No","Yes")),
alcohol=factor(c("Yes","No"),levels=c("No","Yes"))),
count=c(911 ,538 ,44 ,456 ,3 ,43 ,2 ,279))
Se ajusta un modelo loglineal usando el comando loglm. Se ajusta el modelo satura-
do, luego el modelo de asociacion homogenea y as sucesivamente hasta llegar al modelo
de independencia marginal. Se obtienen tanto los estimadores de los par ametros como
los valores predichos.
7
library(MASS)
# ACM
fitACM <-
loglm(countalcohol*tabaco*marihuana ,data=tabla ,param=T,fit=T)
# AC , AM , CM
fitAC.AM.CM <- update(fitACM , .. - alcohol:tabaco:marihuana)
# AM , CM
fitAM.CM <- update(fitAC.AM.CM , .. - alcohol:tabaco)
# AC , M
fitAC.M <- update(fitAC.AM.CM , .. - alcohol:marihuana -
tabaco:marihuana)
# A , C , M
fitA.C.M <- update(fitAC.M , .. - alcohol:tabaco)
Se obtienen los recuentos estimados con la orden fitted. Para convertirlos en vec-
tores se transponen mediante la orden aperm y luego se escriben en un dataframe.
data.frame(tabla [8:1,-4], ACM=c(aperm(fitted(fitACM))),
AC.AM.CM = c(aperm(fitted(fitAC.AM.CM))),
AM.CM = c(aperm(fitted(fitAM.CM))),
AC.M = c(aperm(fitted(fitAC.M))),
A.C.M = c(aperm(fitted(fitA.C.M))))
marihuana tabaco alcohol ACM AC.AM.CM AM.CM AC.M A.C.M
8 No No No 279 279.614402 179.8404255 162.47627 64.87990
7 Yes No No 2 1.383160 0.2395833 118.52373 47.32880
6 No Yes No 43 42.383882 142.1595745 26.59754 124.19392
5 Yes Yes No 3 3.616919 4.7604167 19.40246 90.59739
4 No No Yes 456 455.385598 555.1595745 289.10369 386.70007
3 Yes No Yes 44 44.616840 45.7604167 210.89631 282.09123
2 No Yes Yes 538 538.616118 438.8404255 837.82250 740.22612
1 Yes Yes Yes 911 910.383081 909.2395833 611.17750 539.98258
El modelo que predice mejor las observaciones es el de asociacion homogenea (AC,
AM , CM), es decir, el modelo denotado como AC.AM.CM.
As, los par ametros estimados son:
8
fitAC.AM.CM$param
Salida R
$(Intercept)
[1] 4.251537
$alcohol
No Yes
-1.503994 1.503994
$tabaco
No Yes
-0.2822777 0.2822777
$marihuana
No Yes
1.196045 -1.196045
$alcohol.tabaco
tabaco
alcohol No Yes
No 0.5136255 -0.5136255
Yes -0.5136255 0.5136255
$alcohol.marihuana
marihuana
alcohol No Yes
No 0.746502 -0.746502
Yes -0.746502 0.746502
$tabaco.marihuana
marihuana
tabaco No Yes
No 0.7119739 -0.7119739
Yes -0.7119739 0.7119739
De modo alternativo, se puede considerar el modelo obtenido mediante el comando
glm con la familia de distribuciones de Poisson.
options(contrasts=c("contr.treatment","contr.poly"))
(fit.glm <- glm(count.^2, data=tabla , family=poisson))
Se obtiene:
9
Salida R
Call: glm(formula = count .^2, family = poisson , data = tabla)
Coefficients:
(Intercept) marihuanaYes
tabacoYes
5.6334 -5.3090
-1.8867
alcoholYes marihuanaYes:tabacoYes
marihuanaYes:alcoholYes
0.4877 2.8479
2.9860
tabacoYes:alcoholYes
2.0545
Degrees of Freedom: 7 Total (i.e. Null); 1 Residual
Null Deviance: 2851
Residual Deviance: 0.374 AIC: 63.42
10
Relaciones entre modelos loglineales y regresi on logstica
Los modelos loglineales para tablas de contingencia modelizan la asociaci on entre
variables categ oricas, mientras que los modelos de regresion logstica describen c omo
una variable categ orica de tipo respuesta depende de un grupo de variables explicativas.
Aunque los modelos parecen diferentes, en realidad existen conexiones entre ellos.
En un modelo loglineal, se pueden calcular los logits de una respuesta para ayudar
a la interpretacion del modelo. Adem as, un modelo logstico con variables explicativas
categ oricas tiene un equivalente en un modelo loglineal.
Como ilustraci on, se puede considerar un modelo saturado para una tabla de dos
variables,
log(
ij
) = +
X
i
+
Y
j
+
XY
ij
Supongamos que Y es binaria. La consideramos como una variable respuesta y X
como explicativa. Cuando X est a en el nivel i,
logit (P(Y = 1)) = log

P (Y = 1|X = i)
P (Y = 2|X = i)

=
= log(
i1
) log(
i2
)
=

Y
1

Y
2

XY
i1

XY
i2

El primer termino no depende de i, y el segundo termino depende del nivel i de X.


De este modo, el logit tiene la forma
logit (P(Y = 1)) = +
X
i
Cuando hay una variable respuesta unica de tipo binaria, los modelos loglineales
que se pueden aplicar corresponden a modelos logsticos para esa respuesta. Cuando la
respuesta tiene mas de dos categoras, los correspondientes modelos loglineales corres-
ponden a modelos logit multinomiales con una categora de referencia.
En resumen, los modelos loglineales son mas naturales cuando al menos dos variables
son variables respuesta y queremos estudiar su estructura de asociaci on. De lo contrario,
es mejor usar modelos logsticos.
11
Ejemplo
Se toman los datos relacionados con el hundimiento del Titanic en abril de 1912. El
resultado se puede expresar en una tabla de dimension 4.
Las variables son Class de los pasajeros (1, 2, 3, Tripulaci on), Sex de los pasajeros
(Male, Female), Age de los pasajeros (Child, Adult), y si los pasajeros sobrevivieron o
no (No, Yes).
help(Titanic)
mosaicplot(Titanic , main="Sobrevivieron en el Titanic",
col=c("black","yellow"), off=c(5, 5, 5, 5))
summary(Titanic)
Se obtiene:
Salida R
Number of cases in table: 2201
Number of factors: 4
Test for independence of all factors:
Chisq = 1637.4, df = 25, p-value = 0
Chi -squared approximation may be incorrect
12
Se considera un modelo loglineal.
Tipos posibles de efectos
Class: Hay mas pasajeros en algunas clases que en otras.
Sex: Hay m as pasajeros en un sexo que en otro.
Age: Hay mas pasajeros en un grupo de edad que en otro.
Survived: Hay mas pasajeros o vivos o muertos que la alternativa.
Class Sex: Class y Sex no son independientes.
13
Class Age: Class y Age no son independientes.
Class Survived: Class y Survived no son independientes.
Sex Age: Sex y Age no son independientes.
Sex Survived: Sex y Survived no son independientes.
Age Survived: Age y Survived no son independientes.
Class Sex Age, Class Sex Survived, Class Age Survived, Sex Age
Survived: hay interaccion triple entre las variables.
Class Sex Age Survived: hay interacci on cu adruple entre las variables.
library(MASS)
simple = loglm( Class + Sex + Age + Survived , data=Titanic)
simple
sat.model = loglm( Class * Sex * Age * Survived ,
data=Titanic)
sat.model
Call:
loglm(formula = ~Class + Sex + Age + Survived, data = Titanic)
Statistics:
X^2 df P(> X^2)
Likelihood Ratio 1243.663 25 0
Pearson 1637.445 25 0
Call:
loglm(formula = ~Class * Sex * Age * Survived, data = Titanic)
Statistics:
X^2 df P(> X^2)
Likelihood Ratio 0 0 1
Pearson NaN 0 1
El modelo con solo los efectos simples no es adecuado (se rechaza la hip otesis nula,
p-valor es casi 0). Debe haber interacciones entre las variables. Por otro lado, en el
otro extremo, el modelo saturado no es util ya que predice completamente todas las
frecuencias observadas.
Se pueden ir probando distintos modelos y comprobando su signicaci on. Alternati-
vamente se puede usar un procedimiento stepwise.
14
stepAIC(sat.model , direction="backward", trace =0)
Salida R
Call:
loglm(formula = Class + Sex + Age + Survived + Class:Sex +
Class:Age + Sex:Age + Class:Survived + Sex:Survived + Age:Survived +
Class:Sex:Age + Class:Sex:Survived + Class:Age:Survived ,
data = Titanic , evaluate = FALSE)
Statistics:
X^2 df P(> X^2)
Likelihood Ratio 1.685479 4 0.7933536
Pearson NaN 4 NaN
Se parte del modelo saturado y se usa el procedimiento backward con la orden
stepAIC. Se toma nalmente el modelo con menor valor de AIC.
El modelo mejor, parece el que elimina la interaccion de orden 4 y la interaccion
Sex:Age:Survived.
step.model = loglm(formula = Class + Sex + Age + Survived +
Class:Sex + Class:Age + Sex:Age + Class:Survived +
Sex:Survived + Age:Survived + Class:Sex:Age +
Class:Sex:Survived + Class:Age:Survived , data=Titanic)
print(step.model)
fitted(step.model)
15
Salida R
Call:
loglm(formula = Class + Sex + Age + Survived + Class:Sex +
Class:Age +
Sex:Age + Class:Survived + Sex:Survived + Age:Survived +
Class:Sex:Age + Class:Sex:Survived + Class:Age:Survived ,
data = Titanic)
Statistics:
X^2 df P(> X^2)
Likelihood Ratio 1.685479 4 0.7933536
Pearson NaN 4 NaN
Re -fitting to get fitted values
, , Age = Child , Survived = No
Sex
Class Male Female
1st 0.00000 0.00000
2nd 0.00000 0.00000
3rd 37 .43281 14 .56719
Crew 0.00000 0.00000
, , Age = Adult , Survived = No
Sex
Class Male Female
1st 118 .0000 4.0000
2nd 154 .0000 13 .0000
3rd 384 .5672 91 .4328
Crew 670 .0000 3.0000
, , Age = Child , Survived = Yes
Sex
Class Male Female
1st 5.00000 1.00000
2nd 10 .98493 13 .01507
3rd 10 .56718 16 .43282
Crew 0.00000 0.00000
, , Age = Adult , Survived = Yes
Sex
Class Male Female
1st 57 .00000 140 .00000
2nd 14 .02291 79 .97709
3rd 77 .43281 73 .56719
Crew 192 .00000 20 .00000
Se puede hacer el an alisis tambien con la funci on glm. Para ello hay que pasar los
datos a un dataframe.
16
ti = as.data.frame(Titanic)
glm.model = glm(Freq Class*Age*Sex*Survived , data=ti,
family=poisson)
stepAIC(glm.model , direction="backward", trace =0)
Salida R
Call: glm(formula = Freq Class + Age + Sex + Survived +
Class:Age +
Class:Sex + Age:Sex + Class:Survived + Age:Survived +
Sex:Survived +
Class:Age:Sex + Class:Age:Survived + Class:Sex:Survived ,
family = poisson , data = ti)
Coefficients:
(Intercept) Class2nd
-20.54742 -0.76313
Class3rd ClassCrew
24 .16996 -1.97334
AgeAdult SexFemale
25 .31810 -5.89242
SurvivedYes Class2nd:AgeAdult
22 .15686 1.02940
Class3rd:AgeAdult ClassCrew:AgeAdult
-22.98853 3.70993
Class2nd:SexFemale Class3rd:SexFemale
1.84450 4.94864
ClassCrew:SexFemale AgeAdult:SexFemale
4.31897 2.50803
Class2nd:SurvivedYes Class3rd:SurvivedYes
1.55159 -23.42165
ClassCrew:SurvivedYes AgeAdult:SurvivedYes
-23.73031 -22.88449
SexFemale:SurvivedYes Class2nd:AgeAdult:SexFemale
4.28298 -0.93211
Class3rd:AgeAdult:SexFemale ClassCrew:AgeAdult:SexFemale
-3.00077 -6.34324
Class2nd:AgeAdult:SurvivedYes Class3rd:AgeAdult:SurvivedYes
-3.22185 22 .54657
ClassCrew:AgeAdult:SurvivedYes Class2nd:SexFemale:SurvivedYes
23 .20816 -0.06801
Class3rd:SexFemale:SurvivedYes ClassCrew:SexFemale:SurvivedYes
-2.89768 -1.13608
Degrees of Freedom: 31 Total (i.e. Null); 4 Residual
Null Deviance: 4953
Residual Deviance: 1.685 AIC: 185.1
17
step.glm = glm(formula = Freq Class + Age + Sex + Survived +
Class:Age + Class:Sex + Age:Sex + Class:Survived +
Age:Survived +
Sex:Survived + Class:Age:Sex + Class:Age:Survived +
Class:Sex:Survived , family=poisson , data=ti)
anova(step.glm , test="Chisq")
Salida R
Analysis of Deviance Table
Model: poisson , link: log
Response: Freq
Terms added sequentially (first to last)
Df Deviance Resid. Df Resid. Dev Pr(>Chi)
NULL 31 4953.1
Class 3 475.81 28 4477.3 < 2.2e -16 ***
Age 1 2183 .56 27 2293.8 < 2.2e -16 ***
Sex 1 768.32 26 1525.4 < 2.2e -16 ***
Survived 1 281.78 25 1243.7 < 2.2e -16 ***
Class:Age 3 148.33 22 1095.3 < 2.2e -16 ***
Class:Sex 3 412.60 19 682.7 < 2.2e -16 ***
Age:Sex 1 6.09 18 676.6 0.01363 *
Class:Survived 3 180.90 15 495.7 < 2.2e -16 ***
Age:Survived 1 25.58 14 470.2 4.237e -07 ***
Sex:Survived 1 353.58 13 116.6 < 2.2e -16 ***
Class:Age:Sex 3 4.02 10 112.6 0.25916
Class:Age:Survived 3 35.66 7 76.9 8.825e -08 ***
Class:Sex:Survived 3 75.22 4 1.7 3.253e -16 ***
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
anova(update(step.glm , . . - Class:Age:Sex), test="Chisq")
18
Salida R
Analysis of Deviance Table
Model: poisson , link: log
Response: Freq
Terms added sequentially (first to last)
Df Deviance Resid. Df Resid. Dev Pr(>Chi)
NULL 31 4953.1
Class 3 475.81 28 4477.3 < 2.2e -16 ***
Age 1 2183 .56 27 2293.8 < 2.2e -16 ***
Sex 1 768.32 26 1525.4 < 2.2e -16 ***
Survived 1 281.78 25 1243.7 < 2.2e -16 ***
Class:Age 3 148.33 22 1095.3 < 2.2e -16 ***
Class:Sex 3 412.60 19 682.7 < 2.2e -16 ***
Age:Sex 1 6.09 18 676.6 0.01363 *
Class:Survived 3 180.90 15 495.7 < 2.2e -16 ***
Age:Survived 1 25.58 14 470.2 4.237e -07 ***
Sex:Survived 1 353.58 13 116.6 < 2.2e -16 ***
Class:Age:Survived 3 29.21 10 87.4 2.024e -06 ***
Class:Sex:Survived 3 65.43 7 22.0 4.066e -14 ***
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
print(update(step.glm , . . - Class:Age:Sex))
19
Salida R
Call: glm(formula = Freq Class + Age + Sex + Survived +
Class:Age +
Class:Sex + Age:Sex + Class:Survived + Age:Survived +
Sex:Survived +
Class:Age:Survived + Class:Sex:Survived , family = poisson ,
data = ti)
Coefficients:
(Intercept) Class2nd
-18.6241 -0.4354
Class3rd ClassCrew
22.3728 0.9855
AgeAdult SexFemale
23.3948 -3.5083
SurvivedYes Class2nd:AgeAdult
19.3117 0.7017
Class3rd:AgeAdult ClassCrew:AgeAdult
-21.2045 0.7511
Class2nd:SexFemale Class3rd:SexFemale
0.9124 2.0146
ClassCrew:SexFemale AgeAdult:SexFemale
-2.0243 0.1239
Class2nd:SurvivedYes Class3rd:SurvivedYes
1.4505 -20.4172
ClassCrew:SurvivedYes AgeAdult:SurvivedYes
-20.8341 -19.9879
SexFemale:SurvivedYes Class2nd:AgeAdult:SurvivedYes
4.2098 -2.8403
Class3rd:AgeAdult:SurvivedYes ClassCrew:AgeAdult:SurvivedYes
19.4577 20 .2604
Class2nd:SexFemale:SurvivedYes Class3rd:SexFemale:SurvivedYes
-0.3981 -2.7987
ClassCrew:SexFemale:SurvivedYes
-1.0629
Degrees of Freedom: 31 Total (i.e. Null); 7 Residual
Null Deviance: 4953
Residual Deviance: 21.95 AIC: 199.4
20
Ejemplo con SAS
Se ha realizado un analisis sobre el valor terapeutico del acido asc orbico (vitamina
C) en relacion a su efecto sobre la gripe com un. Se tiene una tabla 22 con los recuentos
correspondientes para una muestra de 279 personas:
Gripe No Gripe Totales
Placebo 31 109 140
Acido Ascorbico 17 122 139
Totales 48 231 279
Se aplica un modelo loglineal y se analizan sus componentes.
Modelo Loglineal
OPTIONS nodate ls=75;
TITLE "Ejemplo Modelo Loglineal ";
/* Se graban los resultados en un fichero rtf o en uno pdf */
/* ODS rtf file = c :\ dondesea \ cosa . rtf style = minimal
startpage = no ; */
data aspirina;
INPUT tratamiento $ respuesta $ recuento;
DATALINES;
placebo gripe 31
placebo nogripe 109
ascorbico gripe 17
ascorbico nogripe 122
;
RUN;
PROC freq;
weight recuento;
tables tratamiento*respuesta/ chisq expected;
exact or;
RUN;
PROC genmod data=aspirina order=data;
class tratamiento respuesta;
model recuento = tratamiento respuesta
/link=log dist=poisson lrci type3 obstats;
RUN;
21
Procedimiento FREQ
Tabla de tratamiento por respuesta
tratamiento respuesta
Frequencia|
Esperada |
Porcentaje|
Pct fila |
Pct col |gripe |nogripe | Total
----------.--------.--------.
ascorbic | 17 | 122 | 139
| 23.914 | 115.09 |
| 6.09 | 43.73 | 49.82
| 12.23 | 87.77 |
| 35.42 | 52.81 |
----------.--------.--------.
placebo | 31 | 109 | 140
| 24.086 | 115.91 |
| 11.11 | 39.07 | 50.18
| 22.14 | 77.86 |
| 64.58 | 47.19 |
----------.--------.--------.
Total 48 231 279
17.20 82.80 100.00
Estadisticos para Tabla de tratamiento por respuesta
Estadistico DF Valor Probabilidad
----------------------------------------------------------------------
Chi-cuadrado 1 4.8114 0.0283
Ratio chi-cuadrado de la verosimilitud 1 4.8717 0.0273
Adj. chi-cuadrado de continuidad 1 4.1407 0.0419
Chi-cuadrado Mantel-Haenszel 1 4.7942 0.0286
Coeficiente Phi -0.1313
Coeficiente de contingencia 0.1302
V de Cramer -0.1313
Test exacto de Fisher
------------------------------------
Celda (1,1) Frecuencia (F) 17
Left-sided Pr <= F 0.0205
Right-sided Pr >= F 0.9910
Table Probability (P) 0.0115
Two-sided Pr <= P 0.0385
Estadisticos para Tabla de tratamiento por respuesta
Estimadores de riesgo relativo (fila1/fila2)
Tipo de estudio Valor 95% Limites de confianza
--------------------------------------------------------------------
Case-Control (Odds Ratio) 0.4900 0.2569 0.9343
Cohort (Col1 Risk) 0.5523 0.3209 0.9506
Cohort (Col2 Risk) 1.1273 1.0120 1.2558
Ratio de probabilidad (Estudio de control de caso)
-----------------------------------------
Ratio de probabiidad 0.4900
Lim. de confianza asintoticos
95% Lower Conf Limit 0.2569
95% Upper Conf Limit 0.9343
Limtes conf. exactos
95% Lower Conf Limit 0.2407
95% Upper Conf Limit 0.9740
22
Tamano de la muestra = 279
Procedimiento GENMOD
Informacion del modelo
Conj. datos WORK.ASPIRINA
Distribucion Poisson
Funcion de vinculo Log
Variable dependiente recuento
Obs usadas 4
Informacion del nivel de clase
Clase Niveles Valores
tratamiento 2 placebo ascorbic
respuesta 2 gripe nogripe
Criterios para valorar la bondad de ajuste
Criterio DF Valor Valor/DF
Desviaci 1 4.8717 4.8717
Desviacion esca 1 4.8717 4.8717
Chi-cuadrado de Pe 1 4.8114 4.8114
Pearson X2 escala 1 4.8114 4.8114
Verosimilitud 970.6299
Algoritmo convergido.
Analisis de estimadores de parametros
Cociente de
verosimilitud
Error 95% Limites Chi-
Parametro DF Estimacion estandar de confianza cuadrado
Intercept 1 4.7457 0.0891 4.5663 4.9158 2836.81
tratamiento placebo 1 0.0072 0.1197 -0.2277 0.2422 0.00
Analisis de estimadores
de parametros
Parametro Pr > ChiSq
Intercept <.0001
tratamiento placebo 0.9523
Ejemplo Modelo Loglineal 4
Procedimiento GENMOD
Analisis de estimadores de parametros
Cociente de
verosimilitud
Error 95% Limites Chi-
Parametro DF Estimacion estandar de confianza cuadrado
tratamiento ascorbic 0 0.0000 0.0000 0.0000 0.0000 .
respuesta gripe 1 -1.5712 0.1586 -1.8934 -1.2702 98.11
respuesta nogripe 0 0.0000 0.0000 0.0000 0.0000 .
Escal 0 1.0000 0.0000 1.0000 1.0000
23
Analisis de estimadores
de parametros
Parametro Pr > ChiSq
tratamiento ascorbic .
respuesta gripe <.0001
respuesta nogripe .
Escal
NOTA: The scale parameter was held fixed.
Estadisticos LR para analisis de tipo 3
Chi-
Fuente DF cuadrado Pr > ChiSq
tratamiento 1 0.00 0.9523
respuesta 1 130.59 <.0001
Estadisticos de observacion
Observacion recuento tratamiento respuesta Pred Xbeta Estand.
PesoHess Inferior Superior Resraw Reschi
Resdev StResdev StReschi Reslik
1 31 placebo gripe 24.086031 3.1816321 0.1561792
24.086031 17.734757 32.711861 6.9139686 1.4087852
1.3483626 2.0994112 2.1934897 2.1551805
2 109 placebo nogripe 115.91398 4.7528483 0.0888123
115.91398 97.395437 137.95359 -6.913978 -0.642185
-0.648733 -2.215859 -2.193493 -2.195419
3 17 ascorbic gripe 23.913989 3.1744636 0.1563437
23.913989 17.602407 32.488674 -6.913989 -1.413848
-1.491801 -2.314435 -2.193496 -2.244533
4 122 ascorbic nogripe 115.08602 4.7456799 0.0891012
115.08602 96.645029 137.04577 6.913978 0.6444908
0.638194 2.172062 2.1934927 2.1916509
Criterios para valorar la bondad de ajuste: da la informacion acerca la convergencia
del algoritmo de maxima verosimilitud de los parametros y el ajuste del modelo. Los
valores obtenidos son iguales a los obtenidos con el contraste de la chi-cuadrado para
independencia.
Analisis de estimadores: Se obtienen los estimadores de los par ametros. El procedi-
miento PROC GENMOD ja el ultimo nivel de cada variable en cero.

= 4,75,

A
1
= 0,0072,

A
2
= 0,

B
1
= 1,5712,

B
2
= 0
Los recuentos estimados para cada casilla de tener gripe dado que se tom o viatamina
C es, en este modelo:

11
= exp( +
A
1
+
B
1
) = exp(4,745 + 0 1,5712) = 23,91
La razon de odds estimada de tener gripe es:
exp(
B
1

B
2
) = exp(1,571 0) = 0,208
24
En Estadisticos LR para analisis de tipo 3 se contrastan los efectos principales me-
diante el likelihood ratio (LR). La hip otesis nula H
0
es que no hay efectos principales, es
decir que la distribucion de las personas es igual a lo largo de los niveles de la respuesta.
En este caso se rechaza la H
0
donde el estadstico LR es 130.59, df=1, <.0001
Finalmente, se obtiene el n umero de observaciones esperadas en las casillas (Pred), el
logaritmo de los recuentos esperados (Xbeta), los errores estandar (Estand.), intervalos
de conanza and cinco distintos tipos de residuos para comprobar el modelo.
25
Tema 7: Modelos Bayesianos
Introducci on
La aplicacion de modelos bayesianos en modelos de regresi on est andar o en modelos
de regresion logstica sigue el esquema general de la estadstica bayesiana:
Denir la distribucion a priori correspondiente para los par ametros.
Determinar la verosimilitud de los datos
Aplicar el teorema de Bayes para actualizar la distribuci on a priori en forma de
distribuci on a posteriori
En los casos que se ven habitualmente en el curso de Estadstica Bayesiana se consi-
deran modelos con un parametro en cada vez, es decir no se consideraban habitualmente
la situaci on de varios par ametros al tiempo (caso multiparametrico). En el caso de los
modelos de regresion, se tienen que considerar varios par ametros al mismo tiempo. Por
ejemplo en el caso de la regresion simple hay tres par ametros: el intercept, la pendiente
y la varianza de los errores.
Desde el punto de vista computacional, se tienen bastantes opciones de aplicaci on.
El programa m as generalista que se puede aplicar es WinBugs, como programa original,
o sus sucesores: OpenBugs, Jags o Stan.
Introducci on a WinBUGS
WinBUGS es un programa libre que procede del Biostatistics Unit del Medical Re-
search Council (UK):
http://www.mrc-bsu.cam.ac.uk/bugs/welcome.shtml
1
Una vez instalado, un programa de WinBUGS consiste en tres partes:
1. Programa Principal: Un conjunto de instrucciones con estilo R que incluyen las
distribuciones a priori de los parametros y la verosimilitud de los datos.
2. Conjunto de datos: Los datos originales en formato R o en formato de array.
3. Valores Iniciales de las cadenas: Son opcionales pero es conveniente indicar el
valor de las semillas de las cadenas de Markov del MCMC.
WinBUGS resuelve los problemas de estimacion bayesiana multiplicando la distri-
buci on a priori por la verosimilitud y luego simulando muestras de la distribuci on a
posteriori mediante del algoritmo de Gibbs.
2
3
Instrucciones de uso del programa WinBugs
Consideramos este modelo b asico beta-binomial, que se copia en la ventana de co-
mandos de WinBugs:
# Modelo Beta - Binomial
model
{
y dbin(p, n)
p dbeta(alfa , beta)
}
# datos
list(y=6, n=14, alfa=0.5 , beta=0.5)
# Valores iniciales
list(p=0.5)
1. Cargar el modelo: En Specication Tool del men u Model, marca model
y pulsa en checkmodel.
2. Cargar los datos: En Specication Tool del men u Model, marca el list que
aparece con los datos y pulsa en load data.
3. Compilar el programa: En Specication Tool del men u Model, marca
compile.
4. Cargar valores iniciales de la(s) cadena(s): En Specication Tool del
men u Model, marca list que aparece con los valores iniciales y pulsa en load
inits.
Para ejecutar el programa: ve al men

u principal:
Inference Samples
Aparece el monitor Sample Monitor Tool. Escribe p en el nodo menu y pulsa set,
para especicar que se va a monitorizar el nodo p (por defecto con 1000000 iteraciones).
Pon, por ejemplo, 5000 iteraciones.
Ve al men

u principal:
Model Update Update tool
Pulsa update para correr 5000 iteraciones m as.
Las gr acas y los diversos estadsticos se obtienen a partir del men u Sample Monitor
Tool.
4
NOTAS:
Mira un tutorial completo sobre WinBugs en:
http://www.stat.uiowa.edu/~gwoodwor/BBIText/AppendixBWinbugs.pdf
Mira una pelcula tutorial sobre el uso de WinBugs en:
http://www.mrc-bsu.cam.ac.uk/bugs/winbugs/winbugsthemovie.html
Curso completo de I. Ntzoufras:
http://stat-athens.aueb.gr/~jbn/courses/2011_dublin_winbugs/
WinBUGS_course_1-3_eng_Dublin_2011.pdf
5
Alternativa usando la interface de R con WinBugs:
Se puede automatizar el procedimiento anterior usando una interfaz entre R y Win-
Bugs.
ruta = "c:/dondesea/"
setwd(ruta) # Fijo la ruta de trabajo
library(R2WinBUGS)
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
# PROGRAMA de BUGS :
cat("
# Modelo Beta -Binomial
model
{
y dbin(p, n)
p dbeta(alfa , beta)
}
",
file="modelo.txt")
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
# Introduzco los datos
y = 6
n = 20
alfa = 0.5
beta = 0.5
# Alternativamente , se pueden leer datos desde otro fichero
# x = read.table (" datos.txt " , header = F )
datos = list("y", "n", "alfa", "beta")
parametros = "p"
iniciales = function (){list(p=runif (1))}
binom.sim = bugs(data=datos , inits=iniciales ,
parameters.to.save=parametros , model.file="modelo.txt",
n.chains=3, n.iter =10000 , n.burnin =5000 ,
bugs.directory="C:/WinBUGS14/",
working.directory=ruta , clearWD=TRUE , debug=TRUE)
print(binom.sim)
# Borras el fichero de instrucciones del directorio de trabajo
file.remove("modelo.txt")
6
Salida R
Inference for Bugs model at "modelo.txt", fit using WinBUGS ,
3 chains , each with 10000 iterations (first 5000 discarded),
n.thin = 15
n.sims = 1002 iterations saved
mean sd 2.5 % 25 % 50 % 75 % 97.5 % Rhat n.eff
p 0.3 0.1 0.1 0.2 0.3 0.4 0.5 1 1000
deviance 4.3 1.4 3.3 3.4 3.7 4.6 7.7 1 1000
For each parameter , n.eff is a crude measure of effective sample
size , and Rhat is the potential scale reduction factor (at
convergence , Rhat =1).
DIC info (using the rule , pD = Dbar -Dhat)
pD = 1.0 and DIC = 5.2
DIC is an estimate of expected predictive error (lower deviance is
better).
7
Alternativa usando la interface de R con OpenBugs: BRugs
Alternativamente, R tiene una librera basada en la version OpenBugs que funciona
como cualquier otra librera de R: BRugs.
El programa correspondiente para R es:
ruta = "c:/dondesea/"
setwd(ruta) # Fijo la ruta de trabajo
library(BRugs)
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
# PROGRAMA de BUGS :
cat("
# Modelo Beta -Binomial
model
{
y dbin(p, n)
p dbeta(alfa , beta)
}
",
file="modelo.txt")
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
# Introduzco los datos
y = 6
n = 20
alfa = 0.5
beta = 0.5
# Alternativamente , se pueden leer datos desde otro fichero
# x = read.table (" datos.txt " , header = F )
datos = list("y", "n", "alfa", "beta")
parametros = "p"
iniciales = function (){list(p=runif (1))}
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
# Programa con BRugs
modelo = BRugsFit(data=datos , inits=iniciales ,
para=parametros , nBurnin =5000, nIter =10000 ,
modelFile="modelo.txt",
numChains=3, working.directory=ruta)
pSamp = samplesSample("p")
modelo # Resultados de la Estimacion
pMed = median(pSamp)
cat("La mediana de las simulaciones es:", pMed , "\n")
X11()
plotDensity("p",xlab="p", main="Densidad de p")
X11()
histinfo = hist(pSamp , xlab="p", ylab="Frecuencias",
freq=F, main="p estimada", col="lightblue")
file.remove("modelo.txt")
cat("La mediana de las simulaciones es:", pMed , "\n")
Salida R
$Stats
mean sd MC_error val2.5pc median val97.5pc start sample
p 0.3091 0.09809 0.00055 0.1363 0.303 0.5168 5001 30000
$DIC
Dbar Dhat DIC pD
y 4.266 3.312 5.221 0.9544
total 4.266 3.312 5.221 0.9544
La mediana de las simulaciones es: 0.30302
9
Algunas ideas sobre regresi on simple bayesiana
Se necesita denir la distribuci on conjunta a priori sobre , y . Se especican
estas como distribuciones a priori independientes (cuando se multiplican producen una
distribuci on conjunta a priori).
U(, )
U(, )
log() U(, )
Con esta elecci on se pueden aproximar los resultados de la regresion clasica. Se
necesita considerar el logaritmo, dado que la varianza debe ser positiva. La distribucion
a priori es equivalente a una densidad que es proporcional a
1

2
.
Si se trabaja con WinBugs (OpenBugs) se puede aproximar mediante
N(0, 0,0001)
N(0, 0,0001)
U(0, 100)
que equivale a usar unas distribuciones a priori difusas.
Nota: En Bugs el segundo par ametro de la normal es la precision (1/varianza). Por
tanto, escribir N(0, 0,0001) equivale a poner una varianza igual a 10000 en una
parametrizaci on tpica de la normal.
Verosimilitud en regresion:
Se tiene que la esperanza de la regresion es
E(y) = + x
donde los residuos se distribuyen como una normal: N(0, ).
De este modo, se puede escribir que
y N ( + x, ) .
As, si se considera una observaci on dada x
i
y
i
N ( + x
i
, ) .
La funcion de verosimilitud es
f(y
i
) =
1

2
exp

2
(y
i
( + x
i
))
2

10
y la funci on de verosimilitud conjunta es
n

i=1
f(y
i
)
Es decir, es simplemente un grupo de densidades normales multiplicadas entre s: una
distribuci on normal multivariante de dimension n.
Las distribuciones a posteriori de y de son t-Student con n2 grados de libertad,
y
2
se distribuye como una chi cuadrado inversa.
Programa de Regresion con la librera MCMCpack de R
library(MCMCpack)
edad = c(59,52,37,40,67,43,61,34,51,58,54,31,49,45,66,48,41,
47,53,62,60,33,44,70,56,69,35,36,68,38)
bp = c(143 ,132 ,88 ,98 ,177 ,102 ,154 ,83 ,131 ,150 ,131 ,69 ,111 ,114 ,
170 ,117 ,96 ,116 ,131 ,158 ,156 ,75 ,111 ,184 ,141 ,182 ,74 ,87 ,183 ,89)
cosa = list(X=edad , Y=bp)
posterior = MCMCregress(YX, data=cosa)
summary(posterior)
plot(posterior)
Salida R
Iterations = 1001:11000
Thinning interval = 1
Number of chains = 1
Sample size per chain = 10000
1. Empirical mean and standard deviation for each variable ,
plus standard error of the mean:
Mean SD Naive SE Time -series SE
(Intercept) -21.824 3.26297 0.0326297 0.0318731
X 2.925 0.06333 0.0006333 0.0006172
sigma2 16.516 4.81725 0.0481725 0.0515106
2. Quantiles for each variable:
2.5 % 25 % 50 % 75 % 97.5 %
(Intercept) -28.180 -23.930 -21.796 -19.728 -15.314
X 2.797 2.884 2.925 2.966 3.049
sigma2 9.629 13.120 15.689 18.945 28.003
11
12
Programa de Regresion clasica
clasico = lm(YX, data=cosa)
summary(clasico)
Salida R
Call:
lm(formula = Y X, data = cosa)
Residuals:
Min 1Q Median 3Q Max
-10.4918 -1.8453 0.3384 2.7105 5.9222
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -21.86159 3.13215 -6.98 1.37e -07 ***
X 2.92558 0.06071 48.19 < 2e-16 ***
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
Residual standard error: 3.911 on 28 degrees of freedom
Multiple R-squared: 0.9881 , Adjusted R-squared: 0.9877
F-statistic: 2322 on 1 and 28 DF , p-value: < 2.2e -16
13
Programa de Regresion con Winbugs y BRugs
rm(list=ls(all=TRUE))
ruta = "C:/Directorio_Trabajo"
setwd(ruta)
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
# PROGRAMA de BUGS
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cat("
# Regresion Lineal
# Se considera el parametro de precision tao=1/varianza
# Regresion Lineal
model
{
for (i in 1:n) {
mu[i] <- alfa + b.edad*edad[i]
bp[i] dnorm(mu[i],tao)
}
alfa dnorm (0.0 ,1.0E -4)
b.edad dnorm(0.0 ,1.0E -4)
tao dgamma (1.0E -3,1.0E -3)
sigma2 <- 1/sqrt(tao)
}
",
file="modelo.txt")
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
library(BRugs)
library(R2WinBUGS)
# Introduzco los datos
edad = c(59,52,37,40,67,43,61,34,51,58,54,31,49,45,66,48,41,
47,53,62,60,33,44,70,56,69,35,36,68,38)
bp = c(143 ,132 ,88 ,98 ,177 ,102 ,154 ,83 ,131 ,150 ,131 ,69 ,111 ,114 ,
170 ,117 ,96 ,116 ,131 ,158 ,156 ,75 ,111 ,184 ,141 ,182 ,74 ,87 ,183 ,89)
n = length(bp)
datos = list("edad","bp","n")
parametros = c("alfa","b.edad","sigma2")
iniciales = function () {list(alfa=rnorm (1), b.edad=rnorm (1),
tao=rgamma (1,1,1))}
14
# Con BRugs
modelo = BRugsFit(data=datos , inits=iniciales ,
para=parametros , nBurnin =10000 , nIter =10000 ,
modelFile="modelo.txt",
numChains=3, working.directory=ruta)
samplesStats("*") # Resultados finales
samplesDensity("*", mfrow=c(2,2), col =4)
# Con WinBugs
modelo = bugs(datos , iniciales , parametros ,
model.file="modelo.txt", n.chains=3,
n.iter =20000 , n.burnin =10000 , bugs.directory="C:/WinBUGS14",
working.directory=ruta , clearWD=TRUE , debug=TRUE)
modelo
mean sd MC_error val2.5pc median val97.5pc start sample
alfa -21.750 3.29000 0.106900 -28.270 -21.720 -15.370 10001 30000
b.edad 2.923 0.06374 0.002078 2.800 2.923 3.049 10001 30000
sigma2 4.022 0.55850 0.003989 3.109 3.962 5.271 10001 30000
15
16
Modelos Lineales Generalizados
Se pueden generalizar los modelos de regresi on habituales para modelizar relaciones
entre variables discretas y tambien para modelos de clasicaci on.
En este caso se trata simplemente de denir una funci on link que relacione la media
de los datos y el modelo lineal:
Si
E[Y ] =
entonces, se dene una funci on link g aplicada al par ametro tal que
g() = = X
es decir,
= g
1
(X) = E[Y ]
Como ejemplos de modelos y funciones link se tiene
Link Inversa link
Modelo regresion Funcion g() = = g
1
()
Normal Identidad
Logstico Logit log

exp()
1+exp()
Probit Normal inversa
1
() ()
Poisson logaritmo log () exp ()
Gamma Inversa
1

Binomial negativo Logaritmo log (1 ) 1exp ()


17
Ejemplo
Consideramos un ejemplo de regresion logstica. Supongamos una muestra de 100
personas en las que se considera si presentan o no un tipo de enfermedad degenerativa
(se recoge en la variable tiene).
tiene sexo edad
1 1 69
1 1 57
1 1 61
0 0 60
1 1 69
1 1 74
0 0 63
1 0 68
1 0 64
0 0 53
1 1 60
0 1 58
1 1 79
1 1 56
0 1 53
1 0 74
0 1 56
1 0 76
1 0 72
0 0 56
1 1 66
0 1 52
1 1 77
1 0 70
1 0 69
tiene sexo edad
1 1 76
1 1 72
0 0 53
1 1 69
0 1 59
1 1 73
1 0 77
0 0 55
1 0 77
1 1 68
1 1 62
0 0 56
1 0 68
1 1 70
0 1 60
1 0 65
0 1 55
0 0 64
1 0 75
0 0 60
1 1 67
0 0 61
1 0 69
1 0 75
1 1 68
tiene sexo edad
1 0 72
1 1 71
0 0 54
0 1 52
0 1 54
0 1 50
1 0 75
1 0 59
1 1 65
1 1 60
1 1 60
0 1 57
0 0 51
0 0 51
1 0 63
0 1 57
1 1 80
0 1 52
0 0 65
1 0 72
1 1 80
1 1 73
1 1 76
1 0 79
0 0 66
tiene sexo edad
0 0 51
1 1 76
1 1 75
0 0 66
1 0 75
1 0 78
1 0 70
0 1 67
0 0 51
1 0 70
1 1 71
1 1 71
1 1 74
1 0 74
1 1 60
1 0 58
0 1 55
1 1 61
1 1 65
0 0 52
0 1 68
1 1 75
0 1 52
0 1 53
1 1 70
Se trata de estudiar la relaci on entre la presencia de esta enfermedad, la edad y el
sexo de las personas. Para ello se puede aplicar una regresi on logstica.
18
Ejemplo con WinBugs o con BRugs:
rm(list=ls(all=TRUE))
ruta = "C:/.../Directorio_Trabajo"
setwd(ruta)
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
# PROGRAMA de BUGS
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cat("
# Regresion Logistica con WinBugs o con OpenBugs
model
{
for (i in 1:n) {
logit(p[i]) <- alfa + b.sexo*sexo[i] +
b.edad*edad[i]
tiene[i] dbern(p[i])
}
alfa dnorm (0.0, 1.0E -4)
b.sexo dnorm(0.0 , 1.0E -4)
b.edad dnorm(0.0 , 1.0E -4)
}
",
file="modelo.txt")
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
library(BRugs)
library(R2WinBUGS)
# Datos
sexo = c(1,1,1,0,1,1,0,0,0,0,1,1,1,1,1,0,1,0,0,0,
1,1,1,0,0,1,1,0,1,1,1,0,0,0,1,1,0,0,1,1,0,1,0,0,
0,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,
0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,0,1,0,1,
1,1,0,1,1,1,1,1)
edad = c(69,57,61,60,69,74,63,68,64,53,60,58,79,56,53,74,
56,76,72,56,66,52,77,70,69,76,72,53,69,59,73,77,55,77,
68,62,56,68,70,60,65,55,64,75,60,67,61,69,75,68,72,71,
54,52,54,50,75,59,65,60,60,57,51,51,63,57,80,52,65,72,
80,73,76,79,66,51,76,75,66,75,78,70,67,51,70,71,71,74,
74,60,58,55,61,65,52,68,75,52,53,70)
tiene = c(1,1,1,0,1,1,0,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,
1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,1,0,1,
0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,1,0,0,1,
1,1,1,1,0,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,1,1,
0,0,1,0,0,1)
n = length(sexo)
19
datos = list("sexo","edad","tiene","n")
parametros = c("alfa","b.sexo","b.edad")
Inicadenas = function (){list(alfa=rnorm (1), b.sexo=rnorm (1),
b.edad=rnorm (1))}
# Con BRugs
modelo = BRugsFit(data=datos , inits=Inicadenas ,
para=parametros , nBurnin =10000 , nIter =10000 ,
modelFile="modelo.txt",
numChains=3, working.directory=ruta)
samplesStats("*") # Resultados finales
samplesDensity("*", mfrow=c(2,2), col =4)
# Con WinBugs
modelo = bugs(datos , Inicadenas , parametros ,
model.file="modelo.txt",
n.chains=3, n.iter =20000 , n.burnin =10000 ,
bugs.directory="C:/WinBUGS14",
working.directory=ruta , clearWD=TRUE , debug=TRUE)
modelo
mean sd MC_error val2.5pc median val97.5pc start sample
alfa -23.5500 4.73300 0.110600 -34.05000 -23.1200 -15.3800 10001 30000
b.edad 0.3714 0.07339 0.001717 0.24450 0.3651 0.5356 10001 30000
b.sexo 1.4780 0.77190 0.012420 0.02422 1.4510 3.0520 10001 30000
20
21
El mismo ejemplo con MCMCpack:
rm(list=ls(all=TRUE))
ruta = "C:/Directorio_Trabajo"
setwd(ruta)
library(MCMCpack)
# Con una distribucion a priori impropia
posterior = MCMClogit(tiene edad + as.factor(sexo),
burnin =5000, mcmc =10000)
# Con una distribucion a priori normal multivariante
posterior = MCMClogit(tiene edad + as.factor(sexo),
burnin =5000, mcmc =10000 , b0=0, B0=.001)
plot(posterior)
summary(posterior)
Iterations = 5001:15000
Thinning interval = 1
Number of chains = 1
Sample size per chain = 10000
1. Empirical mean and standard deviation for each variable,
plus standard error of the mean:
Mean SD Naive SE Time-series SE
(Intercept) -23.3779 4.56941 0.0456941 0.154211
edad 0.3689 0.07065 0.0007065 0.002386
as.factor(sexo)1 1.4151 0.75397 0.0075397 0.025395
2. Quantiles for each variable:
2.5% 25% 50% 75% 97.5%
(Intercept) -33.38697 -26.3090 -23.0174 -20.1153 -15.5434
edad 0.24739 0.3183 0.3635 0.4142 0.5228
as.factor(sexo)1 -0.05774 0.8973 1.3970 1.9223 2.9582
22
23
Ejemplo de Regresion de Poisson
Se considera una regresi on de Poisson para los siguientes datos
Diag Cases Pyears Inc Age
1988 7 255771 0.3 6.0
1989 8 276644 0.3 5.6
1990 16 295901 0.5 5.0
1991 14 309682 0.5 4.4
1992 20 316457 0.6 4.0
1993 35 316802 1.1 5.8
1994 29 318305 0.9 4.6
1995 46 303544 1.5 4.3
1996 36 260644 1.4 4.7
1997 47 216826 2.2 4.3
1998 34 161664 2.1 5.4
1999 13 60502 2.1 5.9
La denicion de las variables es:
1. Diag: a no de diagnostico
2. Cases: casos detectados en ese a no
3. Pyears: Numero de personas en situaci on de riesgo
4. Inc: Incidencia media para cada 10000 personas
5. Age: Mediana de edad de detecci on de la enfermedad
Soluci on usando el paquete MCMCpack:
24
library(MCMCpack)
Cases = c(7,8,16,14,20,35,29,46,36,47,34,13)
Pyears = c(255771 ,276644 ,295901 ,309682 ,316457 ,
316802 ,318305 ,303544 ,260644 ,216826 ,161664 ,60502)
Inc = c(0.3 ,0.3 ,0.5 ,0.5 ,0.6 ,1.1 ,0.9 ,1.5 ,1.4 ,2.2 ,2.1 ,2.1)
Age = c(6.0 ,5.6 ,5.0 ,4.4 ,4.0 ,5.8 ,4.6 ,4.3 ,4.7 ,4.3 ,5.4 ,5.9)
posterior = MCMCpoisson(Cases Pyears + Inc + Age ,
burnin =5000, mcmc =10000)
plot(posterior)
summary(posterior)
Iterations = 5001:15000
Thinning interval = 1
Number of chains = 1
Sample size per chain = 10000
1. Empirical mean and standard deviation for each variable,
plus standard error of the mean:
Mean SD Naive SE Time-series SE
(Intercept) -4.710e-01 9.232e-01 9.232e-03 3.374e-02
Pyears 8.237e-06 1.425e-06 1.425e-08 5.190e-08
Inc 1.148e+00 1.432e-01 1.432e-03 5.242e-03
Age 2.606e-02 1.058e-01 1.058e-03 3.827e-03
2. Quantiles for each variable:
2.5% 25% 50% 75% 97.5%
(Intercept) -2.250e+00 -1.067e+00 -4.879e-01 1.383e-01 1.363e+00
Pyears 5.428e-06 7.308e-06 8.241e-06 9.174e-06 1.107e-05
Inc 8.672e-01 1.055e+00 1.148e+00 1.243e+00 1.434e+00
Age -1.804e-01 -4.369e-02 2.654e-02 9.831e-02 2.284e-01
25
26
Ejemplo de Tabla de Contingencia 2 2
Se considera un ejemplo sobre cancer de mama y edad a la que se tiene el primer
hijo (Mahon et al. (1970) Bulletin of the world health organization).
Se trata de estudiar la posible relaci on entre la edad del primer nacimiento y el c ancer
de mama.
Se seleccionaron varios hospitales en USA, Grecia, Yugoslavia, Brasil, Taiwan y
Jap on. Los casos control fueron mujeres con edad comparable en los mismos hospitales.
Se obtiene la siguiente tabla de contingencia 2 2:
Edad en el primer Nacimiento
Estatus Edad 30 (1) Edad < 30 (0)
Caso (1) 683 2537
Control (0) 1498 8747
Es decir,
Estatus Edad Recuentos
1 1 683
1 0 2537
0 1 1498
0 0 8747
rm(list=ls(all=TRUE))
ruta = "C:/Directorio_Trabajo"
setwd(ruta)
cat("
{
for (i in 1:4) {
cuenta[i] dpois(lambda[i])
log(lambda[i])<- mu + a*estatus[i] + b*edad[i] +
ab*estatus[i]*edad[i]
}
razon.odds <- exp(ab)
mu dnorm (0.0, 1.0E -4)
a dnorm (0.0, 1.0E -4)
b dnorm (0.0, 1.0E -4)
ab dnorm(0.0 , 1.0E -4)
}
",
file="modelo.txt")
27
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
library(BRugs)
# Datos
estatus = c(1,1,0,0)
edad = c(1,0,1,0)
cuenta = c(683, 2537, 1498, 8747)
datos = list("estatus","edad","cuenta")
parametros = c("a","b","razon.odds")
Inicadenas = function (){list(mu=rnorm (1),a=rnorm (1),
b=rnorm (1), ab=rnorm (1))}
# Con BRugs
modelo = BRugsFit(data=datos , inits=Inicadenas ,
para=parametros , nBurnin =10000 , nIter =10000 ,
modelFile="modelo.txt", numChains =3,
working.directory=ruta)
samplesStats("*")
samplesDensity("*", mfrow=c(2,2), col =4)
Se obtiene:
mean sd MC_error val2.5pc median val97.5pc start sample
a -1.238 0.02264 0.0002059 -1.282 -1.238 -1.194 10001 30000
b -1.765 0.02774 0.0002382 -1.820 -1.765 -1.711 10001 30000
razon.odds 1.574 0.08043 0.0007372 1.422 1.572 1.739 10001 30000
28
29

You might also like