本文首發(fā)于公眾號:醫(yī)學(xué)和生信筆記
醫(yī)學(xué)和生信筆記,專注R語言在臨床醫(yī)學(xué)中的使用确虱,R語言數(shù)據(jù)分析和可視化。主要分享R語言做醫(yī)學(xué)統(tǒng)計學(xué)替裆、meta分析校辩、網(wǎng)絡(luò)藥理學(xué)窘问、臨床預(yù)測模型、機(jī)器學(xué)習(xí)宜咒、生物信息學(xué)等惠赫。
卡方檢驗/列聯(lián)表資料的卡方檢驗在臨床中非常常見!
因為最近又有一批臨床數(shù)據(jù)要進(jìn)行統(tǒng)計故黑,所以趁機(jī)把卡方檢驗的R語言實現(xiàn)再重新梳理一遍儿咱。
這篇文章涵蓋了孫振球,徐勇勇《醫(yī)學(xué)統(tǒng)計學(xué)》第4版 卡方檢驗章節(jié) 中的 所有內(nèi)容场晶。課本電子版和配套數(shù)據(jù)已上傳到QQ群混埠,需要的朋友加群下載即可。
不同類型卡方檢驗的選擇四格表資料的卡方檢驗方法1方法2配對四格表資料的卡方檢驗四格表資料的 Fisher 確切概率法行 x 列表資料的卡方檢驗多個樣本率的比較樣本構(gòu)成比的比較雙向無序分類資料的關(guān)聯(lián)性檢驗雙向有序分組資料的線性趨勢檢驗多個樣本率間的多重比較Cochran-Mantel-Haenszel 卡方統(tǒng)計量檢驗頻數(shù)分布擬合優(yōu)度卡方檢驗
不同類型卡方檢驗的選擇
課本中關(guān)于四格表資料的卡方檢驗的方法選擇以及R x C表資料的檢驗方法選擇做了非常好的總結(jié)峰搪,在這里一并和大家分享一下:
四格表資料的方法選擇:
- 當(dāng) n(樣本量)≥40 且所有的T(期望頻數(shù))≥5時岔冀,用χ2檢驗的基本公式或四格表資料之χ2檢驗的專用公式;當(dāng)P ≈ α?xí)r概耻,改用四格表資料的 Fisher 確切概率法使套;
- 當(dāng) n≥40 但有 1≤T<5 時,用四格表資料χ2檢驗的校正公式鞠柄,或改用四格表資料的 Fisher 確切概率法侦高。
- 當(dāng) n<40,或 T<1時厌杜,用四格表資料的 Fisher 確切概率法奉呛。
R×C表資料的分類及其檢驗方法的選擇:
R×C表資料可以分為雙向無序、單向有序夯尽、雙向有序?qū)傩韵嗤碗p向有序?qū)傩圆煌?類瞧壮。
- 雙向無序R×C表資料 R×C表資料中兩個分類變量皆為無序分類變量對于該類資料,若研究目的為多個樣本率(或構(gòu)成比)的比較匙握,可用行×列表資料的χ2檢驗:若研究目的為分析兩個分類變量之間有無關(guān)聯(lián)性以及關(guān)系的密切程度時泳秀,可用行×列表資料的χ2檢驗以及Pearson列聯(lián)系數(shù)進(jìn)行分析押框。
-
單向有序R×C表資料 有兩種形式凉翻。一種是R×C表資料中的分組變量(如年齡)是有序的默赂,而指標(biāo)變量(如傳染病的類型)是無序的。其研究目的通常是分析不同年齡組各種傳染病的構(gòu)成情況蛾娶,此種單向有序R×C表資料可用行×列表資料的χ2檢驗進(jìn)行分析灯谣。另一種情況是R×C表資料中的分組變量
(如療法)為無序的,而指標(biāo)變量(如療效按等級分組)是有序的蛔琅。其研究目的為比較不同療法的療效胎许,此種單向有序R×C表資料宜用秩轉(zhuǎn)換的非參數(shù)檢驗進(jìn)行分析。 -
雙向有序?qū)傩韵嗤腞×C表資料 R×C表資料中的兩個分類變量皆為有序且屬性相同。實際上是配對四格表資料的擴(kuò)展呐萨,即水平數(shù)≥3的配伍資料杀饵,如用兩種檢測方法同時對同一批樣品的測定結(jié)果。其研究目的通常是分析兩種檢測方法的一致性谬擦,此時宜用一致性檢驗或稱Kappa檢驗切距;也可用特殊模型分
析方法(可用SAS軟件)。 - 雙向有序?qū)傩圆煌腞×C表資料 R×C表資料中兩個分類變量皆為有序的惨远,但屬性不同谜悟。對于該類資料,若研究目的為分析不同年齡組患者療效之間有無差別時北秽,可把它視為單向有序R×C表資料葡幸,選用秩轉(zhuǎn)換的非參數(shù)檢驗;若研究目的為分析兩個有序分類變量間是否存在相關(guān)關(guān)系贺氓,宜用等級相關(guān)分析:若研究目的為分析兩個有序分類變量間是否存在線性變化趨勢蔚叨,宜用前述的雙向有序分組資料的線性趨勢檢驗(test for linear trend)。
四格表資料的卡方檢驗
使用課本例7-1的數(shù)據(jù)辙培。
首先是構(gòu)造數(shù)據(jù)蔑水,本次數(shù)據(jù)自己從書上摘錄。扬蕊。
ID<-seq(1,200)
treat<-c(rep("treated",104),rep("placebo",96))
treat<- factor(treat)
impro<-c(rep("marked",99),rep("none",5),rep("marked",75),rep("none",21))
impro<-as.factor(impro)
data1<-data.frame(ID,treat,impro)
str(data1)
## 'data.frame': 200 obs. of 3 variables:
## $ ID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ treat: Factor w/ 2 levels "placebo","treated": 2 2 2 2 2 2 2 2 2 2 ...
## $ impro: Factor w/ 2 levels "marked","none": 1 1 1 1 1 1 1 1 1 1 ...
數(shù)據(jù)一共3列搀别,第一列是id,第二列是治療方法尾抑,第三列是等級(有效和無效)歇父。
簡單看下各組情況:
table(data1$treat,data1$impro)
##
## marked none
## placebo 75 21
## treated 99 5
做卡方檢驗有2種方法,分別演示:
方法1
直接使用 gmodels
包里面的 CrossTable()
函數(shù)再愈,非常強(qiáng)大榜苫,直接給出所有結(jié)果,和SPSS差不多翎冲。
library(gmodels)
CrossTable(data1$treat, data1$impro, digits = 4, expected = T, chisq = T, fisher = T, mcnemar = T, format = "SPSS")
##
## Cell Contents
## |-------------------------|
## | Count |
## | Expected Values |
## | Chi-square contribution |
## | Row Percent |
## | Column Percent |
## | Total Percent |
## |-------------------------|
##
## Total Observations in Table: 200
##
## | data1$impro
## data1$treat | marked | none | Row Total |
## -------------|-----------|-----------|-----------|
## placebo | 75 | 21 | 96 |
## | 83.5200 | 12.4800 | |
## | 0.8691 | 5.8165 | |
## | 78.1250% | 21.8750% | 48.0000% |
## | 43.1034% | 80.7692% | |
## | 37.5000% | 10.5000% | |
## -------------|-----------|-----------|-----------|
## treated | 99 | 5 | 104 |
## | 90.4800 | 13.5200 | |
## | 0.8023 | 5.3691 | |
## | 95.1923% | 4.8077% | 52.0000% |
## | 56.8966% | 19.2308% | |
## | 49.5000% | 2.5000% | |
## -------------|-----------|-----------|-----------|
## Column Total | 174 | 26 | 200 |
## | 87.0000% | 13.0000% | |
## -------------|-----------|-----------|-----------|
##
##
## Statistics for All Table Factors
##
##
## Pearson's Chi-squared test
## ------------------------------------------------------------
## Chi^2 = 12.85707 d.f. = 1 p = 0.0003362066
##
## Pearson's Chi-squared test with Yates' continuity correction
## ------------------------------------------------------------
## Chi^2 = 11.3923 d.f. = 1 p = 0.0007374901
##
##
## McNemar's Chi-squared test
## ------------------------------------------------------------
## Chi^2 = 50.7 d.f. = 1 p = 1.076196e-12
##
## McNemar's Chi-squared test with continuity correction
## ------------------------------------------------------------
## Chi^2 = 49.40833 d.f. = 1 p = 2.078608e-12
##
##
## Fisher's Exact Test for Count Data
## ------------------------------------------------------------
## Sample estimate odds ratio: 0.1818332
##
## Alternative hypothesis: true odds ratio is not equal to 1
## p = 0.0005286933
## 95% confidence interval: 0.05117986 0.5256375
##
## Alternative hypothesis: true odds ratio is less than 1
## p = 0.0002823226
## 95% confidence interval: 0 0.4569031
##
## Alternative hypothesis: true odds ratio is greater than 1
## p = 0.9999541
## 95% confidence interval: 0.06281418 Inf
##
##
##
## Minimum expected frequency: 12.48
可以看到這個函數(shù)直接給出所有結(jié)果单刁,根據(jù)需要自己選擇合適的即可。
本例符合pearson卡方府适,卡方值為12.85707,p<0.01肺樟,和課本一致檐春。
方法2
先把數(shù)據(jù)變成2x2列聯(lián)表,然后用 chisq.test
函數(shù)做.
mytable <- table(data1$treat,data1$impro)
mytable
##
## marked none
## placebo 75 21
## treated 99 5
chisq.test(mytable,correct = F) # 和SPSS一樣
##
## Pearson's Chi-squared test
##
## data: mytable
## X-squared = 12.857, df = 1, p-value = 0.0003362
這個結(jié)果和課本也是一致的么伯,和SPSS算出來的也是一樣的疟暖。
四格表資料卡方檢驗的專用公式/四格表資料卡方檢驗的校正公式/配對四格表資料的卡方檢驗/四格表資料的Fisher精確概率法,都可以用方法1可直接解決。
下面使用R語言自帶的chisq.test()
函數(shù)進(jìn)行演示俐巴。
使用課本例7-2的數(shù)據(jù)骨望,這是一個連續(xù)校正卡方檢驗。
per <- matrix(c(46,6,18,8),
nrow = 2, byrow = T,
dimnames = list(group = c("胞磷膽堿","神經(jīng)節(jié)苷脂"),
effect = c("有效","無效")
)
)
per
## effect
## group 有效 無效
## 胞磷膽堿 46 6
## 神經(jīng)節(jié)苷脂 18 8
進(jìn)行連續(xù)校正的卡方檢驗:
chisq.test(per, correct = T)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: per
## X-squared = 3.1448, df = 1, p-value = 0.07617
配對四格表資料的卡方檢驗
使用課本例7-3的數(shù)據(jù)欣舵。
ana <- matrix(c(11,12,2,33), nrow = 2, byrow = T,
dimnames = list(免疫熒光 = c("陽性","陰性"),
乳膠凝集 = c("陽性","陰性")
)
)
ana
## 乳膠凝集
## 免疫熒光 陽性 陰性
## 陽性 11 12
## 陰性 2 33
配對四個表資料需要用McNemar檢驗:
mcnemar.test(ana, correct = T)
##
## McNemar's Chi-squared test with continuity correction
##
## data: ana
## McNemar's chi-squared = 5.7857, df = 1, p-value = 0.01616
四格表資料的 Fisher 確切概率法
使用課本例7-4的數(shù)據(jù)擎鸠。
hbv <- matrix(c(4,18,5,6), nrow = 2, byrow = T,
dimnames = list(組別 = c("預(yù)防注射組","非預(yù)防組"),
效果 = c("陽性","陰性")
)
)
hbv
## 效果
## 組別 陽性 陰性
## 預(yù)防注射組 4 18
## 非預(yù)防組 5 6
進(jìn)行 Fisher 檢驗:
fisher.test(hbv)
##
## Fisher's Exact Test for Count Data
##
## data: hbv
## 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
P值為0.121,和課本一樣缘圈。
行 x 列表資料的卡方檢驗
行 x 列表資料的卡方檢驗有很多種情況劣光,不是所有的列聯(lián)表資料都可以直接用卡方檢驗,大家要注意甄別糟把!方法選擇可以參考本篇開頭部分绢涡。
多個樣本率的比較
使用課本例7-6的數(shù)據(jù)。
首先是構(gòu)造數(shù)據(jù)遣疯,本次數(shù)據(jù)直接讀取雄可,也可以自己手動摘錄。
df <- foreign::read.spss("./例07-06物理藥物外用膏用.sav", to.data.frame = T,reencode = "utf-8")
## re-encoding from utf-8
str(df)
## 'data.frame': 6 obs. of 3 variables:
## $ .?.: Factor w/ 3 levels ".....?...","?........",..: 1 1 2 2 3 3
## $ ..Ч: Factor w/ 2 levels "..Ч","..Ч_duplicated_2": 1 2 1 2 1 2
## $ f : num 199 7 164 18 118 26
## - attr(*, "variable.labels")= Named chr(0)
## ..- attr(*, "names")= chr(0)
數(shù)據(jù)一共3列缠犀,第1列是療法数苫,第2列是有效無效,第3列是頻數(shù).
進(jìn)行 行 x 列表資料的卡方檢驗夭坪,首先要對數(shù)據(jù)格式轉(zhuǎn)換一下文判,變成 table
或者 矩陣
:
M <- matrix(df$f,nrow = 3,byrow = T,
dimnames = list(trt = c("物理", "藥物", "外用"),
effect = c("有效","無效")))
M
## effect
## trt 有效 無效
## 物理 199 7
## 藥物 164 18
## 外用 118 26
這里教大家一個可視化列聯(lián)表資料非常好用的馬賽克圖:
mosaicplot(M)
進(jìn)行 行 x 列表資料的卡方檢驗:
kf <- chisq.test(M, correct = F)
kf
##
## Pearson's Chi-squared test
##
## data: M
## X-squared = 21.038, df = 2, p-value = 2.702e-05
多個樣本率的比較也可以使用以下函數(shù)進(jìn)行檢驗:
# 只適用于兩列的,類似于 有效/無效 這種室梅!
prop.test(M, correct = TRUE)
##
## 3-sample test for equality of proportions without continuity correction
##
## data: M
## X-squared = 21.038, df = 2, p-value = 2.702e-05
## alternative hypothesis: two.sided
## sample estimates:
## prop 1 prop 2 prop 3
## 0.9660194 0.9010989 0.8194444
可以看到兩種結(jié)果是一樣的戏仓,和課本一致的!
樣本構(gòu)成比的比較
使用課本例7-7的數(shù)據(jù)亡鼠。
ace <- matrix(c(42,48,21,30,72,36),nrow = 2,byrow = T,
dimnames = list(dn = c("dn組","非dn組"),
idi = c("dd","id","ii")
)
)
ace
## idi
## dn dd id ii
## dn組 42 48 21
## 非dn組 30 72 36
進(jìn)行卡方檢驗:
chisq.test(ace, correct = F)
##
## Pearson's Chi-squared test
##
## data: ace
## X-squared = 7.9127, df = 2, p-value = 0.01913
卡方值為7.91赏殃,和課本一致。
雙向無序分類資料的關(guān)聯(lián)性檢驗
使用課本例例7-8的數(shù)據(jù)间涵。
blood <- matrix(c(431,490,902,388,410,800,495,587,950,137,179,32),
nrow = 4,byrow = T,
dimnames = list(abo = c("o","a","b","ab"),
mn = c("m","n","mn")
)
)
blood
## mn
## abo m n mn
## o 431 490 902
## a 388 410 800
## b 495 587 950
## ab 137 179 32
進(jìn)行 關(guān)聯(lián)性檢驗:
chisq.test(blood,correct = F)
##
## Pearson's Chi-squared test
##
## data: blood
## X-squared = 213.16, df = 6, p-value < 2.2e-16
計算列聯(lián)系數(shù):
library(vcd)
## Loading required package: grid
assocstats(blood)
## X^2 df P(> X^2)
## Likelihood Ratio 248.14 6 0
## Pearson 213.16 6 0
##
## Phi-Coefficient : NA
## Contingency Coeff.: 0.188
## Cramer's V : 0.136
Pearson列聯(lián)系數(shù)是0.188仁热,和課本一樣。
雙向有序分組資料的線性趨勢檢驗
使用課本例7-9的數(shù)據(jù)勾哩。
ather <- matrix(c(70,22,4,2,27,24,9,3,16,23,13,7,9,20,15,14),
nrow = 4,byrow = T,
dimnames = list(age = c("20~","30~","40~","≥50"),
level = c("-","+","++","+++")
)
)
ather
## level
## age - + ++ +++
## 20~ 70 22 4 2
## 30~ 27 24 9 3
## 40~ 16 23 13 7
## ≥50 9 20 15 14
進(jìn)行卡方檢驗:
chisq.test(ather)
##
## Pearson's Chi-squared test
##
## data: ather
## X-squared = 71.432, df = 9, p-value = 7.97e-12
但這種情況下做這種卡方檢驗并不能說明什么問題抗蠢,課本是看兩者之間有沒有線性趨勢,我們可以直接用lm()
函數(shù)做思劳,把a(bǔ)ge作為自變量迅矛,把level作為因變量即可,由于沒有原始數(shù)據(jù)潜叛,這里就不演示了秽褒。
多個樣本率間的多重比較
主要有卡方分割法壶硅、Scheffe可信區(qū)間法、SNK法等销斟,這里主要演示卡方分割法庐椒。
其實非常簡單,就是把多個組手動拆分為多個 兩個組蚂踊,分別進(jìn)行卡方檢驗约谈,和P值比較,只不過這里的P值不再是0.05悴势,而是和組數(shù)(比較次數(shù))有關(guān)窗宇。
使用例7-10的數(shù)據(jù)。
df <- foreign::read.spss("./例07-06物理藥物外用膏用.sav", to.data.frame = T,reencode = "utf-8")
M <- matrix(df$f,nrow = 3,byrow = T,
dimnames = list(trt = c("物理", "藥物", "外用"),
effect = c("有效","無效")))
M
Show in New Window
re-encoding from utf-8
effect
trt 有效 無效
物理 199 7
藥物 164 18
外用 118 26
手動拆分特纤,兩兩比較军俊,直接取子集即可:
# 物理治療組和藥物治療組的卡方檢驗
chisq.test(M[1:2,], correct = F)
Pearson's Chi-squared test
data: M[1:2, ]
X-squared = 6.756, df = 1, p-value = 0.009343
# 物理治療組和外用膏藥組的卡方檢驗
chisq.test(M[c(1,3),], correct = F)
Pearson's Chi-squared test
data: M[c(1, 3), ]
X-squared = 21.323, df = 1, p-value = 3.881e-06
# 藥物治療組和外用膏藥組的卡方檢驗
chisq.test(M[2:3,], correct = F)
Pearson's Chi-squared test
data: M[2:3, ]
X-squared = 4.591, df = 1, p-value = 0.03214
可以看到和課本是一樣的。
這時的 P' = P / (K * (K - 1) / 2 + 1)捧存,K是組數(shù)粪躬,一般情況下P=0.05,所以P' = 0.05/(3*(3-1)/2+1) = 0.0125昔穴,上面3個卡方分析的P值和0.0125比較即可镰官!
Cochran-Mantel-Haenszel 卡方統(tǒng)計量檢驗
中文名又叫行均分檢驗,常用于按照某個變量進(jìn)行分層后的檢驗吗货,這個方法課本上說用于檢驗兩個有序分類變量是否存在線性相關(guān)泳唠,但實際上用途很廣泛,比如因變量是有序變量的單向有序列聯(lián)表宙搬,也可以用笨腥。
使用課本例7-12的數(shù)據(jù)。
這個數(shù)據(jù)有3個變量勇垛,首先是年齡脖母,根據(jù)年齡分成兩層,然后是是否心肌梗死和是否口服避孕藥闲孤,我們可以直接把這個數(shù)據(jù)錄入成3維array
的形式:
myo <- array(c(17,47,
121,944,
12,158,
14,663),
dim = c(2,2,2),
dimnames = list(心肌梗死 = c("病例","對照"),
口服避孕藥 = c("是","否"),
年齡分層 = c("<40歲","≥40歲")
)
)
myo
## , , 年齡分層 = <40歲
##
## 口服避孕藥
## 心肌梗死 是 否
## 病例 17 121
## 對照 47 944
##
## , , 年齡分層 = ≥40歲
##
## 口服避孕藥
## 心肌梗死 是 否
## 病例 12 14
## 對照 158 663
這樣就能直接進(jìn)行Cochran-Mantel-Haenszel檢驗
了谆级,這個檢驗的函數(shù)是R語言自帶的,不需要另外的包:
mantelhaen.test(myo,correct = F)
##
## Mantel-Haenszel chi-squared test without continuity correction
##
## data: myo
## Mantel-Haenszel X-squared = 24.184, df = 1, p-value = 8.755e-07
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
## 1.930775 4.933840
## sample estimates:
## common odds ratio
## 3.086444
這樣就得到結(jié)果了讼积,這個結(jié)果和課本也是一樣的肥照。
課本還介紹了Breslow-Day對各層的效應(yīng)值進(jìn)行齊性檢驗,這個檢驗可以通過DescTools
包實現(xiàn):
library(DescTools)
## Registered S3 method overwritten by 'DescTools':
## method from
## reorder.factor gdata
BreslowDayTest(myo)
##
## Breslow-Day test on Homogeneity of Odds Ratios
##
## data: myo
## X-squared = 0.23409, df = 1, p-value = 0.6285
結(jié)果也是和課本一模一樣勤众。
如果你的是原始數(shù)據(jù)的形式建峭,也是很簡單的,我們構(gòu)造一個和上面數(shù)據(jù)一樣的原始數(shù)據(jù):
myoo <- data.frame(年齡分層 = c(rep("<40歲",1129),rep("≥40歲",847)),
心肌梗死 = c(rep("病例",64),rep("對照",1065),
rep("病例",170),rep("對照",677)
),
口服避孕藥 = c(rep("是",17),rep("否",47),
rep("是",121),rep("否",944),
rep("是",12),rep("否",158),
rep("是",14),rep("否",663)
)
)
# 分類變量變?yōu)橐蜃有?myoo$年齡分層 <- factor(myoo$年齡分層,levels = c("<40歲","≥40歲"))
myoo$心肌梗死 <- factor(myoo$心肌梗死, levels = c("病例","對照"))
myoo$口服避孕藥 <- factor(myoo$口服避孕藥, levels = c("是","否"))
head(myoo)
## 年齡分層 心肌梗死 口服避孕藥
## 1 <40歲 病例 是
## 2 <40歲 病例 是
## 3 <40歲 病例 是
## 4 <40歲 病例 是
## 5 <40歲 病例 是
## 6 <40歲 病例 是
用xtabs
查看數(shù)據(jù)决摧,結(jié)果和我們的array
的形式是一樣的:
myoo.tab <- xtabs(~口服避孕藥+心肌梗死+年齡分層,data = myoo)
myoo.tab
## , , 年齡分層 = <40歲
##
## 心肌梗死
## 口服避孕藥 病例 對照
## 是 17 121
## 否 47 944
##
## , , 年齡分層 = ≥40歲
##
## 心肌梗死
## 口服避孕藥 病例 對照
## 是 12 14
## 否 158 663
這樣就可以直接進(jìn)行Cochran-Mantel-Haenszel檢驗
了:
mantelhaen.test(myoo.tab, correct = F)
##
## Mantel-Haenszel chi-squared test without continuity correction
##
## data: myoo.tab
## Mantel-Haenszel X-squared = 24.184, df = 1, p-value = 8.755e-07
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
## 1.930775 4.933840
## sample estimates:
## common odds ratio
## 3.086444
結(jié)果也是一樣的。
還可用woolf法
檢驗不同分層之間的效應(yīng)值有沒有統(tǒng)計學(xué)顯著性,通過使用?mantelhaen.test
查看幫助文檔掌桩,作者直接給了一個現(xiàn)成的計算方法:
woolf <- function(x) {
x <- x + 1 / 2
k <- dim(x)[3]
or <- apply(x, 3, function(x) (x[1,1]*x[2,2])/(x[1,2]*x[2,1]))
w <- apply(x, 3, function(x) 1 / sum(1 / x))
1 - pchisq(sum(w * (log(or) - weighted.mean(log(or), w)) ^ 2), k - 1)
}
woolf(myoo.tab)
## [1] 0.6400154
直接給出了P值边锁。
頻數(shù)分布擬合優(yōu)度卡方檢驗
使用課本例7-13的數(shù)據(jù)。
R語言做卡方擬合優(yōu)度檢驗非常簡單波岛,關(guān)鍵是概率的計算茅坛,這里我們直接用課本中的概率。
x <- c(26,51,75,63,38,17,9)
p <- c(0.0854,0.2102,0.2585,0.2120,0.1304,0.0641,0.0394)
chisq.test(x=x, p =p)
##
## Chi-squared test for given probabilities
##
## data: x
## X-squared = 2.0377, df = 6, p-value = 0.9162
結(jié)果和課本非常接近则拷。
這里貼一個網(wǎng)絡(luò)教程的概率計算方法:
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)
Chi-squared test for given probabilities
data: y
X-squared = 2.0569, df = 6, p-value = 0.9144
結(jié)果和課本非常接近贡蓖。
本文首發(fā)于公眾號:醫(yī)學(xué)和生信筆記
醫(yī)學(xué)和生信筆記,專注R語言在臨床醫(yī)學(xué)中的使用煌茬,R語言數(shù)據(jù)分析和可視化斥铺。主要分享R語言做醫(yī)學(xué)統(tǒng)計學(xué)、meta分析坛善、網(wǎng)絡(luò)藥理學(xué)晾蜘、臨床預(yù)測模型、機(jī)器學(xué)習(xí)眠屎、生物信息學(xué)等剔交。