De-novo-Simulation von Daten aus einem experimentellen Entwurfsdatenrahmen.
Mit einem Fokus auf R (obwohl eine andere Sprachlösung großartig wäre).
Wenn Sie ein Experiment oder eine Umfrage entwerfen, können Sie Daten simulieren und eine Analyse dieser simulierten Daten durchführen, um einen hervorragenden Einblick in die Vor- und Nachteile des Designs zu erhalten.
Ein solcher Ansatz kann auch für das Verständnis und die ordnungsgemäße Verwendung statistischer Tests von entscheidender Bedeutung sein.
Dieser Prozess ist jedoch in der Regel etwas langwierig und viele müssen diesen wichtigen Schritt in einem Experiment oder einer Umfrage überspringen.
Statistische Modelle und Tests enthalten die meisten Informationen, die zur Simulation der Daten erforderlich sind (einschließlich einer Annahme oder einer expliziten Erklärung der Verteilung).
Anhand eines Analysemodells (und der damit verbundenen Annahmen, z. B. Normalität und Gleichgewicht), der Niveaus eines Faktors und eines Maßes für die Signifikanz (z. B. p-Wert) möchte ich simulierte Daten erhalten (im Idealfall mit einer verallgemeinerten Funktion ähnlich wie print (), predict (), simulate ()).
Ist solch ein verallgemeinertes Simulationsframework möglich?
Wenn ja, ist ein solches Framework derzeit verfügbar?
Zum Beispiel möchte ich eine Funktion, wie zum Beispiel:
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")))
dh eine verallgemeinerte Version von:
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)}
ODER
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")))
ODER
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")))
das würde einen vollständigen entsprechenden data.frame erzeugen
mögliche Beispiele für bestimmte Funktionen (bitte nach Belieben bearbeiten)
- arima.sim
Funktion existiert, um ein data.frame der Faktorebenen zu erstellen, ohne die modellierte Antwort:
zB. conf.design
http://cran.r-project.org/web/views/ExperimentalDesign.html
quelle
Antworten:
Es gibt tatsächlich ein S3-Generikum
simulate
, das sogar den gewünschten Datenrahmen (oder eine andere Liste) zurückgibt. ArtEs gibt bereits Methoden für die Klassen lm (funktioniert auch für glm oder für Ihr Beispiel aov) und glm.nb (in MASS). Sie können jetzt S3-
simulate
Methoden für andere Klassen von Objekten schreiben , z. B. für Objekte aus lme4. Sie können überprüfen, für welche Klassen es Methoden gibt, indem Sie Folgendes eingebenoder
quelle
>getAnywhere("simulate.class") no object named ‘simulate.class’ was found
>getS3method("simulate","class") Error in getS3method("simulate", "class") : S3 method 'simulate.class' not found
Es gibt eine neue Funktion, die
simfun
imTeachingDemos
Paket für R aufgerufen wird (derzeit nur in der Entwicklungsversion von R-Forge , es wird eine Weile dauern, bis CRAN aktiviert ist). Es soll beim Erstellen von Funktionen für Simulationen helfen.Eine der beabsichtigten Verwendungszwecke ist, dass ein Lehrer die
simfun
Funktion, um eine Funktion zu erstellen und an die Schüler zu verteilen (möglicherweise haben Sie alternativ irgendwann ein Webinterface). Die Schüler würden dann einen Datenrahmen der Faktoren erstellen, die einen experimentellen Entwurf darstellen, diesen Datenrahmen an die erstellte Funktion übergeben und den Datenrahmen mit einer zusätzlichen Spalte der Antwort zurückgeben, die gemäß den vom Lehrer festgelegten Parametern und der Fehlerverteilung simuliert wurde Anschließend kann der Schüler die Daten analysieren. Auf diese Weise kann der Lehrer eine "wahre" Beziehung aufbauen, aber die Schüler können viele verschiedene experimentelle Entwürfe ausprobieren, um Wege zu finden, wie sie in viel kürzerer Zeit als bei einem tatsächlichen Experiment zur "Wahrheit" gelangen können und weniger Arbeit für den Lehrer als nötig Erstellen oder finden Sie eine Reihe verschiedener Beispieldatensätze, die die verschiedenen möglichen Designs darstellen.Die
simfun
Funktion ist flexibel ausgelegt, sodass der Lehrer / Ersteller die Simulationen auf der Grundlage eines angepassten Regressionsmodells, der vom Lehrer / Ersteller bereitgestellten Parameter oder der vom Schüler / Benutzer eingegebenen Parameter erstellen kann.Die erstellte Funktion kann auch problemlos in Simulationen (mit dem
replicate
Befehl) verwendet werden, um Leistung, Stichprobengröße, Effektgröße usw. zu ermitteln. Die resultierende Simulation ist jedoch möglicherweise langsamer als die manuelle Erstellung des Simulationsprozesses.Dies sieht so aus, wie Sie es beschreiben, mit der Ausnahme, dass zum Erstellen der Daten keine p-Werte erforderlich sind, sondern dass mithilfe von
power.
Funktionen oderpwr.
aus dempwr
Paket Simulationen erstellt werden können, die auf der Angabe von Potenz und Alpha anstelle von Mitteln und Unterschieden basieren.Hier ist ein Beispiel von der Hilfeseite (es gibt mehrere weitere Beispiele), das davon ausgeht, dass Sie die Höhe von Personen (männlich und weiblich) messen, die in Städten verschachtelt sind, die in Bundesstaaten verschachtelt sind. Für Bundesstaaten mit SD gibt es einen zufälligen Effekt von 1 und einen zufälligen Effekt für Stadt (innerhalb des Staates) mit einer SD von 0,5, dann ist die "Fehler" SD 3, Frauen haben einen Simulationsmittelwert von 64 Zoll und Männer haben einen Mittelwert von 69 Zoll (der Fehler SD und die Mittelwerte sind realistisch) sind die zufälligen Effekte ein bisschen erfunden). Die
simfun
Funktion wird verwendet, um eine neue Funktion zu erstellen, die aufgerufen wirdsimheight
, und dann wird ein Datenrahmen mit Status-IDs, Stadt-IDs und einer Spalte für das Geschlecht des Probanden (das experimentelle Design oder das Stichproben-Design) erstellt, an das dies übergeben wirdsimheight
und das Ergebnis in einem neuen Datenrahmen mit den simulierten Höhen (zusätzlich zu den anderen Variablen), die dann mit geeigneten Werkzeugen analysiert werden könnten.quelle
install.packages("TeachingDemos", repos="http://R-Forge.R-project.org")
. Sie benötigen am Anfang "http: //" und kein ";".Tippen
methods(simulate)
odergetAnywhere("simulate")
sollte funktionieren. Ersteres bietet Ihnen einige Methoden, wenn das Paket lme4 geladen ist:[1] simulate.lm * simulate.merMod * simulate.negbin * simulate.polr *
Lm-Objekte werden sowohl für lm- als auch für glm-Modelle verwendet.
quelle