1 Recuperación de infarto. Para estudiar las diferencias entre dos

Anuncio
Recuperación de infarto. Para estudiar las diferencias entre dos procedimientos diferentes
de recuperación de pacientes de un infarto, se consideraron dos grupos experimentales en
sendos hospitales, de 8 pacientes cada uno. La variable respuesta es el índice de Bartel, que
varía entre 0 y 100, y que constituye una medida de la habilidad funcional con la que se
valoran diferentes capacidades, de forma que valores más altos se corresponden con una
mejor situación del paciente. De cada uno de los 16 pacientes se dispone de su respuesta cada
semana a lo largo de 5 semanas consecutivas. Datos reducidos de Dobson…
(Datos en recuperainfarto.txt)
>
>
>
>
dat <- read.table("D:\\... \\recuperainfarto.txt")
options( digits=4 )
colnames(dat) <- c("hospi","s1","s2","s3","s4","s5")
dat
hospi s1 s2 s3 s4 s5
1
B 40 55 60 70 80
2
B 65 65 70 70 80
3
B 30 30 40 45 65
4
B 25 35 35 35 40
5
B 45 45 80 80 80
6
B 15 15 10 10 10
7
B 35 35 35 45 45
8
B 40 40 40 55 55
9
C 20 20 30 30 30
10
C 35 35 35 40 40
11
C 35 35 35 40 40
12
C 45 65 65 65 80
13
C 45 65 70 90 90
14
C 25 30 30 35 40
15
C 25 25 30 30 30
16
C 15 35 35 35 40
>
>
>
>
hospi <- dat[,1] ### dos grupos de tratamiento
puntos <- dat[,2:6] ### puntuaciones de los 16 individuos
pB <- puntos[hospi=="B",]
pC <- puntos[hospi=="C",]
Se puede observar un incremento semanal de las puntuaciones (Figura 1), siendo las medias
del hospital B superiores a lo largo de todas las semanas. ¿Significa esto que existe una
mejoría de los individuos? ¿Hay diferencia entre los tratamientos de B y C?
> mB <- apply( pB, 2, mean )
> mC <- apply( pC, 2, mean )
> rbind( mB, mC )
s1
s2
s3
s4
s5
mB 36.88 40.00 46.25 51.25 56.88
mC 30.62 38.75 41.25 45.62 48.75
>
>
+
>
>
>
>
x11()
plot(1:5, mB, pch="", ylim=c(15,90),xlab="semana", ylab="puntuación",
main="Puntuación y medias por hospital y semana", cex.main=0.9)
for(i in 1:5){points( 1:5, pB[i,], type="p", lty=3, pch="b", col="blue")}
for(i in 1:5){points( 1:5, pC[i,], type="p", lty=3, pch="c", col="red")}
points( 1:5, mB, type="b", pch="B", lwd=2, col="blue")
points( 1:5, mC, type="b", pch="C", lwd=2, col="red" )
>
>
>
>
>
>
### preparacion de los datos en matriz 80*4
punt <- as.vector( t(puntos) )
## puntuaciones
indi <- gl(16, 5, 16*5)
## 16 individuos
hosp <- gl(2, 8*5, 16*5)
## hospitales (1:B; 2:C)
sema <- as.numeric( gl(5, 1, 16*5) ) ## semanas 1:5
#cbind(indi, hosp, punt, sema)[1:12,]
1
80
Puntuación y medias por hospital y semana
60
c
b
c
b
b
c
b
c
b
b
c
c
b
b
B
b
B
C
40
puntuación
b
c
B
C
b
B
C
c
b
C
b
c
c
b
b
b
c
c
c
3
4
5
c
b
b
b
B
c
C
b
c
b
20
b
c
c
1
2
Figura 1
semana
Podemos recoger el incremento semanal de las puntuaciones y el efecto “hospital”, mediante
un modelo lineal.
En el modelo m1 consideramos que el incremento semanal de las puntuaciones es el mismo en
cada hospital
> m1 <- lm( punt ~ hosp + sema )
> summary( m1 )
Call:
lm(formula = punt ~ hosp + sema)
Residuals:
Min
1Q Median
-45.69 -11.00 -5.98
3Q
13.45
Max
44.28
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
32.09
5.27
6.09 4.2e-08 ***
hosp2
-5.25
4.14
-1.27
0.2081
sema
4.72
1.46
3.23
0.0018 **
Residual standard error: 18.5 on 77 degrees of freedom
Multiple R-squared: 0.135,
Adjusted R-squared: 0.113
F-statistic: 6.01 on 2 and 77 DF, p-value: 0.00374
2
El modelo lineal m2 es más sencillo que m1, excluyendo el efecto “hospital”.
> m2 <- lm( punt ~ sema )
> summary( m2 )
Call:
lm(formula = punt ~ sema)
Residuals:
Min
1Q Median
-43.06 -13.06 -3.91
3Q
12.98
Max
41.66
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
29.47
4.87
6.05 4.7e-08 ***
sema
4.72
1.47
3.21
0.0019 **
Residual standard error: 18.6 on 78 degrees of freedom
Multiple R-squared: 0.117,
Adjusted R-squared: 0.106
F-statistic: 10.3 on 1 and 78 DF, p-value: 0.0019
Si consideramos un modelo lineal m3 que recoja que el incremento de la puntuación semanal
sea diferente en los hospitales, comprobamos que la interacción hospital*semana no es
significativa.
Asimismo, podemos comprobar (anova, stepAIC) que el mejor de los tres modelos es el
modelo m2
> fit.lm2 <- fitted( m2 ) ### ajustados por m2
Observemos otras características de los datos disponibles. Se observa una fuerte correlación
entre las puntuaciones semanales, sobremanera entre las de semanas contiguas:
> cor(puntos)
s1
s1 1.0000
s2 0.8471
s3 0.8285
s4 0.8268
s5 0.8150
s2
0.8471
1.0000
0.8827
0.8924
0.9064
s3
0.8285
0.8827
1.0000
0.9590
0.9490
s4
0.8268
0.8924
0.9590
1.0000
0.9649
s5
0.8150
0.9064
0.9490
0.9649
1.0000
Podemos visualizar este hecho en el siguiente gráfico (Figura 2) de dispersión múltiple:
> library( lattice )
>
>
>
+
### gráfico de dispersión de la puntuación en las 8 semanas
x11()
splom(~ puntos, cex.lab=1.5, varnames=c("s1","s2","s3","s4","s5"),
pscales=0, xlab="puntuación semanal", ylab="puntuación semanal", col="black")
Observemos que las puntuaciones son del mismo individuo a lo largo de cinco semanas, por
tanto es bastante probable que lo anterior se explique por la falta de independencia entre las
observaciones sobre el mismo individuo. Podemos ver que existe autocorrelación en los datos
de cada individuo:
> autocor1 <- NULL
> for(i in 1:16){
+ autocor1[i] <- cor(as.numeric(puntos[i,1:4]), as.numeric(puntos[i,2:5]))
+ }
> autocor1
[1] 0.9471 0.6882 0.9058 0.3333 0.5774 0.5774 0.5774 0.5774 0.5774 0.5774
[11] 0.5774 0.3333 0.8400 0.8528 0.5774 0.3333
3
s5
puntuación semanal
s4
s3
s2
s1
Figura 2
puntuación semanal
El siguiente gráfico (Figura 3) permite observar una tendencia lineal de las puntuaciones
individuales frente a las semanas. Cada panel corresponde a un individuo (cluster),
representando los cinco puntos las cinco puntuaciones semanales del individuo. La línea de
puntos recoge la tendencia lineal de la puntuación.
Asimismo, se ha representado, en trazo continuo, la recta de regresión del modelo lineal m2.
Se observa que la recta del modelo m2 ajusta mal las observaciones disponibles, no
recogiendo la variabilidad entre los individuos.
>
>
+
+
+
+
+
+
+
+
x11()
xyplot(punt ~ sema|indi, groups=hosp, layout=c(4,4), col="red",
xlab="semana", ylab="puntuación", main="obs. individuales y modelo lineal m2",
par.strip.text=list(cex=0.7),
panel=function(x,y,subscripts){
panel.xyplot(x, y, pch=1, cex=1, col="red")
panel.lmline(x, y, lty=3)
#panel.xyplot(sema[subscripts], fitted.m3[subscripts], pch=3)
panel.lmline(sema[subscripts], fit.lm2[subscripts])
}, subscripts=T)
4
obs. individuales y modelo lineal m2
1
13
2
3
4
5
1
14
15
2
3
4
5
16
80
60
40
20
9
10
11
12
5
6
7
8
80
60
puntuación
40
20
80
60
40
20
1
2
3
4
80
60
40
20
1
2
Figura 3
3
4
5
1
2
3
4
5
semana
Para tratar de resolver el mal ajuste del modelo lineal m2, se puede ajustar un modelo lineal
mixto, introduciendo un intercept aleatorio que permita explicar la variabilidad observada entre
los individuos, y tal vez añadir una pendiente aleatoria, que explique la variabilidad observada
en las diferentes pendientes individuales observadas.
5
> library( lme4 )
Modelo lineal mixto con efectos fijos hospital y semana y con intercept aleatorio
> m1.lmer <- lmer( punt ~ hosp + sema + (1|indi), REML=F )
> summary(m1.lmer)
Linear mixed model fit by maximum likelihood
Formula: punt ~ hosp + sema + (1 | indi)
AIC BIC logLik deviance REMLdev
602 614
-296
592
581
Random effects:
Groups
Name
Variance Std.Dev.
indi
(Intercept) 280.5
16.75
Residual
48.7
6.98
Number of obs: 80, groups: indi, 16
Fixed effects:
Estimate Std. Error t value
(Intercept)
32.094
6.246
5.14
hosp2
-5.250
8.517
-0.62
sema
4.719
0.552
8.55
Correlation of Fixed Effects:
(Intr) hosp2
hosp2 -0.682
sema -0.265 0.000
Modelo lineal mixto con efecto fijo semana e intercept aleatorio
> m2.lmer <- lmer( punt ~ sema + (1|indi), REML=F )
> summary(m2.lmer)
Linear mixed model fit by maximum likelihood
Formula: punt ~ sema + (1 | indi)
AIC BIC logLik deviance REMLdev
601 610
-296
593
587
Random effects:
Groups
Name
Variance Std.Dev.
indi
(Intercept) 287.4
16.95
Residual
48.7
6.98
Number of obs: 80, groups: indi, 16
Fixed effects:
Estimate Std. Error t value
(Intercept)
29.469
4.616
6.38
sema
4.719
0.552
8.55
Correlation of Fixed Effects:
(Intr)
sema -0.359
Comparación de m2.lmer con m1.lmer, o test de que en m1.lmer, el efecto fijo hospital es
nulo:
> anova( m2.lmer, m1.lmer
Data:
Models:
m2.lmer: punt ~ sema
m1.lmer: punt ~ hosp
Df AIC BIC
m2.lmer 4 601 610
m1.lmer 5 602 614
)
+ (1 | indi)
+ sema + (1 | indi)
logLik Chisq Chi Df Pr(>Chisq)
-296
-296 0.38
1
0.54
6
El valor chicuadrado (0.38) calculado en anova, corresponde al valor del TRV, diferencia de
deviances de ambos modelos:
> dev.m2.m1 <- 2*(logLik(m1.lmer) - logLik(m2.lmer))
> dev.m2.m1[1]
ML
0.3754
Es cuestionable en estos modelos la distribución asintótica chi-cuadrado con 1 gdl para la
diferencia de deviances. Una forma de soslayar este inconveniente es el uso de bootstrap
paramétrico, facilitado por la función simulate de R:
>
>
>
>
### TRV bootstrap paramétrico de efecto fijo hospital
devb.m2.m1 <- NULL
R <- 1000
for( i in 1:R ){
+ puntb <- unlist( simulate(m2.lmer) )
+ m2b <- lmer( puntb ~ sema + (1|indi), REML=F )
+ m1b <- lmer( puntb ~ hosp + sema + (1|indi), REML=F )
+ devb.m2.m1[i] <- 2*(logLik(m1b) - logLik(m2b))
+ }
x11()
hist( devb.m2.m1, probability=T, breaks=25 )
abline( v=dev.m2.m1[1], lty=3 )
Histogram of devb.m2.m1
curve( dchisq(x,1), add=T )
0.0
0.2
0.4
Density
0.6
0.8
1.0
>
>
>
>
0
Figura 4
5
10
15
devb.m2.m1
> mean( devb.m2.m1 > dev.m2.m1[1] )
[1] 0.573
El elevado valor del p-valor bootstrap del TRV, 0.573, nos permite concluir que m2.lmer es
mejor modelo que m1.lmer, de forma que el efecto hospital es irrelevante. En este caso el pvalor bootstrap es muy similar al asintótico de la aproximación chi-cuadrado.
7
¿Es significativo el efecto aleatorio introducido en el modelo m2.lmer? La respuesta vendrá de
la comparación de m2.lmer con el modelo lineal m2, que solo incluye el efecto fijo semana.
> dev.mixto <- as.numeric(2*(logLik(m2.lmer)-logLik(m2)))
> dev.mixto
[1] 99.84
La diferencia de deviances, 99.84, es muy elevada, de forma que la ganacia en el ajuste al
incluir el intercept aleatorio es muy significativa.
>
>
>
>
R <- 1000
### TRV bootstrap de efecto mixto nulo: (inútil ya que dev.mixto es enorme!!)
devb.mixto <- NULL
for( i in 1:R ){
+ yb <- unlist( simulate( m2 ) )
+ m2b <- lm( yb ~ sema )
+ m2b.lmer <- lmer( yb ~ sema + (1|indi), REML=F )
+ devb.mixto <- 2*(logLik(m2b.lmer) - logLik(m2b))
+ }
>
>
>
>
#x11()
#hist( devb.mixto, probability=T, breaks=25 )
#abline( v=dev.mixto, lty=3 )
#curve( dchisq(x,1), add=T )
p-valor bootstrp:
> mean( devb.mixto > dev.mixto )
[1] 0
Extracción de la predicción (EBLUP) del efecto aleatorio de m2.lmer:
> ranef.m2 <- ranef( m2.lmer )
> ranef.m2
$indi
(Intercept)
1
16.806
2
25.512
3
-1.572
4
-9.310
5
21.643
6
-30.590
7
-4.474
8
2.297
9
-17.048
10
-6.408
11
-6.408
12
19.708
13
27.446
14
-11.245
15
-15.114
16
-11.245
Extracción de los efectos fijos estimados de m2.lmer:
> fixef.m2 <- fixef( m2.lmer )
> fixef.m2
(Intercept)
sema
29.469
4.719
El efecto fijo intercept añadido a los efectos aleatorios predichos da lugar a los intercepts
aleatorios del modelo m2.lmer:
> inte.m2 <- ranef.m2$indi[,1]+fixef.m2[1]
> # rep(inte.m2, each=5)+fixef.m2[2]*rep(c(1:5),16) ### igual que fitted(m2)
8
Las respuestas medias condicionadas por los efectos aleatorios son el resultado de sumar a los
efectos fijos estimados, los efectos aleatorios predichos:
> fitted.m2 <- fitted( m2.lmer )
>
>
+
+
+
+
+
+
+
+
x11()
xyplot(punt ~ sema|indi, groups=hosp, layout=c(4,4), col="red",
xlab="semana", ylab="puntuación", main="m2.lmer: intercept aleatorio",
par.strip.text=list(cex=0.7),
panel=function(x,y,subscripts){
panel.xyplot(x, y, pch=1, cex=1, col="red")
panel.lmline(x, y, lty=3)
#panel.xyplot(sema[subscripts], fitted.m2[subscripts], pch=3)
panel.lmline(sema[subscripts], fitted.m2[subscripts])
}, subscripts=T)
m2.lmer: intercept aleatorio
1
13
2
3
4
5
1
14
15
2
3
4
5
16
80
60
40
20
9
10
11
12
5
6
7
8
80
60
puntuación
40
20
80
60
40
20
1
2
3
4
80
60
40
20
1
2
Figura 5
3
4
5
1
2
3
4
5
semana
La Figura 5 es similar a la Figura 3, pero ahora podemos observar el resultado de incluir el
intercept aleatorio. Las líneas de trazo continuo están determinadas por los valores ajustados
bajo m2.lmer; presentan una pendiente idéntica a la del modelo m2, y son el resultado de
añadir a la recta de m2 el correspondiente intercept aleatorio predicho para cada individuo.
9
El ajuste a los datos observados de m2.lmer es mejor que el del modelo m2, porque recoge
una gran parte de la variabilidad entre individuos, que m2 no podía recoger.
La varianza residual estimada (EMV) en el modelo m2 es 336.1=deviance(m2)/80 (Residual
standard error: 18.6 on 78 degrees of freedom).
En el modelo m2.lmer esta varianza global se descompone en dos componentes: la varianza
del efecto aleatorio, 287.4, y la varianza residual, 48.7. Como se ve, en este ejemplo, la
variabilidad entre los individuos es mucho mayor que la variabilidad residual y esto es lo que el
modelo mixto recoge.
Una consecuencia importante es la mayor precisión en la estimación de la pendiente (efecto
semana): el error estándar del coeficiente de semana en m2 es 1.47, y desciende a 0.552 en
m2.lmer.
Bajo m2.lmer, podemos estimar en 287.4 la covarianza de dos observaciones cualesquiera del
mismo individuo, (Yij, Yil), y su correlación (correlación intraclase) en:
0.86=287.4/(287.4+48.7).
Los dos gráficos siguientes (Figura 6), permiten valorar la normalidad e igualdad de varianza
supuestos para los residuos del modleo m2.lmer
>
>
>
>
>
x11()
plot( fitted.m2, resid( m2.lmer ) ); abline(h=0,lty=3)
x11()
qqnorm( resid(m2.lmer), main="m2.lmer: qq-norm de residuos",cex.main=0.9 )
qqline( resid(m2.lmer) )
15
10
5
0
-15
-10
-5
Sample Quantiles
0
-5
-10
-15
resid(m2.lmer)
5
10
15
m2.lmer: qq-norm de residuos
20
Figura 6
40
fitted.m2
60
80
-2
-1
0
1
2
Theoretical Quantiles
10
Modelo lineal mixto que añade una pendiente aleatoria.
En este modelo los efectos aleatorios intercept y pendiente están correlados.
> m3.lmer <- lmer( punt ~ sema + (1+sema|indi), REML=F )
> summary(m3.lmer)
Linear mixed model fit by maximum likelihood
Formula: punt ~ sema + (1 + sema | indi)
AIC BIC logLik deviance REMLdev
568 582
-278
556
550
Random effects:
Groups
Name
Variance Std.Dev. Corr
indi
(Intercept) 98.8
9.94
sema
10.5
3.23
0.516
Residual
22.6
4.75
Number of obs: 80, groups: indi, 16
Fixed effects:
Estimate Std. Error t value
(Intercept)
29.469
2.780
10.60
sema
4.719
0.892
5.29
Correlation of Fixed Effects:
(Intr)
sema 0.248
> anova( m2.lmer, m3.lmer
Data:
Models:
m2.lmer: punt ~ sema
m3.lmer: punt ~ sema
Df AIC BIC
m2.lmer 4 601 610
m3.lmer 6 568 582
)
+ (1 | indi)
+ (1 + sema | indi)
logLik Chisq Chi Df Pr(>Chisq)
-296
-278 36.6
2
1.1e-08 ***
> dev23 <- as.numeric(2*(logLik(m3.lmer)-logLik(m2.lmer)))
> dev23
[1] 36.65
Dado el enorme valor de la diferencia de deviances, para una chi2 con 2 gdl, se excluye la
realización de un test bootstrap paramétrico, y se asume que el modelo m3.lmer es mejor que
el modelo m2.lmer.
11
Modelo lineal mixto con intercept y pendiente aleatorios incorrelados:
> m4.lmer <- lmer( punt ~ sema + (1|indi)+(-1+sema|indi), REML=F )
> summary(m4.lmer)
Linear mixed model fit by maximum likelihood
Formula: punt ~ sema + (1 | indi) + (-1 + sema | indi)
AIC BIC logLik deviance REMLdev
569 580
-279
559
553
Random effects:
Groups
Name
Variance Std.Dev.
indi
(Intercept) 114.4
10.70
indi
sema
12.1
3.47
Residual
21.8
4.67
Number of obs: 80, groups: indi, 16
Fixed effects:
Estimate Std. Error t value
(Intercept)
29.469
2.941
10.0
sema
4.719
0.943
5.0
Correlation of Fixed Effects:
(Intr)
sema -0.147
El efecto aleatorio pendiente es significativo, dada la gran diferencia entre las deviances de
m2.lmer y m4.lmer:
> anova(m2.lmer,m4.lmer)
Data:
Models:
m2.lmer: punt ~ sema + (1 | indi)
m4.lmer: punt ~ sema + (1 | indi) + (-1 + sema | indi)
Df AIC BIC logLik Chisq Chi Df Pr(>Chisq)
m2.lmer 4 601 610
-296
m4.lmer 5 569 580
-279 34.1
1
5.3e-09 ***
Para valorar si la correlación entre intercept y pendiente aleatorios puede ser considerada
nula, se comparan los modelos m4.lmer y m3.lmer:
> anova(m4.lmer, m3.lmer)
Data:
Models:
m4.lmer: punt ~ sema + (1 | indi) + (-1 + sema | indi)
m3.lmer: punt ~ sema + (1 + sema | indi)
Df AIC BIC logLik Chisq Chi Df Pr(>Chisq)
m4.lmer 5 569 580
-279
m3.lmer 6 568 582
-278 2.59
1
0.11
> dev.cor <- 2*(logLik(m3.lmer) - logLik(m4.lmer))
> as.numeric( dev.cor )
[1] 2.591
La comparación puede hacerse mediante bootstrap paramétrico. El p-valor bootstrap, 0.141,
es del mismo orden que el asintótico chi2 de anova.
>
>
>
>
+
+
+
R <- 1000
### TRV bootstrap de correlacion nula entre efectos aleatorios
devb.cor <- NULL
for( i in 1:R ){
yb <- unlist( simulate( m4.lmer ) )
m4b <- lmer( yb ~ sema + (1|indi)+(-1+sema|indi), REML=F )
m3b <- lmer( yb ~ sema + (1+sema|indi), REML=F )
12
+ devb.cor[i] <- 2*(logLik(m3b) - logLik(m4b))
+ }
>
>
>
>
x11()
hist( devb.cor, probability=T, breaks=25 )
abline( v=dev.cor, lty=3 )
curve( dchisq(x,1), add=T )
> mean( devb.cor > dev.cor )
[1] 0.141
0.4
0.0
0.2
Density
0.6
0.8
Histogram of devb.cor
0
2
4
6
8
10
12
devb.cor
Se puede concluir que el modelo más adecuado es m4.lmer, modelo con intercept y pendiente
aleatorios incorrelados.
Efectos aleatorios predichos (EBLUP) bajo m4.lmer
> ranef.m4 <- ranef( m4.lmer )
> ranef.m4
$indi
(Intercept)
sema
1
4.4175 4.26341
2
24.9083 0.17277
3
-9.4932 2.74343
4
-4.4438 -1.67076
5
6.4959 5.21096
6
-13.3741 -5.91428
7
-0.2180 -1.46632
8
2.4770 -0.06544
9
-11.2051 -1.99787
10
1.3127 -2.66276
11
1.3127 -2.66276
12
12.3214 2.52831
13
9.4194 6.19940
14
-7.2079 -1.38099
15
-6.2937 -3.03075
16
-10.4289 -0.26633
13
Efectos fijos estimados bajo m4.lmer (iguales que los coeficientes de m2)
> fixef.m4 <- fixef( m4.lmer )
> fixef.m4
(Intercept)
sema
29.469
4.719
Respuesta media condicionada por los efectos aleatorios:
> fitted.m4 <- fitted( m4.lmer )
Intercepts y pendientes aleatorios predichos:
> inte4 <- ranef.m4$indi[,1]+fixef.m4[1]
> pend4 <- ranef.m4$indi[,2]+fixef.m4[2]
> # rep(inte4, each=5)+rep(pend4, each=5)*rep(c(1:5),16) ### igual que
fitted(m4)
Para cada uno de los 16 individuos, puntuaciones observadas y predichas por el modelo
m3.lmer, así como intercept y pendiente aleatorios:
> fit.m4 <- matrix(fitted.m4, nrow=16, ncol=5, byrow=T)
> data.frame(dat, fit.m4, inte4, pend4)
hospi s1 s2 s3 s4 s5
X1
X2
X3
X4
X5 inte4 pend4
1
B 40 55 60 70 80 42.87 51.85 60.83 69.81 78.80 33.89 8.982
2
B 65 65 70 70 80 59.27 64.16 69.05 73.94 78.83 54.38 4.892
3
B 30 30 40 45 65 27.44 34.90 42.36 49.82 57.29 19.98 7.462
4
B 25 35 35 35 40 28.07 31.12 34.17 37.22 40.26 25.02 3.048
5
B 45 45 80 80 80 45.89 55.82 65.75 75.68 85.61 35.96 9.930
6
B 15 15 10 10 10 14.90 13.70 12.51 11.31 10.12 16.09 -1.196
7
B 35 35 35 45 45 32.50 35.76 39.01 42.26 45.51 29.25 3.252
8
B 40 40 40 55 55 36.60 41.25 45.91 50.56 55.21 31.95 4.653
9
C 20 20 30 30 30 20.98 23.71 26.43 29.15 31.87 18.26 2.721
10
C 35 35 35 40 40 32.84 34.89 36.95 39.01 41.06 30.78 2.056
11
C 35 35 35 40 40 32.84 34.89 36.95 39.01 41.06 30.78 2.056
12
C 45 65 65 65 80 49.04 56.28 63.53 70.78 78.03 41.79 7.247
13
C 45 65 70 90 90 49.81 60.72 71.64 82.56 93.48 38.89 10.918
14
C 25 30 30 35 40 25.60 28.94 32.27 35.61 38.95 22.26 3.338
15
C 25 25 30 30 30 24.86 26.55 28.24 29.93 31.62 23.18 1.688
16
C 15 35 35 35 40 23.49 27.94 32.40 36.85 41.30 19.04 4.452
Los gráficos de la Figura 7 permiten valorar los residuos del modelo m3.lmer, así como la
normalidad de los efectos aleatorios.
> x11()
> plot( fitted.m4, resid( m4.lmer ) ); abline(h=0,lty=3)
> x11()
> qqnorm( resid(m4.lmer), main="m4.lmer: qq-norm de residuos",cex.main=0.9 )
> qqline( resid(m4.lmer), lty=3 )
> x11()
> qqnorm( ranef.m4$indi[,1], main="m4.lmer: qqnorm de intercepts
aleatorios",cex.main=0.9)
> qqline( ranef.m4$indi[,1], lty=3 )
> x11()
> qqnorm( ranef.m4$indi[,2], main="m4.lmer: qqnorm de pendientes
aleatorias",cex.main=0.9)
> qqline( ranef.m4$indi[,2], lty=3 )
14
15
10
5
-10
-5
0
Sample Quantiles
0
-10
-5
resid(m4.lmer)
5
10
15
m4.lmer: qq-norm de residuos
20
40
60
80
-2
-1
0
1
2
Theoretical Quantiles
m4.lmer: qqnorm de intercepts aleatorios
m4.lmer: qqnorm de pendientes aleatorias
0
Sample Quantiles
10
-4
-2
0
-6
-10
Sample Quantiles
2
4
20
6
fitted.m4
-2
Figura 7
-1
0
Theoretical Quantiles
1
2
-2
-1
0
1
2
Theoretical Quantiles
15
En la Figura 8 se pueden observar los datos individuales, y el resultado del ajuste del modelo
m4.lmer, en las líneas de trazo continuo, que recogen los efectos intercept y pendiente
aleatorios.
> x11()
> ### plot conjunto de observados y predichos por m4.lmer
> xyplot(punt ~ sema|indi, groups=hosp, layout=c(4,4), col="red",
+ xlab="semana", ylab="puntuación", main="m4.lmer: intercept y pendiente
aleatorios",
+ par.strip.text=list(cex=0.7),
+ panel=function(x,y,subscripts){
+ panel.xyplot(x, y, pch=1, cex=1, col="red")
+ panel.lmline(x, y, lty=3)
+ #panel.xyplot(sema[subscripts], fitted.m4[subscripts], pch=3)
+ panel.lmline(sema[subscripts], fitted.m4[subscripts])
+ }, subscripts=T)
m4.lmer: intercept y pendiente aleatorios
1
13
2
3
4
5
1
14
15
2
3
4
5
16
80
60
40
20
9
10
11
12
5
6
7
8
80
60
puntuación
40
20
80
60
40
20
1
2
3
4
80
60
40
20
1
2
Figura 8
3
4
5
1
2
3
4
5
semana
¿Hay una mejoría de los individuos? ¿Hay diferencia entre los tratamientos de B y C?
16
Descargar