原文鏈接:http://blog.sina.com.cn/s/blog_5de124240101rcn1.html
卡方分析用於比較不同組之間的構成比,它的零假設是假定各組之間的構成是相同的,計算出理論每組的理論構成比,再計算理論值與實際值的差別,如果差別大的話,就拒絕零假設。它的擴展分析方法有Fisher精確分析,Ridit分析,CMH分析。與卡方分析有關的數據形式主要有四格表檢驗,無序RC表的卡方檢測,單向有序表的卡方檢驗,雙向有序表的卡方檢測。
卡方分佈是一種連續分佈,只有一個參數,即自由度ν,當自由度ν≤2時,卡方分佈的曲線呈L形,隨着ν的增加,曲線逐漸趨於對稱,當自由度無窮大時,接近於正態分佈
# 繪製此圖的R命令:
x <- c(seq(0,10,length = 1000)) #生成從0到10之間的1000個數字
y1 <- dchisq(x,1) # 生成對x的卡方密度值,自由度爲2
y6 <- dchisq(x,6) # 生成對x的卡方密度值,自由度爲3
y10 <- dchisq(x,10) # 生成對x的卡方密度值,自由度爲5
plot(x,y1,type = "l", ylim = c(0,0.5),xlim=c(0,15),xlab="", ylab="", lty = 1, main = expression(paste(chi^2,"Distribution")))
# type ="l"表示繪製線,如果是n則不繪線;lty=1表示繪製實線
lines(x,y6, type = "l", xlab = "", ylab = "", lty =2) # lty=2表示繪製虛線
lines(x,y10, type = "l", xlab = "", ylab = "", lty= 3) # lty=3表示繪製點線
text(locator(3), c(expression(chi^2*(1)),expression(chi^2*(6)),expression(chi^2*(10))))
# locator()讀取鼠標的座標,expression_r()用以添加數學公式
目錄:
- 普通四格表卡方檢驗
- 配對四格表卡方檢驗與Kappa檢驗
- Fisher精確檢驗
- 無序RC表檢驗
- 卡方分析的兩兩比較
- 單向有序RC表檢驗(Ridit分析)
- 雙向有序表的CMH檢驗
一、普通四格表卡方檢驗
卡方分佈是一種連續型分佈,而四格表資料是分類資料,屬離散型分佈,由此計算的卡方值的抽樣分佈也應當是不連續的,當樣本量較小時,兩者間的差異不可忽略,應進行連續性校正(在每個單元格的殘差中都減去0.5)。
若n > 40,此時有1< T <5時,需計算Yates連續性校正(Yates' correction)卡方值;將原始公式分子部分變爲(|Ai-Ti|-0.5)即可。在例7-1中,期望值沒有在1< T <5這個區間的,因此不用進行Yates連續性校正,需要在參數中設爲chisq.test(x,correct=F);但 例7-2中需要進行連續性校正,R中默認的有,不用設定。
例7-1:某醫院欲比較異梨醇口服液(試驗組)和氫氯噻嗪+地塞米松(對照組)降低顱內壓的療效。將200例顱內壓增高症患者隨機分爲兩組,結果見表7-1。問兩組降低顱內壓的總體有效率有無差別?(《醫學統計學》第三版,孫振球)
組別 |
有效 |
無效 |
試驗組 |
99 |
5 |
對照組 |
75 |
21 |
# 源代碼例7-1:
data71<-matrix(c(99,75,5,21),nr = 2,dimnames = list(c("試驗組", "對照組"),c("有效", "無效")))
data71
chi <- chisq.test(data71)
chi$expected # 顯示理論數
chisq.test(data71,correct=F) # correct = F表示不進行Yates連續性校正
# 運行結果
> data71<-matrix(c(99,75,5,21),nr = 2,dimnames = list(c("試驗組", "對照組"),c("有效", "無效")))
> data71
有效 無效
試驗組 99 5
對照組 75 21
> chi <- chisq.test(data71)
> chi$expected # 顯示理論數
有效 無效
試驗組 90.48 13.52
對照組 83.52 12.48
> chisq.test(data71,correct=F) # correct = F表示不進行Yates連續性校正
Pearson's Chi-squared test
data: data71
X-squared = 12.8571, df = 1, p-value = 0.0003362
例7-2 某醫師欲比較胞磷膽鹼與神經節苷酯治療腦血管疾病的療效,將78例腦血管疾病患者隨機分爲兩組,結果見表7-2。問兩種藥物治療腦血管疾病的有效率是否有差別?(四格表卡方分析,《醫學統計學》第三版,孫振球)
組別 |
有效 |
無效 |
胞磷膽鹼組 |
46 |
6 |
神經節苷脂組 |
18 |
8 |
# 源代碼例7-2:
data72<-matrix(c(46,18,6,8),nr = 2,dimnames = list(c("胞磷膽鹼組", "神經節苷脂組"),c("有效", "無效")))
data72
chisq.test(data72) # 其中有理論數是小於5的,需要進行Yates校正,R自帶這種校正
# 運行結果
> chisq.test(data72)
Pearson's Chi-squared test with Yates' continuity correction
data: data72
X-squared = 3.1448, df = 1, p-value = 0.07617
Warning message:
In chisq.test(compare_2) : Chi-squared approximation may be incorrect
> chisq.test(data72) # 查看理論數,裏面有值小於5的,所以需要Yates校正,但R中默認有這種校正
有效 無效
胞磷膽鹼組 42.66667 9.333333
神經節苷脂組 21.33333 4.666667
Warning message:
In chisq.test(data72) : Chi-squared approximation may be incorrect
二、配對四格表卡方檢驗與Kappa檢驗
配對四格表常用於兩種檢驗方法、培養方法、診斷方法的比較。特點是對樣本中各觀察單位分別用兩種方法處理,然後觀察兩種處理方法的某兩分量的計數結果。這種資料可以進行兩種分析,一種是分析A法和B法的陽性率是否有差異,另一種是分析A法和B法之間是否有關聯(association)。對於第一種目的,如果b+c>40,則用McNemar配對卡方檢驗;如果b+c<40,則用校正的配對卡方檢驗。對於第二種目的,可進行一致性檢驗,即 Kappa檢驗(Kappa test),這種檢驗是分析A法與B法在實現目的上,是否吻合。Kappa值的範圍在-1至+1之間,取值越大,說明吻合程度越高。Kappa≥0.75一致性好;0.75>Kappa ≥0.4一致性一般;Kappa<0.4一致性較差。
例7-3 某實驗室分別用乳膠凝集法和免疫熒光法對58名可疑係統紅斑狼瘡患者血清中抗核抗體進行測定,結果見表7-3。問兩種方法的檢測結果有無差別?(配對四格表的卡方分析,《醫學統計學》第三版,孫振球)
乳膠凝集法 |
||
免疫熒光法 |
+ |
- |
+ |
11 |
12 |
- |
2 |
33 |
對於配對的四格表有四種情況:(1)兩種檢測方法都爲陽性(a);(2)兩種方法都爲陰性(d);(3)免疫熒光法爲陽性,乳膠凝集法爲陰性(b);(4)乳膠凝集法爲陽性,免疫熒光法爲陰性數(c)。
# 源代碼 例7-3:
data73<-matrix(c(11,2,12,33),nr = 2,dimnames = list(c("+", "-"),c("+", "-")))
install.packages("epiR")
library(epiR) # 載入epiR包,使用其中的epi.kappa函數
mcnemar.test(data73) # 配對檢驗
epi.kappa(data73) # 一致性檢驗,即考察這兩個方法在檢驗方面是否吻合
# 運行結果
> mcnemar.test(data73)
McNemar's Chi-squared test with continuity correction
data: data73
McNemar's chi-squared = 5.7857, df = 1, p-value = 0.01616
> epi.kappa(data73)
$kappa
est se lower upper
1 0.4550336 0.1209499 0.2179761 0.6920911
$z
test.statistic p.value
1 3.762165 0.000168449
結果分析:McNemar配對卡方檢驗的p值爲0.01616,在0.05水平上,有顯著性差異,免疫熒光法的總體陽性檢出率要高於乳膠凝集法。
Kappa檢驗結果的p值小於0.01,估計值爲0.455,說明兩種方法的吻合度有統計學意義,但吻合度一般。
簡單來說,McNemar檢驗是比較兩種方法A與B對同一個對象的檢驗是否有差異,判斷哪種方法比較好,比較容易檢驗出來結果。而Kappa檢驗就是比較A與B這兩種方法檢驗出來的結果是不是一致的。在有些配對案例中可能會出現A的方法優於B,但A與B檢驗的結果不一致的情況。
三、精確Fisher檢驗
當四格表資料中出現n<40或T<1,或用一般公式計算出的Chi值所得到的概率與alpha接近時,需要用四格表資料的Fisher確切概率法,即對所有可能出現的情況進行排列組合,計算每一種情況的概率。
例7-4-某醫師爲研究乙肝免疫球蛋白預防胎兒宮內感染HBV的效果,將33例HBsAg陽性孕婦隨機分爲預防注射組和非預防組,結果見表7-4。問兩組新生兒的HBV總體感染率有無差別?(精確Fisher檢驗,《醫學統計學》第三版,孫振球)
組別 |
陰性 |
陽性 |
預防注射組 |
4 |
18 |
非預防組 |
5 |
6 |
# 源代碼 例7-4:
data74<-matrix(c(4,5,18,6),nr = 2,dimnames = list(c("預防注射組", "非預防組"),c("陽性", "陰性")))
chi<-chisq.test(data74)
chi$expected # 查看理論頻數
fisher.test(data74)
# 運行結果
> data74<-matrix(c(4,5,18,6),nr = 2,dimnames = list(c("預防注射組", "非預防組"),c("陽性", "陰性")))
> chi<-chisq.test(data74)
Warning message:
In chisq.test(data74) : Chi-squared approximation may be incorrect
> chi$expected # 查看理論頻數
陽性 陰性
預防注射組 6 16
非預防組 3 8
> fisher.test(data74)
Fisher's Exact Test for Count Data
data: data74
p-value = 0.121
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.03974151 1.76726409
sample estimates:
odds ratio
0.2791061
例7-5-某單位研究膽囊腺癌、腺瘤的P53基因表達,對同期手術切除的膽囊腺癌、腺瘤標本各10份,用免疫組化法檢測P53基因,資料見表7-6。問膽囊腺癌和膽囊腺瘤的P53基因表達陽性率有無差別?(精確Fisher檢驗,《醫學統計學》第三版,孫振球)
組別 |
陰性 |
陽性 |
膽囊腺癌 |
6 |
4 |
膽囊腺瘤 |
1 |
9 |
# 源代碼例7-5
data75<-matrix(c(6,1,4,9),nr = 2,dimnames = list(c("膽囊腺癌", "膽囊腺瘤"),c("陽性", "陰性")))
fisher.test(data75)
# 運行結果:
> fisher.test(data75)
Fisher's Exact Test for Count Data
data: compare_5
p-value = 0.05728
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.9487882 684.4235629
sample estimates:
odds ratio
11.6367
四、無序R×C列表的卡方檢驗
例7-6-某醫師研究物理療法、藥物治療和外用膏藥三種療法治療周圍性面神經麻痹的療效,資料見表7-8。問三種療法的有效率有無差別(RC都無序,《醫學統計學》第三版,孫振球)?
療法 |
有效 |
無效 |
物理療法 |
199 |
7 |
藥物治療組 |
164 |
18 |
外用膏藥組 |
118 |
26 |
# 源代碼:
data76<-matrix(c(199,164,118,7,18,26),nr = 3,dimnames = list(c("物理療法組", "藥物治療組","外用膏藥組"),c("有效", "無效")))
chi.result <- chisq.test(data76)
chi.result
chi.result$expected
# 運行結果:
> data76<-matrix(c(199,164,118,7,18,26),nr = 3,dimnames = list(c("物理療法組", "藥物治療組","外用膏藥組"),c("有效", "無效")))
> chi.result <- chisq.test(data76)
> chi.result
Pearson's Chi-squared test
data: data76
X-squared = 21.0377, df = 2, p-value = 2.702e-05
> chi.result$expected
有效 無效
物理療法組 186.2519 19.74812
藥物治療組 164.5526 17.44737
外用膏藥組 130.1955 13.80451
例7-7-某醫師在研究血管緊張素I轉化酶(ACE)基因I/D多態與2型糖尿病腎病(DN)的關係時,將249例2型糖尿病患者按有無糖尿病腎病分爲兩組,資料見表7-9,問兩組2型糖尿病患者的ACE基因型總體分佈有無差別(RC都無序,《醫學統計學》第三版,孫振球)?
組別 |
DD |
ID |
II |
DN組 |
42 |
48 |
21 |
無DN組 |
30 |
72 |
36 |
# 源代碼7-7:
data77 <- matrix(c(42,30,48,72,21,36),nrow=2,dimnames=list(c("DN組","無DN組"),c("DD","ID","II")))
chi.result77 <- chisq.test(data77)
chi.result77$expected
chi.result77
# 運行結果:
> data77 <- matrix(c(42,30,48,72,21,36),nrow=2,dimnames=list(c("DN組","無DN組"),c("DD","ID","II")))
> chi.result77 <- chisq.test(data77)
> chi.result77$expected
DD ID II
DN組 32.09639 53.49398 25.40964
無DN組 39.90361 66.50602 31.59036
> chi.result77
Pearson's Chi-squared test
data: data77
X-squared = 7.9127, df = 2, p-value = 0.01913
例7-8:測得某地5801人的ABO血型和MN血型結果如表7-10,問兩種血型系統之間是否有關聯?(RC都無序,《醫學統計學》第三版,孫振球)
ABO血型 |
MN血型 |
||
M |
N |
MN |
|
O |
431 |
490 |
902 |
A |
388 |
410 |
800 |
B |
495 |
587 |
950 |
AB |
137 |
179 |
32 |
# 源代碼例7-8:
data78 <- matrix(c(431,388,495,137,490,410,587,179,902,800,950,32),nrow=4,dimnames=list(c("O","A","B","AB"),c("M","N","MN")))
chi.result <- chisq.test(data78)
chi.result
sqrt(chi.result$statistic/(sum(data78)+chi.result$statistic)) # 列聯繫數
# 運行結果:
> data78 <- matrix(c(431,388,495,137,490,410,587,179,902,800,950,32),nrow=4,dimnames=list(c("O","A","B","AB"),c("M","N","MN")))
> chi.result <- chisq.test(data78)
> chi.result
Pearson's Chi-squared test
data: data78
X-squared = 213.1616, df = 6, p-value < 2.2e-16
> sqrt(chi.result$statistic/(sum(data78)+chi.result$statistic)) # 列聯繫數
X-squared
0.1882638
五、卡方分析的兩兩比較:在對多個樣本的構成比之間進行兩兩比較時,需要對檢驗水平進行校正。校正方法如下:
(1)多組間的兩兩比較:alpha'=alpha/N,N=n(n-1)/2 n爲參加檢驗的組數,alpha爲顯著性水平,如例7-9。
(2)多個實驗組與統一對照組的比較:alpha=alpha/(K-1),K爲實驗組與對照組的組數之和,如例7-10。
例7-9 對例7-6中的資料進行兩兩比較,以推斷是否任兩種療法治療周圍性面神經麻痹的有效率均有差別?
#源代碼7-9
data76<-matrix(c(199,164,118,7,18,26),nr = 3,dimnames = list(c("物理療法組", "藥物治療組","外用膏藥組"),c("有效", "無效")))
chisq.test(data76[1:2,],correct=F) #比較物理療法組與藥物治療組,R中默認四格表進行了Yates校正,此處設爲F,不進行校正
chisq.test(data76[2:3,], correct=F) #比較藥物治療組與外用膏藥組
chisq.test(data76[-2,],correct=F) # 比較物理療法組與外用膏藥組
> chisq.test(data76[1:2,],correct=F) #比較物理療法組與藥物治療組
Pearson's Chi-squared test
data: data76[1:2, ]
X-squared = 6.756, df = 1, p-value = 0.009343
> chisq.test(data76[2:3,], correct=F) #比較藥物治療組與外用膏藥組
Pearson's Chi-squared test
data: data76[2:3, ]
X-squared = 4.591, df = 1, p-value = 0.03214
> chisq.test(data76[-2,],correct=F) # 比較物理療法組與外用膏藥組
Pearson's Chi-squared test
data: data76[-2, ]
X-squared = 21.3228, df = 1, p-value = 3.881e-06
由上述結果可以看出,在0.0125顯著性水平上:此例中兩兩比較的次數爲4,0.05/4=0.125,因此可以說:
物理療法組與藥物治療組有差別
物治療組與外用膏藥組沒有差別
物理療法組與外用膏藥組有差別
例 7-10 以表7-8資料中的藥物治療組爲對照組,物理療法組與外用膏藥組爲試驗組,試分析兩試驗組與對照組的總體有效率有無差別?
# 源代碼7-10:
chisq.test(data76[1:2,],correct=F) #比較物理療法組與藥物治療組
chisq.test(data76[2:3,], correct=F) #比較藥物治療組與外用膏藥組
> chisq.test(data76[1:2,],correct=F) #比較物理療法組與藥物治療組
Pearson's Chi-squared test
data: data76[1:2, ]
X-squared = 6.756, df = 1, p-value = 0.009343
>
> chisq.test(data76[2:3,], correct=F) #比較藥物治療組與外用膏藥組
Pearson's Chi-squared test
data: data76[2:3, ]
X-squared = 4.591, df = 1, p-value = 0.03214
此例中有3組,另外兩組分別與藥物治療組比。2×(k-1)=2×(3-1)=4,0.05/4=0.125,雖然與上題的檢驗水平數值一樣,但計算的過程是不同的。
物理療法組與藥物治療組的p值爲0.009343<0.0125,有顯著性差異;外用膏藥組與藥物治療組相比,p值爲0.03214>0.0125,沒有顯著性差異。
六、單向有序RC表檢驗(Ridit分析)
Ridit分析全稱爲relative to an identified distribution unit,即按等級分佈的頻率轉化爲與某特定分佈相對應的單位進行分析。屬於半定量的分析方法,適合等級資料或數量分組不很確切的資料。常用於行有序或者是列有序的數據分析,屬於卡方分析的一種擴展。但從查到的文獻來看,這種分析方法,多數是中國人採用,國外採用的不多。
例6-1:比較三個藥物的療效,如下所示,在療效一列中,治癒,顯效,好轉,無效這些療效都是有順序的,而藥物A、B、C則是無序的,可以用Ridit分析。
療效 |
藥物 |
||
A |
B |
C |
|
治癒 |
17 |
5 |
3 |
顯效 |
51 |
11 |
17 |
好轉 |
33 |
52 |
47 |
無效 |
7 |
24 |
26 |
if(!require("Ridit"){
install.packages("Ridit")
library(Ridit)
} # 載入Ridit包
data1 <- c(17,51,33,7,5,11,52,24,3,17,47,26)
data1 <- matrix(data1,nrow=4,dimnames=list(c("治癒","顯效","好轉","無效"),c("A","B","C")))
ridit(data1,2)
# 參數2表示data1的分組信息在列,即藥物A,藥物B,藥物C,有序的是行,即治癒,顯效,好轉,無效
# 運行結果:
> ridit(data1,2)
Ridit Analysis:
Group Label Mean Ridit
----- ----- ----------
1 A 0.3465
2 B 0.5921
3 C 0.5872
Reference: Total of all groups
chi-squared = 54.7507, df = 2, p-value = 1.291e-12
分析結果:卡方值爲54.7507,p值小於0.01,表示藥物的療效不同,MeanRidit的意思爲數值越大,療效越差。但這個結果沒有給出兩兩之間的比較。有人有SPSS進行Ridit分析,在進行兩兩比較的時候,是將Ridit轉化爲ANOVA進行比較。
例子6-2:甲中藥與乙中藥療效的表格(來自於百度文庫的課件)。
組別 |
無效 |
好轉 |
顯效 |
控制 |
甲中藥 |
800 |
1920 |
680 |
60 |
乙中藥 |
10 |
60 |
26 |
18 |
# 源代碼6-2:
data2 <- c(800,10,1920,60,680,26,60,18)
data2 <- matrix(data2, nrow=2,dimnames=list(c("甲中藥","乙中藥"),c("無效","好轉","顯效","控制")));data2
ridit(data2,1)
# 運行結果:
> data2 <- matrix(data2, nrow=2,dimnames=list(c("甲中藥","乙中藥"),c("無效","好轉","顯效","控制")));data2
無效 好轉 顯效 控制
甲中藥 800 1920 680 60
乙中藥 10 60 26 18
> ridit(data2,1)
Ridit Analysis:
Group Label Mean Ridit
----- ----- ----------
1 甲中藥 0.4957
2 乙中藥 0.6318
Reference: Total of all groups
chi-squared = 30.2509, df = 1, p-value = 3.796e-08
例6-3:用中藥複方治療3330支氣管炎病人,同時考察了另一種中藥製劑治療94例病人。結果如下
組別 |
處方1 |
處方2 |
處方3 |
處方4 |
痊癒 |
45 |
11 |
11 |
4 |
顯著好轉 |
38 |
24 |
8 |
8 |
好轉 |
51 |
34 |
16 |
25 |
無效 |
38 |
31 |
18 |
25 |
data3 <- c(45,38,51,38,11,24,34,31,11,8,16,18,4,8,25,25)
data3 <- matrix(data3, nrow=4,dimnames=list(c("痊癒","顯著好轉","好轉","無效"),c("處方1","處方2","處方3","處方4")));data3
ridit(data3,2)
> data3 <- matrix(data3, nrow=4,dimnames=list(c("痊癒","顯著好轉","好轉","無效"),c("處方1","處方2","處方3","處方4")));data3
處方1 處方2 處方3 處方4
痊癒 45 11 11 4
顯著好轉 38 24 8 8
好轉 51 34 16 25
無效 38 31 18 25
> ridit(data3,2)
Ridit Analysis:
Group Label Mean Ridit
----- ----- ----------
1 處方1 0.4382
2 處方2 0.5297
3 處方3 0.5178
4 處方4 0.6084
Reference: Total of all groups
chi-squared = 19.243, df = 3, p-value = 0.0002435
七、雙向有序表的CMH檢驗
RC有序表並不適合用卡方分析,如果列或行有序,則無論怎麼調換順序,得到的卡方值是一樣的。因此在面臨行或列有序分析的時候通常採用Ridit分析;在面臨行與列都有序的時候則需要CMH(Cochran-Mantel-Haenszel)分析方法,例如研究年齡與冠狀動脈硬化之間的關係等。《醫學統計學》(第三版,孫振球)中沒有提到RC有序表中的統計方法,只是把算法列了出來,查過之後,發現比較符合CMH檢驗。CMH檢驗在新藥中多用於多中心試驗的檢驗。在書中,只用到了它對於兩個有序變量的線性相關分析。在R中可以使用vcdExtra包中的CMHtest函數進行這種分析。
CMHtest的參數如下:
CMHtest(x, strata = NULL,rscores = 1:R, cscores = 1:C,types = c("cor", "cmeans", "rmeans", "general"), overall=FALSE, details=overall, ...)
x:兩列或兩列以上的列聯表,數據爲數組(array)或表(table),可以用分類標籤標註行與列。
formula:用於指定數據列聯表中變量的公式。可以單邊公式(array數據),也可以是雙邊公式(data.frame)。可以爲分層數據指定一個條件公式。
data:數據框,或table,或ftable。
strata:三維或高維表,其名稱與因子的數目可以作爲一個分層依據。默認情況下,前兩個因子作爲主要的表變量,其它的視爲分層因子。
rscores:行得分。可以爲一組數字(通常是1:R),或者是用字符串"midrank"來進行標準中秩得分,設置爲NULL則對行不進行得分統計。
cscores :同rscores.
types:CMH的計算數據:一個或多個c("cor", "cmeans", "rmeans", "general")檢驗,或者用"ALL"指全部檢驗。
例7-11 某研究者欲研究年齡與冠狀動脈粥樣硬化等級之間的關係,將278例尸解資料整理成表7-13,問年齡與冠狀動脈粥樣硬化等級之間是否存在線性變化趨勢?
表7-13 年齡與冠狀動脈硬化的關係 |
|||||
年齡(歲) (X) |
冠狀動脈硬化等級(Y) |
合計 |
|||
— |
+ |
++ |
+++ |
||
20~ |
70 |
22 |
4 |
2 |
98 |
30~ |
27 |
24 |
9 |
3 |
63 |
40~ |
16 |
23 |
13 |
7 |
59 |
≥50 |
9 |
20 |
15 |
14 |
58 |
合計 |
122 |
89 |
41 |
26 |
278 |
# 源代碼
if(!require("vcdExtra "){
install.packages("vcdExtra ")
library(vcdExtra)
} # 載入vcdExtra包
data711 <- matrix(c(70,27,16,9,22,24,23,20,4,9,13,15,2,3,7,14),nrow=4)
dimnames(data711) <- list(age=c("20~","30~","40~","≥50"),degree=c("-","+","++","+++"))
CMHtest(data711) # 分析數據
# 運行結果
> CMHtest(data711)
Cochran-Mantel-Haenszel Statistics for age by degree
|
AltHypothesis |
Chisq |
Df |
Pro |
Cor |
Nonzero correlation |
63.389 |
1 |
1.6962e-15 |
Cmeans |
Col mean scores differ |
63.450 |
3 |
1.0758e-13 |
Rmeans |
Row mean scores differ |
65.669 |
3 |
3.6072e-14 |
general |
General association |
71.176 |
9 |
8.9519e-12 |
> chisq.test(data711)
Pearson's Chi-squared test
data: data711
X-squared = 71.4325, df = 9, p-value = 7.97e-12
注:卡方檢驗的結果值爲71.4325,表明年齡與冠狀動脈粥樣硬化之間有關係。CMH檢驗的結果中有三項,主要是看Nonzero correlation這一項,它表示,列與行有序的時候,數據的檢驗結果,它的H0是年齡與冠狀動脈粥樣硬化之間沒有線性關係,它的p值小於0.01,因此可以判斷年齡與冠狀動脈粥樣硬化等級之間還存在線線性趨勢。
八、擬合優度與卡方檢驗
例7-12 觀察某克山病患者的空間分佈情況,調查者將該地區劃分爲279個取樣單位,統計各取樣單位歷年累計病例數,問是否服從Poisson分佈
# 源代碼:
x<-0:6
y<-c(26,51,75,63,38,17,9)
mean<-mean(rep(x,y))
q<-ppois(x,mean)
n<-length(y)
p<-c()
p[1]<-q[1]
p[n]<-1-q[n-1]
for(i in 2:(n-1))
p[i]<-q[i]-q[i-1]
chisq.test(y, p=p,correct=F)
# 運行結果:
> chisq.test(y, p=p,correct=F)
Chi-squared test for given probabilities
data: y
X-squared = 2.0569, df = 6, p-value = 0.9144