Simulación de novo de datos de un marco de datos de diseño experimental.
Con un enfoque en R (aunque otra solución de lenguaje sería genial).
Al diseñar un experimento o una encuesta, simular datos y realizar un análisis de estos datos simulados puede proporcionar una excelente visión de las ventajas y debilidades del diseño.
Tal enfoque también puede ser esencial para la comprensión y el uso adecuado de las pruebas estadísticas.
Sin embargo, este proceso tiende a ser algo tedioso y muchos se ven obligados a saltarse este importante paso en un experimento o encuesta.
Los modelos estadísticos y las pruebas contienen la mayor parte de la información requerida para simular los datos (incluyendo una suposición o una declaración explícita de la distribución).
Dado un modelo de análisis (y sus supuestos asociados, por ejemplo, normalidad y equilibrio), los niveles de un factor y una medida de significación (como el valor p), me gustaría obtener datos simulados (idealmente con una función generalizada similar a print (), predic (), simulate ()).
¿Es posible un marco de simulación tan generalizado?
Si es así, ¿está disponible actualmente ese marco?
Ejemplo, me gustaría una función, como:
sim(aov(response~factor1+factor2*factor3),
p.values=list(factor1=0.05,
factor2=0.05,
factor3=0.50,
factor2:factor3=0.05),
levels=list(factor1=1:10,
factor2=c("A", "B", "C"),
factor3=c("A", "B", "C")))
es decir, una versión generalizada de:
sim.lm<-function(){
library(DoE.base)
design<-fac.design(nlevels=c(10,3,3),
factor.names=c("factor1", "factor2", "factor3"),
replications=3,
randomize=F)
response<-with(design, as.numeric(factor1)+
as.numeric(factor2)+
as.numeric(factor3)+
as.numeric(factor2)*as.numeric(factor3)+
rnorm(length(factor1)))
simulation<-data.frame(design, response)}
O
sim(glm(response~factor1+factor2*factor3, family=poisson),
p.values=list(factor1=0.05,
factor2=0.05,
factor3=0.50,
factor2:factor3=0.05),
levels=list(factor1=1:10,
factor2=c("A", "B", "C"),
factor3=c("A", "B", "C")))
O
library(lme4)
sim(lmer(response~factor1+factor2 + (factor2|factor3)),
F_value=list(factor1=50,
factor2=50),
levels=list(factor1=1:10,
factor2=c("A", "B", "C"),
factor3=c("A", "B", "C")))
eso crearía un completo data.frame correspondiente
ejemplos potenciales de funciones específicas (edite a voluntad)
- arima.sim
La función existe para crear un marco de datos de los niveles de factores, sin la respuesta modelada:
por ejemplo. conf.design
http://cran.r-project.org/web/views/ExperimentalDesign.html
fuente
Respuestas:
En realidad, hay un genérico S3
simulate
que incluso devuelve el marco de datos (u otra lista) que desee. TipoTiene métodos para las clases lm (funciona también para glm o para su ejemplo aov) y glm.nb (en MASS) ya. Ahora puede escribir
simulate
métodos S3 para otras clases de objetos, por ejemplo, para objetos de lme4. Puede verificar para qué clases hay métodos escribiendoo
fuente
>getAnywhere("simulate.class") no object named ‘simulate.class’ was found
>getS3method("simulate","class") Error in getS3method("simulate", "class") : S3 method 'simulate.class' not found
Hay una nueva función llamada
simfun
en elTeachingDemos
paquete para R (actualmente solo está en la versión de desarrollo en R-forge , pasará un tiempo antes de que esté en CRAN). Su objetivo es ayudar con la creación de funciones para hacer simulaciones.Uno de los usos previstos es que un maestro usaría el
simfun
función para crear una función y distribuirla a los estudiantes (posiblemente tenga una interfaz web en algún momento como alternativa). Luego, los estudiantes crearán un marco de datos de los factores que representan un diseño experimental, pasarán este marco de datos a la función creada y obtendrán el marco de datos con una columna adicional de la respuesta simulada de acuerdo con los parámetros y la distribución de errores configurados por el profesor , el alumno puede analizar los datos. Esto le permite al maestro establecer una relación "Verdadera", pero les permite a los estudiantes probar muchos diseños experimentales diferentes para explorar formas de llegar a la "Verdad" en mucho menos tiempo que hacer un experimento real y requerir menos trabajo para el maestro que cree o encuentre un conjunto de diferentes conjuntos de datos de muestra que representen los diferentes diseños posibles.La
simfun
función está diseñada para ser flexible para que el maestro / creador pueda basar las simulaciones en un modelo de regresión ajustado, parámetros proporcionados por el maestro / creador o parámetros suministrados por el alumno / usuario.La función creada también se puede usar fácilmente en simulaciones (con el
replicate
comando) para explorar la potencia, el tamaño de la muestra, el tamaño del efecto, etc. Aunque la simulación resultante puede ser más lenta que la elaboración manual del proceso de simulación.Esto se parece a lo que describe con la excepción de que no se necesitan valores p para crear los datos, pero el uso de
power.
funciones opwr.
delpwr
paquete podría incorporarse para crear simulaciones basadas en la especificación de potencia y alfa en lugar de medios y diferencias.Aquí hay un ejemplo de la página de ayuda (hay varios ejemplos más) que asume que está midiendo alturas de sujetos (hombres y mujeres) que están anidados en ciudades que están anidadas en estados, hay un efecto aleatorio para el estado con un SD de 1 y un efecto aleatorio para la ciudad (dentro del estado) con un SD de 0.5, entonces el "error" SD es 3, las mujeres tienen una media de simulación de 64 pulgadas y los hombres tienen una media de 69 pulgadas (el error SD y las medias son realistas , los efectos aleatorios son un poco artificiales). La
simfun
función se usa para crear una nueva función llamadasimheight
, luego se crea un marco de datos con ID de estado, ID de ciudad y una columna para el sexo del sujeto (diseño experimental o diseño de muestreo), esto se pasa asimheight
y el resultado en un nuevo marco de datos con las alturas simuladas (además de las otras variables) que luego podrían analizarse utilizando las herramientas apropiadas.fuente
install.packages("TeachingDemos", repos="http://R-Forge.R-project.org")
. Necesita "http: //" al principio y no ";".Mecanografía
methods(simulate)
ogetAnywhere("simulate")
debería funcionar. El primero le ofrece algunos métodos, si se carga el paquete lme4:[1] simulate.lm * simulate.merMod * simulate.negbin * simulate.polr *
Los objetos Lm se usan para los modelos lm y glm.
fuente