variación total studio son saber resueltos numeros numero modelos modelo las inferencial funcion estadistica entero ejercicios efectos efecto contribuciones como cada aleatorios r model statistics modeling

total - numeros aleatorios en r studio



¿Cómo ajustar un modelo de efectos aleatorios con el Sujeto como aleatorio en R? (3)

Datos dados de la siguiente forma

myDat = structure(list(Score = c(1.84, 2.24, 3.8, 2.3, 3.8, 4.55, 1.13, 2.49, 3.74, 2.84, 3.3, 4.82, 1.74, 2.89, 3.39, 2.08, 3.99, 4.07, 1.93, 2.39, 3.63, 2.55, 3.09, 4.76), Subject = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 8L, 8L, 8L), Condition = c(0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L), Time = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L)), .Names = c("Score", "Subject", "Condition", "Time"), class = "data.frame", row.names = c(NA, -24L))

Me gustaría modelar la puntuación en función del sujeto, la condición y el tiempo. El puntaje de cada sujeto (humano) se midió tres veces, indicado por la variable Tiempo, por lo que tengo medidas repetidas.

¿Cómo puedo construir en R un modelo de efectos aleatorios con efectos de asunto ajustados como aleatorios?

ADENDO : Se ha preguntado cómo generé estos datos. Lo adivinaste, los datos son falsos ya que el día es largo. La puntuación es tiempo más ruido aleatorio y estar en la condición 1 agrega un punto a la puntuación. Es instructivo como una configuración típica de Psych. Usted tiene una tarea en la que el puntaje de la gente mejora con la práctica (tiempo) y un medicamento (condición == 1) que mejora el puntaje.

Aquí hay algunos datos más realistas para los propósitos de esta discusión. Ahora los participantes simulados tienen un nivel de "habilidad" al azar que se agrega a sus puntajes. Además, los factores ahora son cadenas.

myDat = structure(list(Score = c(1.62, 2.18, 2.3, 3.46, 3.85, 4.7, 1.41, 2.21, 3.32, 2.73, 3.34, 3.27, 2.14, 2.73, 2.74, 3.39, 3.59, 4.01, 1.81, 1.83, 3.22, 3.64, 3.51, 4.26), Subject = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 8L, 8L, 8L), .Label = c("A", "B", "C", "D", "E", "F", "G", "H"), class = "factor"), Condition = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L), .Label = c("No", "Yes"), class = "factor"), Time = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("1PM", "2PM", "3PM"), class = "factor")), .Names = c("Score", "Subject", "Condition", "Time"), class = "data.frame", row.names = c(NA, -24L))

Míralo:

library(ggplot2) qplot(Time, Score, data = myDat, geom = "line", group = Subject, colour = factor(Condition))


usando la biblioteca nlme ...

Respondiendo a su pregunta establecida, puede crear un modelo de efecto mixto intecept al azar usando el siguiente código:

> library(nlme) > m1 <- lme(Score ~ Condition + Time + Condition*Time, + data = myDat, random = ~ 1 | Subject) > summary(m1) Linear mixed-effects model fit by REML Data: myDat AIC BIC logLik 31.69207 37.66646 -9.846036 Random effects: Formula: ~1 | Subject (Intercept) Residual StdDev: 5.214638e-06 0.3151035 Fixed effects: Score ~ Condition + Time + Condition * Time Value Std.Error DF t-value p-value (Intercept) 0.6208333 0.2406643 14 2.579666 0.0218 Condition 0.7841667 0.3403507 6 2.303996 0.0608 Time 0.9900000 0.1114059 14 8.886423 0.0000 Condition:Time 0.0637500 0.1575517 14 0.404629 0.6919 Correlation: (Intr) Condtn Time Condition -0.707 Time -0.926 0.655 Condition:Time 0.655 -0.926 -0.707 Standardized Within-Group Residuals: Min Q1 Med Q3 Max -1.5748794 -0.6704147 0.2069426 0.7467785 1.5153752 Number of Observations: 24 Number of Groups: 8

La varianza de intercepción es básicamente 0, lo que indica que no hay efecto sujeto, por lo que este modelo no captura bien la relación entre tiempo. Un modelo de intercepción aleatorio rara vez es el tipo de modelo que desea para un diseño de medidas repetidas. Un modelo de intercepción aleatorio supone que las correlaciones entre todos los puntos de tiempo son iguales. es decir, la correlación entre el tiempo 1 y el tiempo 2 es la misma que entre el tiempo 1 y el tiempo 3. En circunstancias normales (tal vez no las que generan los datos falsos) esperaríamos que el último fuera menor que el anterior. Una estructura autoregresiva suele ser una mejor forma de avanzar.

> m2<-gls(Score ~ Condition + Time + Condition*Time, + data = myDat, correlation = corAR1(form = ~ Time | Subject)) > summary(m2) Generalized least squares fit by REML Model: Score ~ Condition + Time + Condition * Time Data: myDat AIC BIC logLik 25.45446 31.42886 -6.727232 Correlation Structure: AR(1) Formula: ~Time | Subject Parameter estimate(s): Phi -0.5957973 Coefficients: Value Std.Error t-value p-value (Intercept) 0.6045402 0.1762743 3.429543 0.0027 Condition 0.8058448 0.2492895 3.232566 0.0042 Time 0.9900000 0.0845312 11.711652 0.0000 Condition:Time 0.0637500 0.1195452 0.533271 0.5997 Correlation: (Intr) Condtn Time Condition -0.707 Time -0.959 0.678 Condition:Time 0.678 -0.959 -0.707 Standardized residuals: Min Q1 Med Q3 Max -1.6850557 -0.6730898 0.2373639 0.8269703 1.5858942 Residual standard error: 0.2976964 Degrees of freedom: 24 total; 20 residual

Sus datos muestran una correlación de punto de tiempo de -.596, lo cual parece extraño. normalmente debería haber, como mínimo, una correlación positiva entre los puntos temporales. ¿Cómo se generó esta información?

apéndice:

Con sus nuevos datos sabemos que el proceso de generación de datos es equivalente a un modelo de intercepción aleatorio (aunque no es el más realista para un estudio longitudinal. La visualización muestra que el efecto del tiempo parece ser bastante lineal, por lo que deberíamos sentirnos cómodos) tratándolo como una variable numérica.

> library(nlme) > m1 <- lme(Score ~ Condition + as.numeric(Time) + Condition*as.numeric(Time), + data = myDat, random = ~ 1 | Subject) > summary(m1) Linear mixed-effects model fit by REML Data: myDat AIC BIC logLik 38.15055 44.12494 -13.07527 Random effects: Formula: ~1 | Subject (Intercept) Residual StdDev: 0.2457355 0.3173421 Fixed effects: Score ~ Condition + as.numeric(Time) + Condition * as.numeric(Time) Value Std.Error DF t-value p-value (Intercept) 1.142500 0.2717382 14 4.204415 0.0009 ConditionYes 1.748333 0.3842958 6 4.549447 0.0039 as.numeric(Time) 0.575000 0.1121974 14 5.124898 0.0002 ConditionYes:as.numeric(Time) -0.197500 0.1586710 14 -1.244714 0.2337 Correlation: (Intr) CndtnY as.(T) ConditionYes -0.707 as.numeric(Time) -0.826 0.584 ConditionYes:as.numeric(Time) 0.584 -0.826 -0.707 Standardized Within-Group Residuals: Min Q1 Med Q3 Max -1.44560367 -0.65018585 0.01864079 0.52930925 1.40824838 Number of Observations: 24 Number of Groups: 8

Vemos un efecto de condición significativo, lo que indica que la condición ''sí'' tiende a tener puntuaciones más altas (alrededor de 1,7) y un efecto de tiempo significativo, lo que indica que ambos grupos aumentan con el tiempo. Apoyando la trama, no encontramos efecto diferencial de tiempo entre los dos grupos (la interacción). es decir, las pendientes son las mismas.


(usando la biblioteca lme4) Esto ajusta el efecto de su sujeto como aleatorio y también la variable con la que se agrupan sus efectos aleatorios. En este modelo, el efecto aleatorio es la intersección que varía según el sujeto.

m <- lmer( Score ~ Condition + Time + (1|Subject), data=myDat )

Para ver los efectos aleatorios, solo puede usar

ranef(m)

Como mencionó Ian Fellows, sus datos también pueden tener componentes aleatorios de Condición y Tiempo. Puedes probar eso con otro modelo. En la siguiente Condición, Tiempo y la intercepción pueden variar aleatoriamente por tema. También evalúa sus correlaciones.

mi <- lmer( Score ~ Condition + Time + (Condition + Time|Subject), data=myDat )

y prueba

summary(mi) ranef(mi)

También puede probar esto sin correlaciones con la intersección, con las interacciones entre Condición y Tiempo, y muchos otros modelos para ver cuál se ajusta mejor a sus datos y / o su teoría. Su pregunta es un poco vaga, pero estos pocos comandos deberían ayudarlo a comenzar.

Tenga en cuenta que el sujeto es su factor de agrupación, por lo que es lo que le queda a otros efectos como aleatorio. No es algo que luego también cabe explícitamente como predictor.


No es una respuesta a su pregunta, pero puede encontrar esta visualización de su información informativa.

library(ggplot2) qplot(Time, Score, data = myDat, geom = "line", group = Subject, colour = factor(Condition))