單元摘要: 統計檢定的商業應用
pacman::p_load(pwr, lattice, gridExtra)
💡 檢定力(Test’s Power):事實為真時,檢定出顯性的機率
pwr.t.test(n, d, sig.level, power, type, alternative)
檢定力的決定因素:
n
: sample size 樣本大小d
: effect size, in standard error 臨界效果sig.level
: significant level 顯著水準power
: test’s power 檢定力其他選項:
type = c("two.sample", "one.sample", "paired")
alternative = c("two.sided", "less", "greater")
pwr.t.test(d=0.2, sig=0.05, power=0.80)
Two-sample t test power calculation
n = 393.41
d = 0.2
sig.level = 0.05
power = 0.8
alternative = two.sided
NOTE: n is number in *each* group
臨界效果設為0.2時,顯著水準0.05的雙邊t檢定需要394個樣本點才能得到80%的檢定力。
pwr.t.test(n=160, d=0.25, sig=0.01, alt="greater")
Two-sample t test power calculation
n = 160
d = 0.25
sig.level = 0.01
power = 0.46025
alternative = greater
NOTE: n is number in *each* group
臨界效果設為0.25時,用160個樣本點做顯著水準0.01的單邊t檢定只能得到46%的檢定力。 gd = data.frame(expand.grid(sig.level=seq(0.005,0.10,0.005),
power=seq(0.8,0.99,0.01) ))
plots = list()
for(i in 1:6) {
gd$n = apply(gd,1,function(g) pwr.t.test(d=i*0.2,sig=g[1],power=g[2])$n)
plots[[i]] = contourplot(n ~ sig.level*power,data=gd,col='green',cuts=10,lwd=2,
main=list(sprintf("Required Sample Size, d=%.2f",i*0.2),cex=0.85),
labels=list(cex=0.8,alpha=0.6,font=2,col='darkgreen'),
panel = function(...) { panel.levelplot(...)
panel.abline(v=c(0.005,0.01,0.05,0.1),
h=seq(0.5,1,0.05),col='gray',lty=3) } )
}
grid.arrange(plots[[1]],plots[[2]],plots[[3]],plots[[4]],
plots[[5]],plots[[6]],ncol=2)
ut = function(n,d,a,c,pay) {
b = 1 - pwr.t.test(n=n, d=d, sig=a)$power
sum(0.5*c(1-a, a, b, 1-b) * pay) - n * c
}
par(mar=c(4,4,4,2))
d=0.2; c=0.01; pay=c(20, -40, -30, 0); maxn=1000
A = c(0.1,0.05,0.01,0.005); AS=as.character(A)
x = seq(30,maxn,10)
plot(1, 1, col='white', type='l', xlab='Sample Size', ylab='$M',cex.main=1,
main="\nMax. Expexted Utility",xlim=c(0,maxn),ylim=c(-5,2.5))
abline(v=seq(0,maxn,100),h=seq(-20,20,1),col='lightgray',lty=3)
for(i in 1:length(A)) {
y = sapply(x, ut, d=d, a=A[i], c=c, pay=pay)
nx = x[which.max(y)]
pwr = pwr.t.test(nx,d,A[i])$power
AS[i] = sprintf("Sig.Level = %.3f, Power = %.3f, N = %d, Ut. = %.3f",
A[i],pwr,nx,max(y))
lines(x, y, col=i, lwd=2)
points(nx, max(y),col=i,pch=19) }
legend("bottomright",AS,lty=1,col=1:length(A),cex=0.8,lwd=2)