R語言-選擇樣本數量


功效分析:可以幫助在給定置信度的情況下,判斷檢測到給定效應值時所需的樣本量,也可以在給定置信水平的情況下,計算某樣本量內可以檢測到的給定效應值的概率

1.t檢驗

  案例:使用手機和司機反應時間的實驗

1 library(pwr)
2 # n表示樣本大小
3 # d表示標准化均值之差
4 # sig.level表示顯著性水平
5 # power為功效水平
6 # type指的是檢驗類型
7 # alternative指的是雙側檢驗還是單側檢驗
8 pwr.t.test(d=.8,sig.level = .05,power = .9,type = 'two.sample',alternative = 'two.sided')

  結論:每組需要34個樣本(68)人才能保證有90%的把握檢測到0.8效應值,並且最多5%會存在誤差

2.方差分析

  案例:對5組數據做方差分析,達到0.8的功效,效應值為0.25,選擇0.5的顯著水平.計算總體樣本的大小

# k表示組的個數
# f表示效應值
pwr.anova.test(k=5,f=.25,sig.level = .05,power = .8)

  結論:需要39*5,195受試者參與實驗才能得出以上結果

3.相關性

  案例:抑郁症和孤獨的關系,零假設和研究假設為

     H0:p<=0.25和H1:p>0.25

    設定顯著水平為0.05,耳光拒絕零假設,希望有90%的信息拒絕H0,需要多少測試者

1 # r表示效應值
2 pwr.r.test(r=.25,sig.level = .05,power = .90,alternative = 'greater')

  結論:需要134名受試者參與實驗

4.線性模型

  案例:老板的領導風格對員工滿意度的影響,薪水和小費能解釋30%員工滿意度方差,領導風格能解釋35%的方差,

      要達到90%置信度下,顯著水平為0.05,需要多少受試者才能達到方差貢獻率

  f2 = (0.35-0.3)/(1-0.35)=0.0769

1 # u表示分子自由度
2 # v表示分母自由度
3 # f2表示效應值
4 pwr.f2.test(u=3,f2=0.0769,sig.level = .05,power = .90)

  結論:v=總體樣本-預測變量-1,所以N=v+7+1=187+7+1=193

5.比例檢驗

  案例:某種葯物有60%的治愈率,新葯有65%的治愈率,現在有多少受試者才能體會到兩種葯物的差異

1 pwr.2p.test(h=ES.h(.65,.6),sig.level = .05,power = .9,alternative = 'greater')

  結論:本案例中使用單邊檢驗,得出需要1605名受試者才能得出兩種葯品的區別

6.卡方檢驗

  卡方檢驗用來評價兩個變量之間的關系,零假設是變量之間獨立,拒絕零假設是變量不獨立

  案例:研究晉升和種族的關系:樣本中70%是白人,10%黑人,20%西班牙裔,相比20%的黑人和50%的西班牙裔,60%的白人更容易獲得晉升

1 prob <- matrix(c(.42,.28,.03,.07,.10,.10),byrow = T,nrow = 3)
2 # 計算雙因素列連表中的備擇假設的效應值
3 ES.w2(prob)
4 # w是效應值,
5 # df是自由度
6 pwr.chisq.test(w=0.1853198,df=2,sig.level = .05,power = .90)

  結論:該實驗需要369名測試者才能證明晉升和種族存在關聯

7.在新的情況下選擇合適的效應值

  7.1單因素

 1 es <- seq(.1,.5,.01)
 2 nes <- length(es)
 3 samsize <- NULL
 4 for(i in 1:nes){
 5   result <- pwr.anova.test(k=5,f=es[i],sig.level = .05,power = .90)
 6   samsize[i] <- ceiling(result$n)
 7 }
 8 plot(samsize,es,type='l',lwd='2',col='red',
 9      ylab = 'Effect Size',
10      xlab = 'Sample Szie',
11      main = 'One way Anova with power=.90 and alpha=.05')

  結論:贗本數量高於200時,在增加樣本是效果不明顯

  7.2 繪制功效分析圖

 1 # 1.生成一系列相關系數和功效值
 2 r <- seq(.1,.5,.01)
 3 nr <- length(r)
 4 
 5 p <- seq(.4,.9,.1)
 6 np <- length(p)
 7 
 8 # 2.獲取樣本大小
 9 samsize <- array(numeric(nr*np),dim = c(nr,np))
10 
11 for(i in 1:np){
12   for(j in 1:nr){
13     result <- pwr.r.test(n=NULL,r=r[j],sig.level = .05,power = p[i],alternative = 'two.sided')
14     samsize[j,i] <- ceiling(result$n)
15   }
16 }
17 
18 # 3.創建圖形
19 xrange <- range(r)
20 yrange <- round(range(samsize))
21 colors <- rainbow(length(p))
22 plot(xrange,yrange,type='n',
23      xlab = 'Corrlation Coefficient',
24      ylab = 'Sample Size')
25 # 4.添加功效曲線
26 for(i in 1:np){
27   lines(r,samsize[,i],type='l',lwd=2,col=colors[i])
28 }
29 # 5.網格線
30 abline(v=0,h=seq(0,yrange[2],50),lty=2,col='grey89')
31 abline(h=0,v=seq(xrange[1],xrange[2],.02),lty=2,col='grey89')
32 # 6.標題和注釋
33 title('Sample Size Estimation for Corrlation\nSig=0.05')
34 legend('topright',title = 'Power',as.character(p),fill=colors)

 

   結論:在40%的置信度下,要檢測到0.2的相關性需要約75個樣本,在90%的置信度下,要檢測到相同的相關性需要大約260個樣本

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM