답변:
다음은 R의 시뮬레이션 코드 소스입니다. 선형 모델을 구체적으로 다루고 있는지 확실하지 않지만 요점을 얻기에 충분한 예를 제공합니다.
다음 사이트에는 또 다른 시뮬레이션 예제가 있습니다.
R의 Bolker 2009 생태 모델 및 데이터에서 채택되었습니다. 테스트하려는 추세 (예 : 기울기)의 강도를 선언해야합니다. 직관적으로 강한 경향과 낮은 변동성은 작은 샘플 크기를 필요로하며, 약한 경향과 큰 가변성은 큰 샘플 크기를 요구합니다.
a = 2 #desired slope
b = 1 #estimated intercept
sd = 20 #estimated variability defined by standard deviation
nsim = 400 #400 simulations
pval = numeric(nsim) #placeholder for the second for loop output
Nvec = seq(25, 100, by = 1) #vector for the range of sample sizes to be tested
power.N = numeric(length(Nvec)) #create placeholder for first for loop output
for (j in 1:length(Nvec)) {
N = Nvec[j]
x = seq(1, 20, length = Nvec[j]) #x value length needs to match sample size (Nvec) length
for (i in 1:nsim) { #for this value of N, create random error 400 times
y_det = a + b * x
y = rnorm(N, mean = y_det, sd = sd)
m = lm(y ~ x)
pval[i] = coef(summary(m))["x", "Pr(>|t|)"] #all the p values for 400 sims
} #cycle through all N values
power.N[j] = sum(pval < 0.05)/nsim #the proportion of correct p-values (i.e the power)
}
power.N
plot(Nvec, power.N) #need about 90 - 100 samples for 80% power
책에 표시된대로 주어진 표본 크기에 대해 테스트 할 수있는 최소 추세를 시뮬레이션 할 수도 있습니다.
bvec = seq(-2, 2, by = 0.1)
power.b = numeric(length(bvec))
for (j in 1:length(bvec)) {
b = bvec[j]
for (i in 1:nsim) {
y_det = a + b * x
y = rnorm(N, mean = y_det, sd = sd)
m = lm(y ~ x)
pval[i] = coef(summary(m))["x", "Pr(>|t|)"]
}
power.b[j] = sum(pval < 0.05)/nsim
}
power.b
plot(bvec, power.b)