6 votos

Cómo simular los datos basados en un lineal mixto de ajuste del modelo de objetos en R?

Asumir, tengo un conjunto de datos, que es similar a

require(nlme) 
?Orthodont 

y mi modelo es

fm2 <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1) 

¿Cómo puedo utilizar el ajuste del modelo de objeto fm2 de generar varios conjuntos de datos, que tienen tamaños de muestra de 300, 400, 500, ... ?

He leído este gran respuesta en r-sig-mixto-modelos ayuda pero parece incompleta.

6voto

Bittercoder Puntos 4692

Nota: los datos simulados utilizando simular.lme no coincide con los elementos de la original estructura de datos o de ajuste del modelo (por ejemplo. la varianza, el tamaño del efecto...) ni tampoco la creación de datos de novo para el diseño experimental de pruebas.

require(nlme) 

?nlme::simulate.lme

fit <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1) 

orthSim <-  simulate.lme(fit, nsim = 1)

Esto produce una simulación de montaje (con un posible modelo alternativo).

Esto es gracias a una respuesta por @Momo en una de mis preguntas: Hay un método general para la simulación de los datos de una fórmula o de análisis disponibles en R?

Si usted requiere de los datos simulados, usted tendrá que crear una nueva función de la simulacion.lme función.

simulate.lme.data<-edit(simulate.lme)

agregue la siguiente línea a la derecha antes de que el último corchete

return(base2)

A continuación, puede crear tantos datos como desee:

orthSimdata <-  simulate.lme.data(fit, nsim = 1)

Nota: este es de mi (posiblemente errónea)la interpretación de la onu-código comentado en simular.lme.

Aunque esto es útil, esto parece poco menos de añadir ruido gaussiano a los datos existentes.

Este no puede ser utilizado directamente simular datos de novo. Yo actualmente crear los datos de inicio mediante la adición de los valores numéricos de los factores de los niveles de mi diseño experimental del marco de datos (por ejemplo. response=as.numeric(factor1)+as.numeric(factor2)+as.numeric(factor1)*as.numeric(factor1)+rnorm(sd=2)...).

3voto

Eero Puntos 1612

Aquí es un enfoque que toma todos los valores de fm2. Podría añadir más argumentos a la función de permitir a usted para cambiar los valores en las simulaciones.

library(nlme)

fm2 <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1) 

simfun <- function(n) {
    # n is the number of subjects, total rows will be 4*n

    # sig.b0 is the st. dev. of the random intercepts
    # it might be easier to just copy from the output
    sig.b0 <- exp(unlist(fm2$modelStruct$reStruct))*fm2$sigma
    b0 <- rnorm(n, 0, sig.b0)

    sex <- rbinom(n, 1, 0.5)  # assign sex at random

    fe <- fixef(fm2)
    my.df <- data.frame( Subject=rep(1:n, each=4), 
        int = fe[1] + rep(b0, each=4), 
        Sex=rep(sex,each=4), age=rep( c(8,10,12,14), n ) )
    my.df$distance <- my.df$int + fe[2] * my.df$age + 
        fe[3]*my.df$Sex + rnorm(n*4, 0, fm2$sigma)

    my.df$int <- NULL
    my.df$Sex <- factor( my.df$Sex, levels=0:1,
        labels=c('Male','Female') )
    my.df
}

Orthodont2 <- simfun(100)

1voto

Seth Puntos 507

Yo probablemente sólo muestra al azar con reemplazo de los Sujetos en sus datos hasta que tuve la derecha el tamaño de la muestra. Este es el método bootstrap. Es más simple que la identificación de la distribución multivariante de las variables y, a continuación, el muestreo de la misma. También el bootstrap no hacer suposiciones adicionales sobre el multivariante de la estructura de los datos.

primero establecer el número de participantes en su gran estudio simulado

nits=300 

obtener el único de los participantes en el estudio pequeño

sub=unique(Orthodont$Subject)

muestra el único de los participantes de forma aleatoria con reemplazo

subs=sample(sub,nits,rep=T)

hacer vacío de un marco de datos

df=Orthodont[-(1:dim(Orthodont)[1]),]

el bucle a través de el tamaño de la muestra y se unen juntos.

for( i in 1:nits) {  
df=rbind(df,Orthodont[which(Orthodont$Subject==subs[i]),])
}

Este último bucle for es lento, hay debo favorable una mejor manera de escribir.

Ahora usted puede ejecutar su regresión en el mayor conjunto de datos y ver sus intervalos de confianza más pequeño.

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