내가하려고하는 일반적인 버전은 몇 가지 변수를 조작하여 시뮬레이션 결과가 어떻게 영향을 미치는지 시뮬레이션 연구를 수행하는 것입니다. R과 속도 문제가 있습니다. 최신 시뮬레이션은 몇 번의 반복 (실험 당 10 회)으로 작업했습니다. 그러나 대규모 버전 (실험 당 10k) 버전으로 이동하면 시뮬레이션은 14 시간 동안 실행되었습니다 (아직 실행 중입니다).코드 최적화를 사용하여 R에서 시뮬레이션 속도 향상
다음은 내가 실행중인 코드입니다 (주석 포함). R과 신인이기 때문에 효율적인 시뮬레이션을 위해 고심하고 있습니다. 이 코드를 최적화하고 향후 시뮬레이션 연구에 이러한 코멘트를 사용하기 위해 여기에 제공된 의견 및 제안을 통해 도움을 얻으십시오.
이 코드의 기능에 대해 몇 가지 말씀 드리겠습니다. 효과 크기와 표본 크기의 두 변수를 조작하고 있습니다. 각 조합은 10k 회 실행됩니다 (조건 당 10k 실험). 결과 (결과)를 저장하기 위해 데이터 프레임을 초기화합니다. 효과 크기, 샘플 크기 및 반복 (10k)의 세 변수를 반복합니다.
루프 내에서 4 개의 NULL 구성 요소 (p.test, p.rep, d.test 및 d.rep)를 초기화합니다. 전자의 두 값은 초기 t-test의 p 값과 복제의 p 값 (유사한 조건에서 복제 됨)을 캡처합니다. 후자의 두 개는 효과 크기를 계산합니다 (Cohen 's d).
제어 조건 (DVcontrol)에 대한 표준 정규에서 임의의 데이터를 생성하고 실험 조건 (DVexperiment)의 평균으로 내 효과 크기를 사용합니다. 나는 값들 사이의 차이를 취하고 그 결과를 R의 t- 테스트 함수로 던진다 (paired-samples t-test). Trials라고하는 목록에 결과를 저장하고이를 결과 데이터 프레임에 연결합니다. 이 과정은 완료 될 때까지 10k 번 반복됩니다. 여러분의 의견과 제안에 미리
# Set Simulation Parameters
## Effect Sizes (ES is equal to mean difference when SD equals Variance equals 1)
effect_size_range <- seq(0, 2, .1) ## ES
## Sample Sizes
sample_size_range <- seq(10, 1000, 10) ## SS
## Iterations for each ES-SS Combination
iter <- 10000
# Initialize the Vector of Results
Results <- data.frame()
# Set Random Seed
set.seed(12)
# Loop over the Different ESs
for(ES in effect_size_range) {
# Loop over the Different Sample Sizes
for(SS in sample_size_range) {
# Create p-value Vectors
p.test <- NULL
p.rep <- NULL
d.test <- NULL
d.rep <- NULL
# Loop over the iterations
for(i in 1:iter) {
# Generate Test Data
DVcontrol <- rnorm(SS, mean=0, sd=1)
DVexperiment <- rnorm(SS, mean=ES, sd=1)
DVdiff <- DVexperiment - DVcontrol
p.test[i] <- t.test(DVdiff, alternative="greater")$p.value
d.test[i] <- mean(DVdiff)/sd(DVdiff)
# Generate Replication Data
DVcontrol <- rnorm(iter, mean=0, sd=1)
DVexperiment <- rnorm(iter, mean=ES, sd=1)
DVdiff <- DVexperiment - DVcontrol
p.rep[i] <- t.test(DVdiff, alternative="greater")$p.value
d.rep[i] <- mean(DVdiff)/sd(DVdiff)
}
# Results
Trial <- list(ES=ES, SS=SS,
d.test=mean(d.test), d.rep=mean(d.rep),
p.test=mean(p.test), p.rep=mean(p.rep),
r=cor(p.test, p.rep, method="kendall"),
r.log=cor(log2(p.test)*(-1), log2(p.rep)*(-1), method= "kendall"))
Results <- rbind(Results, Trial)
}
}
감사합니다, 조쉬
이
이것은 여기보다는 [codereview.se]에 속한 것처럼 보입니다. –
@JohnColeman 두 사이트 모두 주제에 관한 것 같습니다. 코드 검토 요청뿐만 아니라 특정 질문 ("이 코드의 속도를 높이려면 어떻게합니까? 하루가 걸릴 수 있습니다)"입니다. – Zeta
이 게시물을 제거하고 필요한 경우 코드 검토로 옮길 수 있습니다. – Josh