5 votos

Utilización de modelos de efectos mixtos para estimar y comparar la variabilidad

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
    )
)

21voto

Kev Puntos 60744

Puede calcular SD para cada persona y su error estándar (por ejemplo, mediante bootstrap). A continuación, puede utilizar el paquete rmeta para hacer el análisis. Creo que usted debe utilizar alguna transformación de SD por ejemplo log (o tal vez mejor registro de la varianza).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X