Decir que me observan dos grupos de 10 personas, la medición de una cierta cantidad de 100 veces en cada persona. No será presumiblemente cierta variabilidad a través de estos 100 medidas en cada persona. Puedo usar efectos mixtos de análisis para evaluar si esta variabilidad dentro de la persona es, en promedio, diferente entre los dos grupos? Por ejemplo, el uso tradicional de las estadísticas, podría calcular la desviación estándar (SD) dentro de cada persona, luego de presentar estos SDs para un anova de comparación de los grupos, pero me pregunto si este proceso de dos etapas puede ser sustituido por un único modelo de efectos mixtos, en consecuencia, la obtención de las diversas ventajas de la mezcla de efectos de modelado (encogimiento, contabilidad para diferente número de observaciones por persona, etc).
Para ser claros, este es el código R que representa el escenario descrito anteriormente y la tarjeta SD/anova enfoque basado en:
set.seed(1)
group_A_base_sd = 1
group_B_base_sd = 2
within_group_sd_of_sds = .1
n_per_group = 10
obs_per_id = 100
temp = data.frame(
id = 1:(n_per_group*2)
, group = rep(c('A','B'))
)
#generate example data
library(plyr) #to avoid loops (for coding convenience only)
obs_data = ddply(
.data = temp
, .variables = .(id,group)
, .fun = function(x){
#generate a unique sd for this individual
# based on their group's sd plus some
# within-group variability
id_sd = ifelse(
x$group=='A'
, rnorm(
1
, group_A_base_sd
, within_group_sd_of_sds
)
, rnorm(
1
, group_B_base_sd
, within_group_sd_of_sds
)
)
#generate data points with the above generated
# variability
to_return = data.frame(
obs_num = 1:obs_per_id
, measurement = rnorm(obs_per_id,0,id_sd)
)
return(to_return)
}
)
#first step of an anova-based approach:
# compute SDs within each Ss
obs_sds = ddply(
.data = obs_data
, .variables = .(id,group)
, .fun = function(x){
to_return = data.frame(
obs_sd = sd(x$measurement)
)
}
)
#second step of an anova-based approach:
# compute the anova on the SDs
summary(
aov(
formula = obs_sd~group
, data = obs_sds
)
)