獨(dú)立性和一致性檢驗(yàn) chisq 配猫、McNemar‘s、 kappa2 及可視化

定義

Pearson's chi squared test:

Pearson卡方檢驗(yàn)杏死,由著名統(tǒng)計(jì)學(xué)家Karl Pearson提出泵肄,主要是比較兩個(gè)及兩個(gè)以上樣本構(gòu)成比以及兩個(gè)分類(lèi)變量的關(guān)聯(lián)性的分析。其根本思想是比較理論頻數(shù)與實(shí)際頻數(shù)的溫和程度或擬合優(yōu)度的問(wèn)題淑翼。廣泛應(yīng)用于1)分類(lèi)變量的獨(dú)立性(是否具有相關(guān)性)檢驗(yàn)中腐巢;2)是否服從某個(gè)比例的比較檢驗(yàn)中⌒ǎ可應(yīng)用于分類(lèi)變量(categorical data)的獨(dú)立性檢驗(yàn)中系忙,也可用于分類(lèi)變量的比較檢驗(yàn)中。這兩種檢驗(yàn)都需要用到R×C列聯(lián)表(R×C contingency table)惠豺,其中R表示行(Row)银还,C表示列(Column)。最簡(jiǎn)單的情形是行與列都是二分類(lèi)無(wú)序變量洁墙,這樣的數(shù)據(jù)也稱(chēng)為四格表資料蛹疯。
卡方檢驗(yàn)使用條件:1.隨機(jī)樣本數(shù)據(jù); 2.卡方檢驗(yàn)的理論頻數(shù)不能太小热监。 兩個(gè)獨(dú)立樣本比較可以分以下3種情況: 1.所有的理論數(shù)T≥5并且總樣本量n≥40捺弦,用Pearson卡方進(jìn)行檢驗(yàn)。 2.如果理論數(shù)T<5但T≥1孝扛,并且n≥40列吼,用連續(xù)性校正的卡方進(jìn)行檢驗(yàn)。 3.如果有理論數(shù)T<1或n<40苦始,則用Fisher’s檢驗(yàn)寞钥。 R×C表卡方檢驗(yàn)應(yīng)用條件: 1.R×C表中理論數(shù)小于5的格子不能超過(guò)1/5;2.不能有小于1的理論數(shù)陌选。我的實(shí)驗(yàn)中也不符合R×C表的卡方檢驗(yàn)理郑。可以通過(guò)增加樣本數(shù)咨油、列合并來(lái)實(shí)現(xiàn)您炉。

McNemar‘s test(McNemar's test for correlated proportions,也叫配對(duì)卡方檢驗(yàn)) 和Kappa 一致性檢驗(yàn):

兩種方法均用于配對(duì)資料率的檢驗(yàn)役电,如檢驗(yàn)兩種治療方式赚爵。二者區(qū)別:1、Kappa檢驗(yàn)旨在評(píng)價(jià)兩種方法是否存在一致性;配對(duì)χ2檢驗(yàn)主要確定兩種方法診斷結(jié)果是否有差別冀膝;2唁奢、Kappa檢驗(yàn)會(huì)利用列聯(lián)表的全部數(shù)據(jù),而配對(duì)χ2檢驗(yàn)只利用“不一致“數(shù)據(jù)畸写;3驮瞧、Kappa檢驗(yàn)可計(jì)算Kappa值用于評(píng)價(jià)一致性大小,而配對(duì)χ2檢驗(yàn)只能給出兩種方法差別是否具有統(tǒng)計(jì)學(xué)意義的判斷枯芬。Kappa值判斷標(biāo)準(zhǔn):Kappa≥0.75论笔,說(shuō)明兩種方法診斷結(jié)果一致性較好; 0.4≤Kappa<0.75,說(shuō)明兩種方法診斷結(jié)果一致性一般; Kappa<0.4千所,說(shuō)明兩種方法診斷結(jié)果一致性較差狂魔。

使用示例

image.png

Rscript this R <輸入文件> <需要檢驗(yàn)的變量列表隆箩,來(lái)自于輸入文件的列名> <輸出路徑> <輸出文件前綴> <基線/金標(biāo)準(zhǔn)措译,來(lái)自于輸入文件的列名东亦,“需要檢驗(yàn)的變量列表”均與該變量進(jìn)行檢驗(yàn)>

Rscript chisq.test.r data_merge.txt list /lustre/work/user/zhou.yang/project/10_ZL_multi/2_analysis/6_single_sample/10_shannon_diff_mutation_set/6.SVV/group_by_diff_method_compare/statist_test_result  Common_mutation Common_mutation

infile文件示例

image.png

list文件示例

image.png

代碼:

args = commandArgs(T)
if (length(args) !=5){
    print("Rscript this R <infile> <list> <outdir> <prefix> <baseline>")
    q()
}

library(data.table)
library("irr")
data<-read.table(args[1],sep="\t",header=T,encoding='UTF-8',check.names=F,row.names=1)
list<-read.table(args[2],sep="\t",header=F,encoding='UTF-8',check.names=F)
len=dim(list)[1]
print(dim(data))
header<-paste("Item","X-squared","df","p-value",sep="\t")
write.table(header,file=(paste(args[3],"/",args[4],".chi-square_test_result.xls",sep="")),sep="\t",quote=F,row.names=F,col.names=F,append=F)
header<-paste("Item","X-squared","df","p-value",sep="\t")
write.table(header,file=(paste(args[3],"/",args[4],".mcnemar-square_test_result.xls",sep="")),sep="\t",quote=F,row.names=F,col.names=F,append=F)
header<-paste("Item","method","Kappa","p-value",sep="\t")
write.table(header,file=(paste(args[3],"/",args[4],".kappa-square_test_result.xls",sep="")),sep="\t",quote=F,row.names=F,col.names=F,append=F)

for(i in 1:len){
    id=as.character(list[i,])
    data1<-as.data.frame(t(data))
    traits<-as.data.frame(t(data1[which(rownames(data1)==id),]))
    traits$Group=data[,which(colnames(data)==args[5])]
    colnames(traits)<-c("Group1","Group2")
    print(dim(traits))
    #traits$Group1=as.factor(traits$Group1)
    #traits$Group2=as.factor(traits$Group2)
    traits<-na.omit(traits)
    traits <- subset(traits, traits$Group2 != "")
    #生成4聯(lián)表
    four_table<-xtabs(~traits$Group1+traits$Group2,data=traits)
#獨(dú)立性檢驗(yàn)/差異檢驗(yàn):卡方檢驗(yàn)
    #理論頻數(shù)T<5(chisq.test(four_table)$expected)時(shí)转砖,進(jìn)行連續(xù)性校正的卡方進(jìn)行檢驗(yàn):correct=TURE。
    k<-"FALSE"
    judge<- chisq.test(four_table)$expected >5
    if (k %in% judge){chisq_v<-chisq.test(four_table,correct=T)}
    else{chisq_v<-chisq.test(four_table,correct=F)}
#   print(chisq.test(four_table)$expected)
#   print(chisq_v)
    chisq_va<-paste(id,chisq_v$statistic[[1]],chisq_v$parameter[[1]],chisq_v$p.value,sep="\t")
    write.table(chisq_va,file=(paste(args[3],"/",args[4],".chi-square_test_result.xls",sep="")),sep="\t",quote=F,col.names=F,row.names=F,append=T)

#一致性檢:配對(duì)卡方檢驗(yàn)(McNemar 檢驗(yàn))
    mcnemar_v<-mcnemar.test(four_table,correct=T)
    mcnemar_va<-paste(id,mcnemar_v$statistic[[1]],mcnemar_v$parameter[[1]],mcnemar_v$p.value,sep="\t")
    write.table(mcnemar_va,file=(paste(args[3],"/",args[4],".mcnemar-square_test_result.xls",sep="")),sep="\t",quote=F,col.names=F,row.names=F,append=T)


#一致性檢:kappa檢驗(yàn):對(duì)于僅探討陽(yáng)性率是否相同套菜,可采用配對(duì)卡方檢驗(yàn)(又稱(chēng)McNemar檢驗(yàn))脚牍;如果探討結(jié)果是否具有一致性伐蒋,則采用Kappa檢驗(yàn)火俄。通常犯建,在診斷、檢驗(yàn)領(lǐng)域瓜客,Kappa檢驗(yàn)更為多見(jiàn)适瓦。
#Kappa≥0.75,說(shuō)明兩種方法診斷結(jié)果一致性較好;0.4≤Kappa<0.75谱仪,說(shuō)明兩種方法診斷結(jié)果一致性一般;Kappa<0.4玻熙,說(shuō)明兩種方法診斷結(jié)果一致性較差。
    kappa_v<-kappa2(traits,'unweighted')
    #Weight參數(shù)是函數(shù)的重點(diǎn)疯攒,如果有多個(gè)檢查項(xiàng)目中有一個(gè)是為0的時(shí)候需要加權(quán)檢驗(yàn)嗦随,其他時(shí)候一般都是非加權(quán)檢驗(yàn)。
    kappa_va<-paste(id,kappa_v$method,kappa_v$value,kappa_v$p.value,sep="\t")
    write.table(kappa_va,file=(paste(args[3],"/",args[4],".kappa-square_test_result.xls",sep="")),sep="\t",quote=F,col.names=F,row.names=F,append=T)
}

輸出文件

image.png

image.png

image.png

image.png

一致性結(jié)果可視化(基于Kappa檢驗(yàn)結(jié)果)

結(jié)果示例:


image.png

腳本

args = commandArgs(T)
if (length(args) !=4){
    print("Rscript this R <infile> <X> <Y> <outfile>")
    q()
}


library("ggplot2")

dat<-read.table(file=args[1],header=T,sep="\t")
data<-na.omit(dat)

data$judge <- ifelse(data$kappa.value >=0.75,"Good",ifelse(data$kappa.value >=0.4,"Moderate","Bad"))
data$judge <- as.factor(data$judge)
data$kappa <- data$kappa.value
data1<-data[data$P.value < 0.05,]
pdf(file=args[4],height=4,width=10)
ggplot(data=data) + geom_point(mapping = aes(x = factor(get(args[2]),levels=as.factor(unique(get(args[2])))), y = factor(get(args[3]),levels=as.factor(unique(get(args[3])))), size=kappa,color=judge))+theme_bw()+theme(panel.grid =element_blank())+ theme(axis.ticks= element_blank()) + scale_color_manual("Consistency (Cohen's Kappa)",values=c(Good = "red2", Moderate = "orange",Bed="Blue"))+scale_size_continuous("Kappa consistency Value")+ geom_point(data= data1,alpha=0.9,pch=21,colour="black",aes(x = factor(get(args[2]),levels=as.factor(unique(get(args[2])))), y = factor(get(args[3]),levels=as.factor(unique(get(args[3])))),size=kappa))+xlab("")+ylab("")+guides(size = guide_legend(order = 1))+theme(axis.text.x = element_text(size=12))+ theme(axis.text.x = element_text(angle = 45, hjust = 1, color = "black", size = 9),axis.title.y = element_text(size=10))+ guides(color = guide_legend(override.aes = list(size = 4)))
#ggplot(data=data) + geom_point(mapping = aes(x = factor(get(args[2]),levels=as.factor(unique(get(args[2])))), y = factor(get(args[3]),levels=as.factor(unique(get(args[3])))), size=kappa,color=judge))+theme_bw()+theme(panel.grid =element_blank())+ theme(axis.ticks= element_blank())+theme(panel.border = element_blank()) + scale_color_manual("Consistency",values=c(Good = "red2", Moderate = "orange",Bed="Blue"))+scale_size_continuous("Kappa consistency Value")+ geom_point(data= data1,alpha=0.9,pch=21,colour="black",aes(x = factor(get(args[2]),levels=as.factor(unique(get(args[2])))), y = factor(get(args[3]),levels=as.factor(unique(get(args[3])))),size=kappa))+xlab("")+ylab("")+guides(size = guide_legend(order = 1))+theme(axis.text.x = element_text(size=12))+ theme(axis.text.x = element_text(angle = 45, hjust = 1, color = "black", size = 9),axis.title.y = element_text(size=10))+ guides(color = guide_legend(override.aes = list(size = 4)))

dev.off()

使用方法:


image.png
Rscript this R <infile> <X> <Y> <outfile>
Rscript this R <輸入文件> <X軸> <Y軸> <輸出文件>

使用示例:
Rscript kappa_Bubble_plot.r kappa.format shannon Group kappa_Bubble_plot.pdf
輸入文件示例(統(tǒng)計(jì)分析的結(jié)果需要整理一下):


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卸例,一起剝皮案震驚了整個(gè)濱河市称杨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筷转,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悬而,死亡現(xiàn)場(chǎng)離奇詭異呜舒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)笨奠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)袭蝗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)唤殴,“玉大人,你說(shuō)我怎么就攤上這事到腥《涫牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵乡范,是天一觀的道長(zhǎng)配名。 經(jīng)常有香客問(wèn)我,道長(zhǎng)晋辆,這世上最難降的妖魔是什么渠脉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮瓶佳,結(jié)果婚禮上芋膘,老公的妹妹穿的比我還像新娘。我一直安慰自己霸饲,他們只是感情好为朋,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著厚脉,像睡著了一般习寸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上器仗,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天融涣,我揣著相機(jī)與錄音,去河邊找鬼精钮。 笑死威鹿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的轨香。 我是一名探鬼主播忽你,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼臂容!你這毒婦竟也來(lái)了科雳?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脓杉,失蹤者是張志新(化名)和其女友劉穎糟秘,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體球散,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尿赚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凌净。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悲龟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冰寻,到底是詐尸還是另有隱情须教,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布斩芭,位于F島的核電站轻腺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秒旋。R本人自食惡果不足惜约计,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望迁筛。 院中可真熱鬧煤蚌,春花似錦、人聲如沸细卧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贪庙。三九已至蜘犁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間止邮,已是汗流浹背这橙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留导披,地道東北人屈扎。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像撩匕,于是被迫代替她去往敵國(guó)和親鹰晨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容