Mevcut bir formül veya analizden veri simülasyonu için genel bir yöntem var mı?


16

Deneysel bir tasarım veri çerçevesinden verilerin de novo simülasyonu.
R'ye odaklanarak (diğer dil çözümleri harika olurdu).

Bir deney veya anket tasarlarken, verileri simüle etmek ve bu simüle edilmiş veriler üzerinde bir analiz yapmak, tasarımın avantajları ve zayıflıkları hakkında müthiş bir fikir verebilir.

Böyle bir yaklaşım, istatistiksel testlerin anlaşılması ve doğru kullanımı için de gerekli olabilir.

Bununla birlikte, bu süreç biraz sıkıcı olma eğilimindedir ve birçoğu bir deneyde veya ankette bu önemli adımı atlamaya yönlendirilir.

İstatistiksel modeller ve test, verileri simüle etmek için gereken bilgilerin çoğunu içerir (bir varsayım veya açık bir dağıtım beyanı dahil).

Bir analiz modeli (ve bununla ilişkili varsayımlar, örneğin normallik ve denge), bir faktörün seviyeleri ve bir önem ölçüsü (p-değeri gibi) göz önüne alındığında, simüle edilmiş veri elde etmek istiyorum (ideal olarak benzer bir genel işlev ile) print (), tahmin (), simüle ()).

Böyle genelleştirilmiş bir simülasyon çerçevesi mümkün müdür?

Öyleyse, böyle bir çerçeve şu anda mevcut mu?

Örnek olarak, aşağıdaki gibi bir işlev istiyorum:

 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")))

yani, genelleştirilmiş bir versiyonu:

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)}

VEYA

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")))

VEYA

  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")))

tam karşılık gelen bir data.frame oluşturur

belirli işlevlerin potansiyel örnekleri (lütfen istediğiniz zaman düzenleyin)
- arima.sim

modellenmiş yanıt olmadan faktör seviyelerinin bir data.frame'ini oluşturmak için işlev vardır:
örn. conf.design
http://cran.r-project.org/web/views/ExperimentalDesign.html


Akılda tutulması gereken bir şey, bir hata dağılımı belirtmeniz gerektiğidir. Ayrıca, "p.values" veya "F_value" listelerinizi tam olarak takip etmiyorum; F & p örnekleme dağılımlarının listelenen sayılara odaklanması fikri nedir?
gung - Monica'yı eski durumuna getirin

@gung, dağılım testte varsayılır (her ikisi de burada normalliği varsayarım veya glm gibi bir şey kullanmak zorunda kalırdım).
Etienne Low-Décarie

Test kesinlikle belirli bir dağılım varsayalım açabilir, ama bu veriler aslında bu şekilde üretildi anlamına gelmez. Çeşitli amaçlar için (örneğin, simülasyon çalışmaları, sağlamlık, vb.) Herhangi bir sayıda dağıtımdan veri oluşturabilirsiniz.
gung - Monica'yı eski durumuna döndürün

@gung, testin / modelin beklentilerine karşılık gelen bir veri kümesi oluşturmak istediğimi netleştirmek için sorumu düzenlemeye çalıştım. Bir simülasyon çalışması veya sağlamlık çalışması için bir şey aramıyorum, ancak deneysel bir tasarımın kuru çalışmasını sağlamak için.
Etienne Low-Décarie

Yanıtlar:


10

Aslında, simulateistediğiniz veri çerçevesini (veya başka bir listeyi) bile döndüren bir S3 jenerik var. tip

?simulate  

Zaten lm (glm veya aov örneğiniz için de çalışır) ve glm.nb (MASS'ta) sınıfları için yöntemler vardır. Artık simulatediğer nesne sınıfları için, örneğin lme4'teki nesneler için S3 yöntemleri yazabilirsiniz. Hangi sınıfların yöntem olduğunu yazarak yazabilirsiniz.

getAnywhere("simulate.class"), getAnywhere("simulate")  

veya

getS3method("simulate","class"), methods(simulate) 

"Kendisi halihazırda veri veya benzetim yapılmış veri gerektiren" takılmış bir modeli temsil eden bir nesne "gerektirmiyorsa, benzetmek harika olurdu.
Etienne Low-Décarie

>getAnywhere("simulate.class") no object named ‘simulate.class’ was found >getS3method("simulate","class") Error in getS3method("simulate", "class") : S3 method 'simulate.class' not found
Etienne Low-Décarie

2
Birisi her zaman başlangıçta takılmış bir nesne oluşturabilir, örneğin tüm yanıt değerleri 0 dır ve uyumdaki katsayıları istenen parametre değerleriyle değiştirebilir. Daha sonra simüle edilmiş cevaplar 'simüle' kullanılarak elde edilebilir.
NRH

Bu doğru. [Deneysel tasarım görevi] ( cran.r-project.org/web/views/ExperimentalDesign.html ) görünümündeki paketler kukla değişken kurulumunu oluşturmak için birçok pakete sahiptir. Simüle ve deneysel tasarım işlevlerini entegre etmek harika olurdu!
Etienne Low-Décarie

Bazı benzetim işlevleri verileri yalnızca uygun hale getirmez
Etienne Low-Décarie

6

R simfuniçin TeachingDemospakette yeni bir işlev var (şu anda sadece R-forge'daki geliştirme sürümünde, CRAN'da bir süre önce olacak). Simülasyon yapmak için işlevler oluşturmaya yardımcı olmayı amaçlamaktadır.

Amaçlanan kullanımlardan biri, bir öğretmenin simfunişlevi bir işlev oluşturmak ve öğrencilere dağıtmak (muhtemelen bir noktada alternatif olarak bir web arayüzüne sahip olmak). Öğrenciler daha sonra deneysel bir tasarımı temsil eden faktörlerin bir veri çerçevesini oluşturacak, bu veri çerçevesini oluşturulan işleve geçirecek ve öğretmen tarafından ayarlanan parametrelere ve hata dağılımına göre simüle edilen yanıtın ek bir sütunu ile veri çerçevesine geri dönecektir. daha sonra öğrenci verileri analiz edebilir. Bu, öğretmenin "Gerçek" bir ilişki kurmasına izin verir, ancak öğrencilerin gerçek bir deney yapmaktan ve öğretmen için daha az iş gerektirmekten çok daha kısa sürede "Gerçek" e ulaşma yollarını keşfetmek için birçok farklı deneysel tasarım denemelerine izin verir. farklı olası tasarımları temsil eden bir grup farklı örnek veri kümesi oluşturun veya bulun.

simfunFonksiyon öğretmen / yaratıcısı donatılmış bir regresyon modeline öğrenci / kullanıcı tarafından suplied öğretmen / yaratıcısı tarafından sağlanan parametreleri veya parametreleri simülasyonları dayandırmak böylece esnek olacak şekilde tasarlanmıştır.

Oluşturulan işlev, replicategücü, örnek boyutunu, etki boyutunu vb. Keşfetmek için simülasyonlarda ( komutla) kolayca kullanılabilir . Ancak sonuçta elde edilen simülasyon, simülasyon sürecini elden yapmaktan daha yavaş olabilir.

Bu, verileri oluşturmak için p-değerlerinin alınmaması dışında tarif ettiğiniz gibi görünür, ancak araçların ve farklılıkların yerine güç ve alfa belirtmeye dayalı simülasyonlar oluşturmak için power.işlevlerin veya paketin kullanımı dahil edilebilir.pwr.pwr

Burada, eyaletlerde iç içe şehirlerde iç içe konuların (erkek ve kadın) yüksekliğini ölçtüğünüzü varsayan yardım sayfasından bir örnek (birkaç örnek daha var), SD'li bir durum için rastgele bir etki var 1 ve şehir (eyalet içinde) için 0,5 SD SD ile rastgele bir etki sonra "hata" SD 3, dişilerin simülasyon ortalaması 64 inç ve erkeklerin ortalama 69 inç (hata SD ve araçlar gerçekçi , rastgele etkiler biraz yapışıktır). simfunFonksiyonu olarak bilinen, yeni bir fonksiyon oluşturmak için kullanılır simheight, daha sonra bir veri çerçevesi durum kimlikleri, şehir kimlikleri ve öznenin cinsiyeti (deneysel tasarım ya da örnekleme dizaynı) için bir sütun ile oluşturulan bu geçirilirsimheight ve sonuç, daha sonra uygun araçlar kullanılarak analiz edilebilecek simüle edilmiş yüksekliklere (diğer değişkenlere ek olarak) sahip yeni bir veri çerçevesi oluşturur.

# simulate a nested mixed effects model
simheight <- simfun({
  n.city <- length(unique(city))
  n.state <- length(unique(state))
  n <- length(city)
  height <- h[sex] + rnorm(n.state,0,sig.state)[state] + 
    rnorm(n.city,0,sig.city)[city] + rnorm(n,0,sig.e)
}, sig.state=1, sig.city=0.5, sig.e=3, h=c(64,69),
  drop=c('sig.state','sig.city','sig.e','h','n.city','n.state','n'))

tmpdat <- data.frame(state=gl(5,20), city=gl(10,10), 
  sex=gl(2,5,length=100, labels=c('F','M')))
heightdat <- simheight(tmpdat)

R-Forge'da yeni TeachingDemos'u bulamıyor muyum?
Etienne Low-Décarie

1
install.packages ("TeachingDemos", repos = " R-Forge.R-project.org" )
Etienne Low-Décarie

Deneyin install.packages("TeachingDemos", repos="http://R-Forge.R-project.org"). Başlangıçta "http: //" gerekir ve ";" gerekmez.
Greg Snow

3

Yazarak methods(simulate)veya getAnywhere("simulate")çalışmalıdır. Lme4 paketi yüklenmişse, eski yöntem size birkaç yöntem sunar:

[1] simulate.lm * simulate.merMod * simulate.negbin * simulate.polr *

Lm nesneleri hem lm hem de glm modelleri için kullanılır.


2
Teşekkürler, ama bu @ Momo'nun cevabı gibi görünüyor.
Etienne Low-Décarie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.