Chuyển thể từ mô hình sinh thái và dữ liệu của Bolker 2009 trong R. Bạn cần khai báo sức mạnh của xu hướng (tức là độ dốc) mà bạn muốn kiểm tra. Theo trực giác một xu hướng mạnh mẽ và biến thiên thấp sẽ yêu cầu kích thước mẫu nhỏ, xu hướng yếu và biến động lớn sẽ yêu cầu kích thước mẫu lớn.
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
Bạn cũng có thể mô phỏng xu hướng tối thiểu bạn có thể kiểm tra cho một cỡ mẫu nhất định, như được hiển thị trong sách
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)