De novo symulacja danych z eksperymentalnej ramki danych projektowych.
Z naciskiem na R (choć inne rozwiązanie językowe byłoby świetne).
Podczas projektowania eksperymentu lub ankiety symulowanie danych i przeprowadzanie analizy tych symulowanych danych może zapewnić świetny wgląd w zalety i wady projektu.
Takie podejście może być również niezbędne do zrozumienia i właściwego wykorzystania testów statystycznych.
Proces ten bywa jednak nieco żmudny i wiele osób musi pominąć ten ważny krok w eksperymencie lub ankiecie.
Modele statystyczne i test zawierają większość informacji wymaganych do symulacji danych (w tym założenie lub wyraźne stwierdzenie rozkładu).
Biorąc pod uwagę model analizy (i związane z nim założenia, np. Normalność i równowaga), poziomy czynnika i miarę istotności (takie jak wartość p), chciałbym uzyskać dane symulowane (najlepiej z uogólnioną funkcją zbliżoną do print (), przewiduj (), symuluj ()).
Czy takie ogólne ramy symulacji są możliwe?
Jeśli tak, czy takie ramy są obecnie dostępne?
Przykład, chciałbym funkcji, takiej jak:
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")))
tj. uogólniona wersja:
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)}
LUB
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")))
LUB
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")))
które tworzyłoby kompletne odpowiednie data.frame
potencjalne przykłady konkretnych funkcji (proszę edytować do woli)
- arima.sim
istnieje funkcja tworzenia ramki danych poziomów czynników, bez modelowanej odpowiedzi:
np. conf.design
http://cran.r-project.org/web/views/ExperimentalDesign.html
źródło
Odpowiedzi:
W rzeczywistości istnieje generyczny S3,
simulate
który zwraca nawet żądaną ramkę danych (lub inną listę). RodzajMa już metody dla klas lm (działa również dla glm lub twojego przykładu aov) i glm.nb (w MASS). Możesz teraz pisać
simulate
metody S3 dla innych klas obiektów, np. Dla obiektów z lme4. Możesz sprawdzić, które klasy są dostępne, pisząclub
źródło
>getAnywhere("simulate.class") no object named ‘simulate.class’ was found
>getS3method("simulate","class") Error in getS3method("simulate", "class") : S3 method 'simulate.class' not found
Istnieje nowa funkcja wywoływana
simfun
wTeachingDemos
pakiecie dla R (jest to obecnie tylko w wersji rozwojowej na R-kuźni , to będzie trochę czasu, zanim to jest na CRAN). Ma on pomóc w tworzeniu funkcji do przeprowadzania symulacji.Jednym z zamierzonych zastosowań jest użycie przez nauczyciela
simfun
funkcja do tworzenia funkcji i rozpowszechniania jej wśród studentów (ewentualnie może mieć interfejs internetowy w pewnym momencie jako alternatywa). Następnie uczniowie utworzyli ramkę danych czynników reprezentujących projekt eksperymentalny, przekazali tę ramkę danych do utworzonej funkcji i otrzymali ramkę danych z dodatkową kolumną odpowiedzi symulowaną zgodnie z parametrami i rozkładem błędów ustawionym przez nauczyciela , uczeń może następnie przeanalizować dane. Pozwala to nauczycielowi na ustanowienie „prawdziwej” relacji, ale pozwala uczniom wypróbować wiele różnych projektów eksperymentalnych w celu zbadania sposobów dotarcia do „Prawdy” w znacznie krótszym czasie niż wykonanie rzeczywistego eksperymentu i wymagającego mniej pracy dla nauczyciela niż utwórz lub znajdź kilka różnych przykładowych zestawów danych reprezentujących różne możliwe projekty.Ta
simfun
funkcja ma być elastyczna, aby nauczyciel / twórca mógł oprzeć symulacje na dopasowanym modelu regresji, parametrach dostarczonych przez nauczyciela / twórcę lub parametrach dostarczonych przez ucznia / użytkownika.Utworzoną funkcję można również łatwo wykorzystać w symulacjach (za pomocą
replicate
polecenia) w celu zbadania mocy, wielkości próbki, wielkości efektu itp. Chociaż uzyskana symulacja może być wolniejsza niż ręczne wykonanie procesu symulacji.To wygląda na to, co można opisać z tym wyjątkiem, że nie mają wartości p do tworzenia danych, ale korzystanie z
power.
funkcji lubpwr.
zpwr
pakietu mogą być włączone do tworzenia symulacji w oparciu o określenie siły i alfa niż środki i różnice.Oto przykład ze strony pomocy (istnieje kilka innych przykładów), który zakłada, że mierzysz wysokości przedmiotów (mężczyzn i kobiet) zagnieżdżonych w miastach zagnieżdżonych w stanach, dla stanu z SD występuje losowy efekt 1 i losowy efekt dla miasta (w obrębie stanu) z SD równą 0,5, wtedy „błąd” SD wynosi 3, kobiety mają średnią symulacyjną 64 cali, a mężczyźni mają średnią 69 cali (błąd SD i średnie są realistyczne , efekty losowe są nieco wymyślone). Ta
simfun
funkcja służy do tworzenia nowej funkcji o nazwiesimheight
, a następnie tworzona jest ramka danych z identyfikatorami stanów, identyfikatorami miast i kolumną dla płci badanego (projekt eksperymentalny lub projekt próbkowania), który jest przekazywany dosimheight
w wyniku czego powstaje nowa ramka danych z symulowanymi wysokościami (oprócz innych zmiennych), którą można następnie przeanalizować za pomocą odpowiednich narzędzi.źródło
install.packages("TeachingDemos", repos="http://R-Forge.R-project.org")
. Potrzebujesz „http: //” na początku i nie „;”.Wpisywanie
methods(simulate)
lubgetAnywhere("simulate")
powinno działać. Ten pierwszy daje kilka metod, jeśli załadowany jest pakiet lme4:[1] simulate.lm * simulate.merMod * simulate.negbin * simulate.polr *
Obiekty Lm są używane zarówno w modelach LM, jak i GLM.
źródło