R中的假设检验(四)卡方检验
最近幾天沒碰編程,渾身難受,日子過的渾渾噩噩,還是得每天接觸下編程。相較于核磁分析,我感覺統計建模更對我的胃口。今天寫卡方檢驗(χ2檢驗,chi-square test)。
醫學中最最常見的就是四格表的卡方檢驗,spss教材上計算四格表資料的卡方檢驗結果值有:Pearson chi-square 、Continuity correction 、Likelihood ratio 、 Fisher’s exact test 、 Linear-by-Linear association 。步驟就不講了,spss上實現卡方檢驗太簡單了。
在spss里這些結果的選擇條件:(1)Pearson chi-square檢驗 :用于 n≥40 且Trc≥5 (2)Yates檢驗(即Continuity correction檢驗,連續校正檢驗):用于n≥40 且5≥Trc≥1 (3)Fisher exact檢驗:用于n<40,或者Trc<1。
n代表樣本量,Trc代表四格表中的任意一格的頻數。
今天介紹的有所不一樣。今天學習四個函數:prop.test、binom.test、chisq.test、fisher.test。
比例檢驗 prop.test()
prop就是 proportion 比例。
prop.test(觀測值,樣本總量,檢驗的比率)
完整函數格式:prop.test(x, n, p = NULL,alternative = c(“two.sided”, “less”, “greater”),conf.level = 0.95, correct = TRUE)
單樣本的比例檢驗
代碼:prop.test(42,356,.35) #p-value<0.01
上面代碼的意思是:假設1個小區有356個患有冠心病的病人,其中有42名患者抽煙,某人提出假說患有冠心病的人吸煙的概率是0.35,然后對這個進行檢驗。這個臨床試驗中用的很少,簡單介紹跳過。這個函數在醫學臨床上用的不多。
兩個獨立樣本的比例
代碼:> lewitt.machin.success <- c(9,4) #每組觀測值
> lewitt.machin.total <- c(12,13) #每組總數
> prop.test( lewitt.machin.success,lewitt.machin.total ) #p-value=0.07
可以看出,用prop.test計算的時候,里面是向量。實際上這個的理論方法簡單來說就是假設兩個樣本比例的差值,兩個樣本的計數,都服從同一個參數p的二項分布。根據上面代碼同理可推,若有3組,4組,或更多,只需要把相應的值寫入向量就好了。例如lewitt.machin.total <- c( 12,13,14,15)。若設置correct=F,那就是不使用Yates連續校正。
擬合優度檢驗 chisq.test(),全名chi-square test,即卡方χ2檢驗
這個是醫學臨床上最常用的檢驗方法,就是spss上介紹的χ2檢驗。
完整函數格式:chisq.test(x, y = NULL, correct = TRUE, p = rep(1/length(x), length(x)), rescale.p = FALSE, simulate.p.value = FALSE, B = 2000)
chisq.test(表格)
舉例:
| 急性期 | 69 | 37 |
| 慢性期 | 30 | 46 |
首先構造表格數據:> mymatrix <- matrix(c(69,37,30,46),2,by=c)
>chisq.test(mymatirx,correct = F)#11.713,p-value=0.000,不進行校正
>chisq.test(mymatrix) #10.703,p-value=0.001,默認有連續校正
這個函數是最常用的,但是與spss不一樣的是,它需要輸入表格樣式,可以是矩陣或數據框。spss示例中的是變量樣式,包含療效,分期,頻數。這中間如何互相轉化,我得研究研究,這里先擺出來常用的方式。
值得注意的是:用prop.test()和chisq.test()算出來的結果是一樣的。
如下:> effect <- c(69,30)
> total <- c(106,76)
> prop.test ( effect , total ) #x-squared=10.703,p-value=0.001
同理, prop.test ( effect , total ,correct = F) #不較正,11.713,0.000
所以在這里的話,我個人是覺得prop.test比chisq.test好用的,原因是:第一它顯示的細節比chisq更多,比如它會顯示比例之差的95%的置信區間;第二它的構造很方便,用的是向量,比矩陣和數據框方便些,可以快速計算出模型結果。
這里先介紹個基礎知識,一般認為小樣本情況,屬于超幾何分布;大樣本情況,屬于二項分布及近似正態分布。
二項分布與超幾何分布的區別:(1) 超幾何分布需要知道總體的容量,而二項分布不需要(2) 超幾何分布是不放回抽取,它描述了從有限個物件中抽出n個物件,成功抽出指定種類的物件的次數(不歸還)。(3)二項分布是放回抽取(獨立重復)。即重復n次獨立的伯努利試驗。在每次試驗中只有兩種可能的結果,而且兩種結果發生與否互相對立,并且相互獨立,與其它各次試驗結果無關,事件發生與否的概率在每一次獨立試驗中都保持不變,則這一系列試驗總稱為n重伯努利實驗,當試驗次數為1時,二項分布就是伯努利分布(4)當總體的容量非常大時,超幾何分布近似于二項分布。
binom.test(),又稱符號檢驗,binomial 檢驗,二項分布檢驗。
binomial 二項分布,原理:如果兩個配對樣本實際沒有差別,則樣本數據相減所得的差值應當大致一半為正一半為負。
binom.test(觀測值,樣本總量,檢驗的比率)
完整函數格式:binom.test(x, n, p = 0.5 , alternative = c(“two.sided”, “less”, “greater”) , conf.level = 0.95)
零假設:觀測值的分布=檢驗的比率。
這個函數是對分布的概率值進行檢驗,因此不像prop函數應用那么廣泛,在醫學臨床研究中也用的不多。binom.test并不能進行向量計算,所以不能用于兩個及以上獨立樣本。它只是用來檢測概率值的p值,這個概率值在一般情況下是0.5,它使用的時候稍微注意下是單側檢驗還是雙側檢驗。
fisher.test(),又稱 Fisher精確檢驗
fisher.test(表格) #同chisq.test,輸入四格表
完整的函數格式:fisher.test(x, y = NULL, workspace = 200000, hybrid = FALSE, hybridPars = c(expect = 5, percent = 80, Emin = 1),control = list(), or = 1, alternative = “two.sided”,conf.int = TRUE, conf.level = 0.95, simulate.p.value = FALSE, B = 2000)
因為它需要某一格小于5,在臨床統計上用處很小。
其他的還有配對卡方檢驗 McNemar檢驗,和kappa一致性檢驗。今天不講了,因為我是搞臨床研究的,臨床基本沒有配對的涉及。等以后我去養老鼠了,再來一次性更新完跟配對樣本有關的參數和非參數檢驗。
補充一句吧,就如果是excel上整理好的表格數據,不論是2x2還是RxC,按表格的形式整理導入后,就可以直接用 chisq.test()和 fisher.test(),因為這樣很方便。前者就不說了,后者就是因為某個頻率太小,所以就假定數據是超幾何分布,這樣就可以記住他們倆的適用范圍,以5為準。
總結
以上是生活随笔為你收集整理的R中的假设检验(四)卡方检验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Node.js_exports和modu
- 下一篇: Object类型转数组