Simulation de novo des données d'un bloc de données de conception expérimentale.
En mettant l'accent sur R (même si une autre solution linguistique serait formidable).
Lors de la conception d'une expérience ou d'une enquête, la simulation de données et la réalisation d'une analyse sur ces données simulées peuvent fournir un aperçu formidable des avantages et des faiblesses de la conception.
Une telle approche peut également être essentielle à la compréhension et à la bonne utilisation des tests statistiques.
Cependant, ce processus a tendance à être quelque peu fastidieux et beaucoup sont amenés à sauter cette étape importante dans une expérience ou une enquête.
Les modèles statistiques et les tests contiennent la plupart des informations nécessaires pour simuler les données (y compris une hypothèse ou un énoncé explicite de la distribution).
Étant donné un modèle d'analyse (et ses hypothèses associées, par exemple la normalité et l'équilibre), les niveaux d'un facteur et une mesure de signification (comme la valeur p), je voudrais obtenir des données simulées (idéalement avec une fonction généralisée semblable à imprimer (), prédire (), simuler ()).
Un tel cadre de simulation généralisé est-il possible?
Si oui, un tel cadre est-il actuellement disponible?
Exemple, je voudrais une fonction, telle que:
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")))
c'est-à-dire une version généralisée 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)}
OU
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")))
OU
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")))
qui créerait un data.frame correspondant complet
exemples potentiels de fonctions spécifiques (veuillez modifier à volonté)
- arima.sim
existe pour créer un data.frame des niveaux de facteur, sans la réponse modélisée:
par ex. conf.design
http://cran.r-project.org/web/views/ExperimentalDesign.html
la source
Réponses:
Il existe en fait un générique S3
simulate
qui renvoie même la trame de données (ou une autre liste) que vous souhaitez. TypeIl a déjà des méthodes pour les classes lm (fonctionne aussi pour glm ou pour votre exemple aov) et glm.nb (dans MASS). Vous pouvez maintenant écrire des
simulate
méthodes S3 pour d'autres classes d'objets, par exemple pour des objets de lme4. Vous pouvez vérifier pour quelles classes il existe des méthodes en tapantou
la source
>getAnywhere("simulate.class") no object named ‘simulate.class’ was found
>getS3method("simulate","class") Error in getS3method("simulate", "class") : S3 method 'simulate.class' not found
Il y a une nouvelle fonction appelée
simfun
dans leTeachingDemos
package pour R (elle n'est actuellement que dans la version de développement sur R-forge , il faudra un certain temps avant qu'elle ne soit sur CRAN). Il est destiné à aider à créer des fonctions pour effectuer des simulations.L’une des utilisations prévues est qu’un enseignant utilise le
simfun
pour créer une fonction et la distribuer aux étudiants (éventuellement avoir une interface Web à un moment donné comme alternative). Les élèves créeraient ensuite un bloc de données des facteurs représentant un plan expérimental, passeraient ce bloc de données à la fonction créée et recevraient le bloc de données avec une colonne supplémentaire de la réponse simulée en fonction des paramètres et de la distribution des erreurs définis par l'enseignant , l'étudiant peut ensuite analyser les données. Cela permet à l'enseignant de mettre en place une "vraie" relation, mais permet aux élèves d'essayer de nombreux modèles expérimentaux différents pour explorer des moyens d'obtenir la "vérité" en beaucoup moins de temps que de faire une expérience réelle et nécessitant moins de travail pour l'enseignant que pour créer ou trouver un ensemble de différents jeux de données échantillons représentant les différents modèles possibles.La
simfun
fonction est conçue pour être flexible afin que l'enseignant / créateur puisse baser les simulations sur un modèle de régression ajusté, des paramètres fournis par l'enseignant / créateur ou des paramètres fournis par l'élève / utilisateur.La fonction créée peut également être facilement utilisée dans les simulations (avec la
replicate
commande) pour explorer la puissance, la taille de l'échantillon, la taille de l'effet, etc. Bien que la simulation résultante puisse être plus lente que la fabrication manuelle du processus de simulation.Cela ressemble à ce que vous décrivez à l'exception qu'il ne prend pas de valeurs p pour créer les données, mais l'utilisation de
power.
fonctions oupwr.
dupwr
package peut être incorporée pour créer des simulations basées sur la spécification de la puissance et de l'alpha plutôt que sur les moyennes et les différences.Voici un exemple de la page d'aide (il y a plusieurs autres exemples) qui suppose que vous mesurez les hauteurs de sujets (hommes et femmes) qui sont imbriqués dans des villes qui sont imbriquées dans des États, il y a un effet aléatoire pour l'État avec un SD de 1 et un effet aléatoire pour la ville (dans l'état) avec un écart-type de 0,5, puis l'écart-type «erreur» est de 3, les femmes ont une moyenne de simulation de 64 pouces et les hommes ont une moyenne de 69 pouces (l'erreur SD et les moyens sont réalistes , les effets aléatoires sont un peu artificiels). La
simfun
fonction est utilisée pour créer une nouvelle fonction appeléesimheight
, puis une trame de données est créée avec les identifiants d'état, les identifiants de ville et une colonne pour le sexe du sujet (le plan expérimental ou le plan d'échantillonnage), ceci est transmis àsimheight
et le résultat dans un nouveau bloc de données avec les hauteurs simulées (en plus des autres variables) qui pourraient ensuite être analysées à l'aide des outils appropriés.la source
install.packages("TeachingDemos", repos="http://R-Forge.R-project.org")
. Vous avez besoin de "http: //" au début et non de ";".Dactylographie
methods(simulate)
ougetAnywhere("simulate")
devrait fonctionner. Le premier vous donne quelques méthodes, si le paquet lme4 est chargé:[1] simulate.lm * simulate.merMod * simulate.negbin * simulate.polr *
Les objets Lm sont utilisés pour les modèles lm et glm.
la source