检验int值在list中是否存在_R语言统计与绘图:卡方检验
卡方檢驗在計數資料中的應用,包括推斷兩個總體率或構成比之間有無差別、多個總體率或構成比之間有無差別、多個樣本率間的多重比較、兩個分類變量之間有無關聯性、多維列聯表的分析和頻數分布擬合優度的卡方檢驗。
選自:周支瑞老師下面分別介紹計數資料怎么進行卡方檢驗。
目? 錄
1. 四格表資料的卡方檢驗
1.1 數據集數據
1.2 向量或矩陣數據
1.3 chisq.test()函數
2. Fisher確切概率法
3. 配對四格表資料的卡方檢驗
3.1 b+c < 40
3.2 b+c ≥ 40
3.3 mcnemar.test()函數
4. Cochran-Mantel-Haenszel檢驗
4.1 mantelhaen.test()函數
4.2 數據集形式的數據
4.3 向量或數組數據
4.4 計算各層OR值
4.5 Breslow-Day檢驗
4.6 BreslowDayTest()函數
4.7 WoolfTest()函數
5. 計算列聯系數
6. 頻數分布擬合優度的卡方檢驗
1. 四格表資料的卡方檢驗
1.1 數據集數據
選用survival包的colon數據集。
library(survival)?#加載內置數據集的包data(colon)?#?加載數據集
mytable?chisq.test(mytable)??#?進行連續性校正
chisq.test(mytable,?correct?=?FALSE)?#?不進行連續性校正
無論是否進行連續性校正,結果都顯示p值>0.05,接受原假設,說明sex和status無關。
還可以輸出卡方檢驗摘要:
chisq.test(mytable)$observed???#?實際頻數(和mytable一樣)chisq.test(mytable)$expected???#?期望頻數
chisq.test(mytable)$residuals??#?Pearson?殘差
chisq.test(mytable)$stdres?????#?標準化殘差
1.2 向量或矩陣數據
compare706,792,184,176),?nr?=?2,????????????????dimnames?=?list(c("male",?"female"),
????????????????????????????????c("Yes",?"No")));compare
chisq.test(compare)
注意:在使用chisq.test()函數計算時,要注意單元格的期望頻數。如果所有單元格頻數都不為零,并且所有單元的期望頻數≥5,那么Pearson卡方檢驗是合理的,否則會顯示警告信息。
如果在計算時出現警告信息,表明表中單元格期望頻數有<5的值,這可能會使卡方近似無效。
如果數據不滿足卡方檢驗的條件時,應使用Fisher精確檢驗。
1.3 chisq.test()函數
chisq.test()函數可以進行卡方列聯表檢驗和擬合優度檢驗。
chisq.test(x,?y?=?NULL,?#?x是由數據構成的向量或矩陣,y是數據向量(當x為矩陣時,y忽略)???????????correct?=?TRUE,?#?邏輯詞,默認為TRUE,在計算2x2列聯表的檢驗統計量時是否使用連續性校正
???????????p?=?rep(1/length(x),?length(x)),?#?p是原假設落在小區間的理論概率,默認值表示均勻分布.?
???????????# P是和x長度相同的概率向量,P值如果輸入有負值,會返回錯誤信息。
???????????rescale.p?=?FALSE,?#?邏輯詞,為TRUE,則p將縮放成和為1的向量;為FALSE,如果p向量和≠1,則會返回錯誤信息
???????????simulate.p.value?=?FALSE,?#?為TRUE則不進行連續性校正,根據蒙特卡洛檢驗計算p值
???????????B?=?2000)?# B為整數,在蒙特卡洛檢驗中使用的重復次數。
對于2x2的列聯表,參數correct的默認值為TRUE,即使用Yate連續修正,目的是提高P值,避免"有顯著差異"不可靠的情況發生;
2. Fisher確切概率法
在樣本較小時(單元的期望頻數<5),需要用Fisher精確檢驗來完成獨立性檢驗。Fisher檢驗開始是針對2x2四格表提出的,當卡方檢驗的條件不滿足時,可以使用精確檢驗。
fisher.test(x,?y?=?NULL,?#?參數x為二維列聯表形式的矩陣,或者由因子構成的對象。y為因子構成的向量,當x為矩陣時,此值無效。????????????workspace?=?200000,?#?正整數,表示用于網絡算法工作空間的大小
????????????hybrid?=?FALSE,??#?邏輯詞,僅用于2x2列聯表,為FALSE時(默認值)表示精確計算概率,取TRUE表示用混合算法計算概率。
????????????hybridPars?=?c(expect?=?5,?percent?=?80,?Emin?=?1),
????????????control?=?list(),?or?=?1,?#?為列表,指定低水平算法的組成,or為優勢比的原假設,默認值為1,僅用于2x2列聯表。
????????????alternative?=?"two.sided",?#?備擇假設,默認值"two.sided",表示雙側檢驗(不獨立),“less”表示單側小于檢驗(負相關);“greater”表示單側大于檢驗(正相關)。
????????????conf.int?=?TRUE,?#?邏輯詞,為TRUE則給出優勢比的置信區間。
????????????conf.level?=?0.95,??#?置信水平,默認0.95
????????????simulate.p.value?=?FALSE,?B?=?2000)?#?邏輯詞,為TRUE,表示用Monto Carlo方法計算P值,B為正整數,表示Monto Carlo重復的次數。
例:研究COPD與吸煙之間的關系,調查了52名COPD患者和33名非COPD患者吸煙的人數。
compare49,28,3,5),nr?=?2,?byrow?=?TRUE,????????????????dimnames?=?list(c("smoke",?"Notsmoke"),
????????????????????????????????c("COPD",?"normal")))
compare
chisq.test(compare)$expected??#?查看期望頻數
fisher.test(compare)?#?進行fisher精確檢驗
因為p-value=0.2518>0.05,并且優勢比的置信區間包含1,故接受原假設, 認為吸煙與COPD無關。
3. 配對四格表資料的卡方檢驗
計數資料的配對設計常用于兩種檢驗方法、培養方法、診斷方法的比較。特點是對樣本中各觀察單位分別用兩種方法處理,然后觀察兩種處理方法的某兩分類變量的計數結果。
假設檢驗為McNemar卡方檢驗,檢驗統計量有兩種(分b+c ≥ 40和b+c < 40的情況)。該法一般用于樣本含量不太大的資料。
- 當b+c < 40時,使用連續性校正,即correct=TRUE。
- 當b+c ≥ 40時,不使用連續性校正,即correct=FALSE。
3.1 b+c < 40
例:某實驗室分別用乳膠凝集法和免疫熒光法對58名可疑系統性紅斑狼瘡患者血清中抗核抗體進行測定,問這兩種方法的檢測結果有無差別?
X?11,2,12,33),?????????????nrow?=?2,
????????????byrow?=?FALSE,
????????????dimnames?=?list(免疫熒光法?=?c("+","-"),乳膠凝集法?=?c("+","-")));X
#???????????乳膠凝集法
#?免疫熒光法???+??-
#??????????+?11?12
#??????????-??2?33
mcnemar.test(X,correct=TRUE)
#?McNemar's?Chi-squared?test?with?continuity?correction
#?data:??X
#?McNemar's?chi-squared?=?5.7857,?df?=?1,?p-value?=?0.01616
結論:p-value =?0.01616?<?0.05,可以認為兩種方法的檢測結果不同,免疫熒光法的陽性檢測率較高
3.2 b+c ≥ 40
例:某醫院同時用A、B兩種方法測定160份痰標本中的抗酸桿菌,問A、B兩種方法的檢出率有無顯著性差異?
X?52,20,35,53),?????????????nrow?=?2,
????????????byrow?=?FALSE,
????????????dimnames?=?list(A方法?=?c("+","-"),B方法?=?c("+","-")));X
#???????B方法
#?A方法??+??-
#?????+?52?35
#?????-?20?53
mcnemar.test(X,correct=FALSE)?
#?McNemar's?Chi-squared?test
#?data:??X
#?McNemar's?chi-squared?=?4.0909,?df?=?1,?p-value?=?0.04311
結論:p-value =?0.04311?<?0.05,可以認為兩種方法的檢測結果不同。
3.3 mcnemar.test()函數
使用mcnemar.test()函數進行McNemar檢驗。
mcnemar.test(x,?y=NULL,?#參數x為二維列聯表形式的矩陣,或者由因子構成的對象。y為因子構成的向量,當x為矩陣時,此值無效。?????????????correct=TRUE)??#邏輯詞,默認為TRUE,僅在2x2列聯表下進行連續校正。
4. Cochran-Mantel-Haenszel檢驗
CMH檢驗可以理解為分層卡方檢驗,CMH檢驗用于高維列聯表的分析,即在控制了某一個或幾個混雜因素(分層變量)之后,檢驗二維RxC表中行變量與列變量之間是否存在統計學關聯。
假設檢驗:H0:為任一層的行變量X與列變量Y均不相關;??
H1:為至少有一層X與Y存在統計學關聯。
當H0成立時,CMH統計量漸近卡方分布。需要注意的是,當各層間行變量與列變量相關的方向不一致時,CMH統計量的檢驗效能較低。
根據行變量X和列變量Y的類型不同,CMH卡方統計量包括:
1.相關統計量:適用于雙向有序分類變量;??2.方差分析統計量:也稱行平均得分統計量,適用于列變量Y為有序分類變量;??
3.一般關聯統計量:適用雙向無序分類變量,目的是檢驗X和Y是否存在關聯性。
4.1 mantelhaen.test()函數
mantelhaen.test()函數用來進行CMH卡方檢驗。其原假設是,兩個分類變量在第三個變量的每一層中都是條件獨立的。
mantelhaen.test(x,?y?=?NULL,?#?x為數組形式的三維列聯表,行與列的維度至少為2,最后一個維度為分層變量;????????????????#?或者x為至少有2個水平的因子,y也為至少有2個水平的因子,如果x為三維數組時,y忽略;
????????????????z?=?NULL,?#?至少有2個水平的因子,表示哪一層對應x中的元素,哪一層對應y的元素,如果x為三維數組,則z忽略;
????????????????alternative?=?c("two.sided",?"less",?"greater"),?#?備擇假設,默認為"two.sided"雙側檢驗;
????????????????correct?=?TRUE,?#?邏輯詞,計算檢驗統計量時使用連續性校正;
????????????????exact?=?FALSE,?#?邏輯詞,是否計算精確檢驗;
????????????????conf.level?=?0.95)?#?置信水平,默認0.95
注意:數組或向量不允許存在缺失值,x,y,z必須為長度相同的數字向量。
4.2 數據集形式的數據
選用survival包的colon數據集。xtabs()函數可以基于三個或多個分類變量生成多維列聯表。
mytable?mantelhaen.test(mytable)結果中p-value = 2.921e-08,表明患者接受的治療與結局狀態在性別的每一水平下并不獨立。
4.3 向量或數組數據
為研究心肌梗死與近期使用避孕藥之間的關系,采用病例對照研究方法調查了234 名心肌梗死病人與1742名對照使用口服避孕藥的狀況。考慮到年齡是混雜因素,按照年齡分層后結果見下表。試分析排除了年齡因素的影響后,心肌梗死是否與近期使用口服避孕藥有關。
mydata?17,?121,?47,?944,??????????????????12,?14,?158,?663),
????????????????dim?=?c(2,?2,?2),
????????????????dimnames?=?list(心肌梗死?=?c("病例",?"對照"),
????????????????????????????????????近期使用口服避孕藥?=?c("是",?"否"),?
????????????????????????????????????年齡?=?c(",?"≥?40歲")))
mydata
mantelhaen.test(mydata,?correct?=?F)?#?經典的2x2xk水平?CMH?檢驗
結果顯示P<0.001,按a=0.05的檢驗水準拒絕H0,接受H1,可認為控制了年齡的影響后,心肌梗死與近期服用口服避孕藥有關。
4.4 計算各層OR值
apply(mydata,?3,?function(x)?(x[1,1]*x[2,2])/(x[1,2]*x[2,1]))#??#?2.821874?3.596745?
4.5 Breslow-Day檢驗
對于分層病例對照研究或隊列研究資料,通常應用Breslow-Day檢驗對各層的效應值(OR或RR)進行齊性檢驗。
若不拒絕齊性假設(p>0.05),才可依據CMH檢驗的結果推斷出暴露因素是否與疾病相關。如果相關,可進一步用Mantel-Haenszel法估計OR或RR值及其可信區間。
若拒絕了齊性假設(p<0.05),則提示分層變量與暴露因素間存在交互作用,此時CMH檢驗的結果不能說明問題,可進行多元logistic回歸分析。
4.6 BreslowDayTest()函數
BreslowDayTest(x,?#?2x2xk列聯表???????????????OR?=?NA,?#?要檢驗的OR值,默認使用Mantel-Haenszel估算值。
???????????????correct?=?FALSE)?#?為TRUE,則使用Tarone調整的Breslow-Day檢驗
library(DescTools)?#?加載包
BreslowDayTest(mydata)??#?進行Breslow-Day檢驗
#?Breslow-Day?test?on?Homogeneity?of?Odds?Ratios
#?data:??mydata
#?X-squared?=?0.23409,?df?=?1,?p-value?=?0.6285
BreslowDayTest(mydata,?correct?=?TRUE)??#?Tarone校正的Breslow-Day檢驗
#?Breslow-Day?Test?on?Homogeneity?of?Odds?Ratios?(with?Tarone?correction)
#?data:??mydata
#?X-squared?=?0.23369,?df?=?1,?p-value?=?0.6288
結果為P=0.6285,可認為兩年齡組口服避孕藥對心肌梗死的總體OR值同質:用Mantel-Haenszel法估計OR值及其95%可信區間為3.09(1.93-4.93)。
4.7 WoolfTest()函數
除了BreslowDayTest()函數外,WoolfTest()函數也可以對2x2xk列聯表的同質性進行檢驗。
WoolfTest(x)??# x為2x2xk列聯表,最后一個維度為分層變量WoolfTest(mydata)
#?Woolf?Test?on?Homogeneity?of?Odds?Ratios?(no?3-Way?assoc.)
#?data:??mydata
#?X-squared?=?0.23358,?df?=?1,?p-value?=?0.6289
結論和BreslowDayTest檢驗一樣。
5. 計算列聯系數
若行x列表資料的兩個分類變量都為無序分類變量,進行多個樣本率的比較、樣本構成比的比較都可以用卡方檢驗,也就是使用chisq.test()函數來計算。
若得知兩個分類變量之間有關聯性,需進一步分析關系的密切程度時,可計算Pearson列聯系數。
列聯系數C (Contingency Coeff) 取值為0-1之間,0表示完全獨立, 1表示完全相關;愈接近于1,關系愈密切。
vcd包中的assocstats()函數可以用來計算二維列聯表的phi系數、列聯系數和Cramer’s V系數。
例:測得某地 5801 人的 ABO 血型和 MN 血型結果如下,問這兩種血型之間是否有關聯。
mytable?431,?388,?495,?137,????????????????????490,?410,?587,?179,
????????????????????902,?800,?950,?32),
??????????????????nrow?=?4,?byrow?=?FALSE,
??????????????????dimnames?=?list(ABO血型?=?c("O","A","B","AB"),
??????????????????????????????????MN血型?=?c("M","N","MN")))
mytable
chisq.test(mytable)?#?判斷兩分類變量有無關聯性
p-value < 2.2e-16,可以認為兩種血型系統間有關聯,可進一步計算Pearson列聯系數,以分析其密切程度。
library(vcd)assocstats(mytable)?#?查看關聯性的強弱
從上面可以看出,列聯系數為0.188,雖然有關聯性,但列聯系數比較小,雖然有統計學意義,但關系不太密切。
6. 頻數分布擬合優度的卡方檢驗
頻數分布擬合優度(goodness-of-fit)檢驗還是使用chisq.test()函數。
chisq.test(x,?# x為向量或單行/單列矩陣,參數 x 必須全部是非負整數。???????????p,?# P是和x長度相同的概率向量,P值如果輸入有負值,會返回錯誤信息。
??????????????# p中向量的和應為1,p不給出則向量值全部相等。
???????????rescale.p?=?TRUE)?#?邏輯詞,為TRUE,則p將縮放成和為1的向量;為FALSE,如果和≠1,則會返回錯誤信息。
x?10,25,15)?
chisq.test(x)??#?chisq.test(as.table(x))等效
x?82,47,20,18,22)?#?x為向量
p?45,25,25,18,15)?# p為概率
chisq.test(x,?p?=?p)??#?返回錯誤信息,概率總和必須為1
chisq.test(x,?p?=?p,?rescale.p?=?TRUE)?#?運行正常
相關文章
R語言統計與繪圖:ROC曲線上32種截斷值的計算 2020-06-18 R語言統計與繪圖:ROC曲線的統計計算 2020-06-17 R語言統計與繪圖:繪制不同坐標軸置信區間的森林圖 2020-06-05 R語言統計與繪圖:方差分析 2020-06-01 R語言統計與繪圖:pROC包繪制ROC曲線 2020-05-25總結
以上是生活随笔為你收集整理的检验int值在list中是否存在_R语言统计与绘图:卡方检验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opython3l_python之 数据
- 下一篇: 数mysql据分析优化_从零开始学习数据