공식이나 분석에서 데이터를 시뮬레이션하는 일반적인 방법이 있습니까?


16

실험 설계 데이터 프레임에서 데 노보 데이터의 시뮬레이션.
R에 중점을 둔다면 (다른 언어 솔루션도 훌륭 할 것입니다).

실험 또는 측량을 설계 할 때 데이터를 시뮬레이션하고이 시뮬레이션 된 데이터에 대한 분석을 수행하면 설계의 장단점에 대한 훌륭한 통찰력을 얻을 수 있습니다.

이러한 접근법은 통계 테스트의 이해와 올바른 사용에 필수적 일 수 있습니다.

그러나이 과정은 다소 지루한 경향이 있으며 많은 사람들이 실험이나 조사에서이 중요한 단계를 건너 뛰게됩니다.

통계 모델 및 검정에는 데이터를 시뮬레이트하는 데 필요한 대부분의 정보 (가정 또는 명시적인 분포 진술 포함)가 포함됩니다.

분석 모델 (및 관련 가정 (예 : 정규성 및 균형), 요인 수준 및 유의성 (예 : p- 값))을 고려하여 시뮬레이션 된 데이터를 얻고 싶습니다. print (), predict (), 시뮬레이션 ()).

이러한 일반적인 시뮬레이션 프레임 워크가 가능합니까?

그렇다면 현재 그러한 프레임 워크가 있습니까?

예를 들어 다음과 같은 기능을 원합니다.

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

즉, 일반화 된 버전 :

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

또는

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

또는

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

완전한 해당 data.frame을 만들 것입니다

특정 기능의 가능한 예 (
자유롭게 편집하십시오) -arima.sim

모델링 된 응답없이 요인 수준의 data.frame을 생성하는 기능이 있습니다
. conf.design
http://cran.r-project.org/web/views/ExperimentalDesign.html


명심해야 할 것은 오류 분포를 지정해야한다는 것입니다. 또한 "p.values"또는 "F_value"목록을 완전히 따르지는 않습니다. F & p의 표본 분포가 나열된 숫자를 중심으로한다는 생각입니까?
gung-모니 티 복원

@ gung, 분포는 테스트에서 가정됩니다 (둘 다 정규성을 가정하거나 glm과 같은 것을 사용해야했을 것입니다).
Etienne Low-Décarie

시험은 확실히 특정 분포를 가정하지,하지만 데이터가 실제로 그런 식으로 생성 된 것을 의미하지 않는다. 다양한 목적 (예 : 시뮬레이션 연구, 견고성 등)을 위해 여러 분포에서 데이터를 생성 할 수 있습니다.
gung-모니 티 복원

@ gung, 테스트 / 모델의 기대에 해당하는 데이터 세트를 만들고 싶다는 것을 분명히하기 위해 질문을 편집하려고했습니다. 시뮬레이션 스터디 나 견고성 스터디를 찾고자하는 것이 아니라 실험적인 디자인의 드라 이런을 제공하고자합니다.
Etienne Low-Décarie

답변:


10

실제로 simulate원하는 데이터 프레임 (또는 다른 목록)을 반환 하는 S3 제네릭 이 있습니다. 유형

?simulate  

lm 클래스 (glm 또는 aov 예제에서도 작동) 및 glm.nb (MASS)에 대한 메소드가 이미 있습니다. 이제 simulate다른 클래스의 객체, 예를 들어 lme4의 객체에 대해 S3 메소드를 작성할 수 있습니다 . 입력하여 메소드가있는 클래스를 확인할 수 있습니다

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

또는

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

시뮬레이션 자체는 이미 데이터 또는 시뮬레이션 된 데이터를 필요로하는 "적합한 모델을 나타내는 객체"를 필요로하지 않으면 좋을 것입니다.
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
예를 들어 모든 응답 값이 0 인 초기 적합 객체를 항상 구성 할 수 있으며 적합의 계수를 원하는 매개 변수 값으로 바꿀 수 있습니다. 그런 다음 '시뮬레이션'을 사용하여 시뮬레이션 된 응답을 얻을 수 있습니다.
NRH

사실입니다. [experimental design task] ( cran.r-project.org/web/views/ExperimentalDesign.html )보기의 패키지에는 더미 변수 설정을 작성하기위한 많은 패키지가 있습니다. 시뮬레이션 및 실험 설계 기능을 통합하는 것이 좋습니다!
Etienne Low-Décarie

일부 시뮬레이트 함수는 데이터 만 적합하지 않습니다 : stats.stackexchange.com/questions/11233/…
Etienne Low-

6

R 패키지 simfun에서 호출되는 새로운 기능이 있습니다 TeachingDemos(현재 R-forge 의 개발 버전에만 있으며 CRAN에 있기 전에는 시간이 걸립니다). 시뮬레이션을 수행하는 함수를 만드는 데 도움을주기위한 것입니다.

의도 된 용도 중 하나는 교사가 simfun함수를 만들어서 학생들에게 배포하는 함수 (어딘가에 대안으로 웹 인터페이스를 가질 수 있음). 그런 다음 학생들은 실험 설계를 나타내는 요소의 데이터 프레임을 작성하고이 데이터 프레임을 작성된 함수에 전달한 후 교사가 설정 한 매개 변수 및 오류 분포에 따라 시뮬레이션 된 추가 응답 열이있는 데이터 프레임을 리턴합니다. 그런 다음 학생은 데이터를 분석 할 수 있습니다. 이를 통해 교사는 "진정한"관계를 설정할 수 있지만 학생들은 실제 실험을 수행하는 것보다 훨씬 적은 시간 내에 "진리"에 도달하는 방법을 탐색하기 위해 많은 다른 실험 설계를 시도 할 수 있으며 교사보다 적은 노력이 필요합니다. 서로 다른 가능한 디자인을 나타내는 여러 가지 샘플 데이터 세트를 만들거나 찾습니다.

simfun기능은 융통성있게 설계되어 교사 / 작성자가 적합 회귀 모델, 교사 / 작성자가 제공 한 매개 변수 또는 학생 / 사용자가 제공 한 매개 변수를 기반으로 시뮬레이션을 수행 할 수 있습니다.

생성 된 함수는 시뮬레이션 ( replicate명령 사용)에서 쉽게 사용 하여 검정력, 샘플 크기, 효과 크기 등을 탐색 할 수 있습니다. 결과 시뮬레이션은 시뮬레이션 프로세스를 직접 작성하는 것보다 느릴 수 있습니다.

당신이 데이터를 생성하는 P-값을 고려하지 않는 것을 제외하고 설명하지만, 사용하는 것 등이 보이는 power.함수 나 pwr.로부터 pwr패키지가 힘과 알파를 지정하기보다는 수단과 차이점을 기반으로 시뮬레이션을 만들기 위해 통합 될 수있다.

다음은 도움말 페이지의 예입니다 (여러 가지 예가 더 있습니다). 상태에 중첩 된 도시에 중첩 된 피사체 (남성과 여성)의 높이를 측정한다고 가정하면 SD를 사용하여 상태에 임의의 영향을 미칩니다. SD가 0.5 인 도시 (상태 내)에 대한 임의의 효과는 0.5이고 "오류"SD는 3이며, 여성은 시뮬레이션 평균이 64 인치이고 남성은 평균 69 인치입니다 (오류 SD 및 평균 , 무작위 효과는 약간 고안되었습니다). 이 simfun함수는이라는 새로운 함수를 만드는 데 사용 된 simheight다음 주 ID, 도시 ID 및 주제의 성별 열 (실험 설계 또는 샘플링 설계)로 데이터 프레임이 생성됩니다.simheight 그 결과 적절한 툴을 사용하여 분석 할 수있는 시뮬레이션 된 높이 (다른 변수와 더불어)를 가진 새로운 데이터 프레임이 생성됩니다.

# 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에서 새로운 TeachingDemos를 찾을 수 없습니까?
Etienne Low-

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

시도하십시오 install.packages("TeachingDemos", repos="http://R-Forge.R-project.org"). 처음에는 "http : //"가 필요하고 ";"은 필요하지 않습니다.
Greg Snow

3

입력 methods(simulate)하거나 getAnywhere("simulate")작동해야합니다. 전자는 lme4 패키지가로드 된 경우 몇 가지 방법을 제공합니다.

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

Lm 객체는 lm 및 glm 모델 모두에 사용됩니다.


2
고마워, 그러나 이것은 @Momo의 답변처럼 보입니다.
Etienne Low-Décarie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.