Está en la página 1de 1

Práctica 4

Maximiliano Vaca Montejano


364897
maximiliano.vaca@uabc.edu.mx

Profesor: Andrés García Medina


andres.garcia.medina@uabc.edu.mx
Fecha de entrega: jueves 11 de abril, 2024 (12pm).

Ejercicio 1 (20 pts)


Resuelva los siguientes problemas conceptuales:

:D

Ejercicio 2 (40 pts)


Analice los datos Machines del ejemplo guia 3 (ec. 4) a través de la función lme

del ejemplo guía:

Consideremos ahora un experimento en el que cada observación se agrupa según dos factores.En la figura se muestra un diagrama esquemático de dicho diseño.

No description has been provided for this image

Supongamos que un factor se va a modelar como un efecto fijo y el otro como un efecto aleatorio. Entonces, un modelo para la k-ésima observación en el nivel i de efecto fijo A y el nivel j de efecto aleatorio B es

yijk = μ + αi + bj + (ab)ij + eijk

(ec. 4)

donde

2
bj ∼ N (0, α )
b

2
(αb)ij ∼ N (0, σ )
αθ

2
ϵijk ∼ N (0, σ )

y todas las v.a. son mutuamente independientes.

Ademas, μ es la media poblacional global, αi son los I efectos fijos para el factor A , y bj representan los J efectos aleatorios para el factor B.

Por otro lado, (α ∗ b)ij son las interacciones.

(a) Intente encontrar el modelo más apropiado, teniendo cuidado de examinar los gráficos de verificación del modelo apropiado

In [3]: library(nlme)
data(Machines)

head(Machines, 5)

A nffGroupedData: 5 × 3
Worker Machine score

<ord> <fct> <dbl>

1 1 A 52.0

2 1 A 52.8

3 1 A 53.1

4 2 A 51.8

5 2 A 52.8

verificamos que hay interacciones

In [4]: attach( Machines ) # make variables in Machines available by name


interaction.plot( Machine, Worker, score, las = 1) # Figure 1.10
detach() # undo the effect of ‘attach( Machines )’

partimos del modelo mas simple, sin interacciones


con un efecto fijo para cada maquina y un efecto aleatorio para cada trabajador

yijk = βj + bi + ϵijk

, ,
i = 1, . . . , 6 j = 1, . . . , 3 k = 1, . . . , 3 ,

In [5]: fm1Machine <- lme( score ~ Machine, data = Machines, random = ~ 1 | Worker )

fm1Machine

Linear mixed-effects model fit by REML


Data: Machines
Log-restricted-likelihood: -143.4391
Fixed: score ~ Machine
(Intercept) MachineB MachineC
52.355556 7.966667 13.916667

Random effects:
Formula: ~1 | Worker
(Intercept) Residual
StdDev: 5.146552 3.161647

Number of Observations: 54
Number of Groups: 6

In [6]: plot(fm1Machine)

estamos buscando un patron de aumento en la dispersion conforme aumentan los fitted values
dicho patron no es evidente en nuestro primer modelo

el modelo que incorpora los terminos de interaccion aleatorios bij

yijk = βj + bi + bij + ϵijk

, ,
i = 1, . . . , 6 j = 1, . . . , 3 k = 1, . . . , 3

efectos aleatorios en dos niveles:

efectos bi para el trabjador


efectos bij para el tipo de maquina para el respectivo trabajador

In [7]: fm2Machine <- update( fm1Machine, random = ~ 1 | Worker/Machine )


fm2Machine

Linear mixed-effects model fit by REML


Data: Machines
Log-restricted-likelihood: -107.8438
Fixed: score ~ Machine
(Intercept) MachineB MachineC
52.355556 7.966667 13.916667

Random effects:
Formula: ~1 | Worker
(Intercept)
StdDev: 4.78105

Formula: ~1 | Machine %in% Worker


(Intercept) Residual
StdDev: 3.729532 0.9615771

Number of Observations: 54
Number of Groups:
Worker Machine %in% Worker
6 18

In [8]: plot(fm2Machine)

la grafica mostrada tiene un patron similar al que buscamos

para contrastar con el analisis de los graficos, implementemos anova

In [15]: anova( fm1Machine, fm2Machine )

A anova.lme: 2 × 9
call Model df AIC BIC logLik Test L.Ratio p-value

<chr> <int> <dbl> <dbl> <dbl> <dbl> <fct> <dbl> <dbl>

fm1Machine lme.formula(fixed = score ~ Machine, data = Machines, random = ~1 | Worker) 1 5 296.8782 306.5373 -143.4391 NA NA

fm2Machine lme.formula(fixed = score ~ Machine, data = Machines, random = ~1 | Worker/Machine) 2 6 227.6876 239.2785 -107.8438 1 vs 2 71.19063 3.24324e-17

nuestro modelo fm2, el de la ec4, es apropiado en comparacion con el mas simple

(b) Asegúrese de probar si la interacción de la ec. 4 es apropiada.

In [9]: m1 <- lm(score ~ Worker*Machine, Machines)

In [14]: plot(m1, which = 1)

si, la interaccion de la ec. 4 es apropiada y es a la que habiamos llegado desde lme con fm2

(c) De manera similar, pruebe si sería apropiada una estructura de efectos aleatorios más compleja: específicamente una en la que la interacción máquina-trabajador esté correlacionada con la del trabajador.

In [16]: fm3Machine <- update(fm1Machine, random = ~ Machine | Worker)

fm3Machine

Linear mixed-effects model fit by REML


Data: Machines
Log-restricted-likelihood: -104.1556
Fixed: score ~ Machine
(Intercept) MachineB MachineC
52.355556 7.966667 13.916667

Random effects:
Formula: ~Machine | Worker
Structure: General positive-definite, Log-Cholesky parametrization
StdDev Corr
(Intercept) 4.0792806 (Intr) MachnB
MachineB 5.8776433 0.484
MachineC 3.6898543 -0.365 0.297
Residual 0.9615766

Number of Observations: 54
Number of Groups: 6

In [17]: plot(fm3Machine)

In [18]: anova( fm1Machine, fm3Machine )

A anova.lme: 2 × 9
call Model df AIC BIC logLik Test L.Ratio p-value

<chr> <int> <dbl> <dbl> <dbl> <dbl> <fct> <dbl> <dbl>

fm1Machine lme.formula(fixed = score ~ Machine, data = Machines, random = ~1 | Worker) 1 5 296.8782 306.5373 -143.4391 NA NA

fm3Machine lme.formula(fixed = score ~ Machine, data = Machines, random = ~Machine | Worker) 2 10 228.3112 247.6295 -104.1556 1 vs 2 78.56698 1.673209e-15

In [19]: anova( fm2Machine, fm3Machine )

A anova.lme: 2 × 9
call Model df AIC BIC logLik Test L.Ratio p-value

<chr> <int> <dbl> <dbl> <dbl> <dbl> <fct> <dbl> <dbl>

fm2Machine lme.formula(fixed = score ~ Machine, data = Machines, random = ~1 | Worker/Machine) 1 6 227.6876 239.2785 -107.8438 NA NA

fm3Machine lme.formula(fixed = score ~ Machine, data = Machines, random = ~Machine | Worker) 2 10 228.3112 247.6295 -104.1556 1 vs 2 7.37635 0.117287

el modelo fm3, donde la interacción máquina-trabajador está correlacionada con la del trabajador parece ser apropiada en comparacion con el modelo mas simple y se muestra bastante competente respecto al segundo modelo fm2, aunque este se siga
prefiriendo.

(d) Si algún dato parece particularmente problemático en los gráficos de verificación, repita el análisis y vea si las conclusiones cambian.

In [20]: #nuevo conjunto de datos que excluye los puntos 18, 17 y 26


Machines_new <- Machines[-c(18, 17, 26), ]

Machines_new

In [22]: attach( Machines_new ) # make variables in Machines available by name


interaction.plot( Machine, Worker, score, las = 1) # Figure 1.10
detach() # undo the effect of ‘attach( Machines )’

yijk = βj + bi + ϵijk

In [23]: fm1Machine_new <- lme( score ~ Machine, data = Machines_new, random = ~ 1 | Worker )

fm1Machine_new

Linear mixed-effects model fit by REML


Data: Machines_new
Log-restricted-likelihood: -134.814
Fixed: score ~ Machine
(Intercept) MachineB MachineC
51.817427 8.566831 14.454795

Random effects:
Formula: ~1 | Worker
(Intercept) Residual
StdDev: 5.572219 3.08587

Number of Observations: 51
Number of Groups: 6

In [24]: plot(fm1Machine_new)

no

yijk = βj + bi + bij + ϵijk

In [25]: fm2Machine_new <- update( fm1Machine_new, random = ~ 1 | Worker/Machine )


fm2Machine_new

Linear mixed-effects model fit by REML


Data: Machines_new
Log-restricted-likelihood: -92.34019
Fixed: score ~ Machine
(Intercept) MachineB MachineC
52.282070 8.223512 13.990152

Random effects:
Formula: ~1 | Worker
(Intercept)
StdDev: 4.935489

Formula: ~1 | Machine %in% Worker


(Intercept) Residual
StdDev: 3.756903 0.6937197

Number of Observations: 51
Number of Groups:
Worker Machine %in% Worker
6 18

In [26]: plot(fm2Machine_new)

la grafica mostrada tiene un patron similar al que buscamos

en comparacion con los datos completos, aqui se muestran mas dispersos los residuales, y desde un valor menor de los valores ajustados

para contrastar, implementamos anova

In [27]: anova( fm1Machine_new, fm2Machine_new )

A anova.lme: 2 × 9
call Model df AIC BIC logLik Test L.Ratio p-value

<chr> <int> <dbl> <dbl> <dbl> <dbl> <fct> <dbl> <dbl>

fm1Machine_new lme.formula(fixed = score ~ Machine, data = Machines_new, random = ~1 | Worker) 1 5 279.6279 288.9839 -134.81396 NA NA

fm2Machine_new lme.formula(fixed = score ~ Machine, data = Machines_new, random = ~1 | Worker/Machine) 2 6 196.6804 207.9076 -92.34019 1 vs 2 84.94753 3.063882e-20

pvalue: 3.063882e-20
AIC: 196.6804
--
pvalue anterior: 3.24324e-17
IAC anterior: 239.2785

el modelo mejoró al deshacernos del ruido en las graficas


no me parece que lleve a un sobreajuste ya que eliminamos pocos datos

Nos aseguramos nuevamente de probar si la interacción de la ec. 4 es apropiada.

In [30]: m1_new <- lm(score ~ Worker*Machine, Machines_new)

In [32]: plot(m1_new, which = 1)

las mismas conclusiones

de manera similar, pruebe si sería apropiada una estructura de efectos aleatorios más compleja: específicamente una en la que la interacción máquina-trabajador esté correlacionada con la del trabajador.

In [33]: fm3Machine_new <- update(fm1Machine_new, random = ~ Machine | Worker)

fm3Machine_new

Linear mixed-effects model fit by REML


Data: Machines_new
Log-restricted-likelihood: -88.19285
Fixed: score ~ Machine
(Intercept) MachineB MachineC
52.279834 8.231829 13.992388

Random effects:
Formula: ~Machine | Worker
Structure: General positive-definite, Log-Cholesky parametrization
StdDev Corr
(Intercept) 4.2288785 (Intr) MachnB
MachineB 5.7741892 0.554
MachineC 3.7552935 -0.396 0.235
Residual 0.6934156

Number of Observations: 51
Number of Groups: 6

In [34]: plot(fm3Machine_new)

In [36]: anova( fm1Machine_new, fm3Machine_new )

A anova.lme: 2 × 9
call Model df AIC BIC logLik Test L.Ratio p-value

<chr> <int> <dbl> <dbl> <dbl> <dbl> <fct> <dbl> <dbl>

fm1Machine_new lme.formula(fixed = score ~ Machine, data = Machines_new, random = ~1 | Worker) 1 5 279.6279 288.9839 -134.81396 NA NA

fm3Machine_new lme.formula(fixed = score ~ Machine, data = Machines_new, random = ~Machine | Worker) 2 10 196.3857 215.0977 -88.19285 1 vs 2 93.24222 1.399085e-18

In [37]: anova( fm2Machine_new, fm3Machine_new )

A anova.lme: 2 × 9
call Model df AIC BIC logLik Test L.Ratio p-value

<chr> <int> <dbl> <dbl> <dbl> <dbl> <fct> <dbl> <dbl>

fm2Machine_new lme.formula(fixed = score ~ Machine, data = Machines_new, random = ~1 | Worker/Machine) 1 6 196.6804 207.9076 -92.34019 NA NA

fm3Machine_new lme.formula(fixed = score ~ Machine, data = Machines_new, random = ~Machine | Worker) 2 10 196.3857 215.0977 -88.19285 1 vs 2 8.294684 0.08136082

mismas conclusiones

Ejercicio 3 (40 pts)


Repitamos el ejemplo guiado de los rieles usando un enfoque de máxima verosimilitud. En este caso: Σθ Σ_φ = Iσ^2, porloquelosparámetros(θ,φ) = (log σ,log σ_b). Lasiguientef uncióntomacomoentrada :(θ,φ),X,Z,y
2
= Iσ ,
b

, yobtienecomosalidalaf unci óndeverosimilitud(negativa)conlosatributos( ˆβ,ˆb)$:

(a)Explique cada una de las lineas del código de la función con base en la teoría revisada en el curso

In [39]: llm <- function(parameters, X, Z, y) {

sigma.b <- exp(parameters[1]) #regresa el 1er parámetro a la escala original (desde logaritmo)
sigma <- exp(parameters[2]) #regresa el 2do parámetro a la escala original (desde logaritmo)

n <- length(y) # # de observaciones


pr <- ncol(Z) # # de efectos aleatorios
pf <- ncol(X) # # de efectos fijos

X1 <- cbind(X, Z) #combina las matrices de efectos fijos y aleatorios

ipsi <- c(rep(0, pf), rep(1/sigma.b^2, pr)) #vector de inversas de las varianzas de los efectos fijos y aleatorios

b1 <- solve(crossprod(X1)/sigma^2 + diag(ipsi), t(X1) %*% y/sigma^2) #estimación de los coeficientes de los efectos fijos y aleatorios

ldet <- sum(log(diag(chol(crossprod(Z)/sigma^2 + diag(ipsi[-(1:pf)]))))) #logaritmo del determinante de la matriz de covarianza de los efectos aleatorios

l <- (-sum((y - X1 %*% b1)^2)/sigma^2 - sum(b1^2 * ipsi) - n * log(sigma^2) - pr * log(sigma.b^2) - 2 * ldet - n * log(2 * pi))/2 #log-verosimilitud negativa

attr(l, "b") <- as.numeric(b1) #añade los coeficientes estimados como un atributo de la log-verosimilitud

return(-l) #devuelve la log-verosimilitud negativa


}

(b) Determine X,Z ,y de manera explicita.

lo dejé para hoy y ya no alcanzo (11:40)

(c) Utilice la función optim para optimizar la función de verosimilitud (llm) fijando como valores iniciales: parameters = c(0, 0)

In [40]: parameters <- c(0, 0)

res_optim <- optim(parameters, llm, X = X, Z = Z, y = y)

Error in fn(par, ...): object 'y' not found


Traceback:

1. optim(parameters, llm, X = X, Z = Z, y = y)
2. (function (par)
. fn(par, ...))(c(0, 0))
3. fn(par, ...)

(d) Determine los valores ́ optimos de (σ2b , σ2 ), y compare con los obtenidos en el ejemplo guía correspondiente. ¿A que se deben las posible diferencias numéricas?

In [41]: sigma.b.opt <- exp(res_optim$par[1])


sigma.opt <- exp(res_optim$par[2])

Error in eval(expr, envir, enclos): object 'res_optim' not found


Traceback:

También podría gustarte