R語言卡方檢驗與結果可視化---ggstatsplot包

R語言卡方檢驗與結果可視化

1,卡方分析簡介與實例
2,R語言chisq.test()
3,基於ggstatsplot包的可視化分析

卡方分析簡介與實例:

卡方檢驗是生物學中應用很廣的一種假設檢驗,可以通過對構成比,率進行檢驗,進而判斷分類資料間的偏差程度。若卡方值越大,二者偏差程度越大;反之,二者偏差越小。其中卡方分析的原假設是觀察頻數與期望頻數無差別,所以說當p值顯著時,則拒絕原假設,認爲二者之間有明顯差異。總而言之,卡方分析即是用來判斷兩個樣本間的差異程度,從而推斷兩個變量之間有沒有關係。
一般常見的卡方分析是2x2列聯表形式,例如服用某種藥物是否對死亡率有影響:(自己編的數據)
在這裏插入圖片描述
簡單統計之後,得到總數和死亡率:
在這裏插入圖片描述
原假設是:服藥組和未服藥組之間頻數無顯著差異(服藥對死亡率無影響)
先計算自由度:(行數-1)*(列數-1)=1在這裏插入圖片描述
這個是卡方的計算公式,R代表實際值,T代表理論值,理論值需要進一步計算纔可以知道。
在這裏插入圖片描述
此處理論的死亡率就是20.69%,根據該數值計算出各個值的理論值:未服藥組【治癒:328x(1-0.2069),死亡:328x0.2069】服藥組同理也可以計算出結果,得到:
在這裏插入圖片描述
根據公式計算出卡方的值:
x2=(231-260.1368)2/260.1368+(97-67.8632)2/67.8632+(298-268.8609)2/268.8609+(41-70.1391)2/70.1391=31.03711
查表可知在自由度爲1的情況下,臨界概率是:3.84(95%),顯然31.03711>3.84,遠超卡方分佈的臨界值,同時31.03711>10.83(99.9%),對此我們便能得到結論,服藥組和未服藥組間有顯著差異。

R語言chisq.test()

在R語言中進行卡方檢驗還是十分方便的,只需要使用chisq.test即可實現,可以返回卡方值和對應的p值,同時還可以計算自由度。但是其對數據集的格式有一定的要求,如圖所示爲實際的操作步驟:

>治癒<-c(231,298)
>死亡<-c(97,41)
>data<-data.frame(治癒,死亡,row.names = c("未服藥組","服藥組"))
>chisq.test(data)

	Pearson's Chi-squared test with Yates' continuity correction
	
data:  data
X-squared = 29.981, df = 1, p-value = 4.362e-08

>data
         治癒 死亡
 未服藥組  231   97
 服藥組    298   41

此處爲2X2列鏈表的實例,在實際生活中,往往需要將結果反應到圖像上,一般採用prism8或AI來製圖,在R語言中ggstatsplot包也可以實現在這方面的功能。

基於ggstatsplot包的可視化分析

ggstatsplot包常用於各種檢驗的可視化製圖中,在這裏只簡單介紹關於卡方分析的可視化。此處需要使用到ggbarstats函數,其參數可謂是非常的多,詳細的參數表我放在另一個博客中了,有興趣的朋友可以去看看(https://blog.csdn.net/m0_45248682/article/details/104086729)。務必記住ggbarstats函數對數據集的要求不同於chisq.test,它只能接受比率或者原始的統計數據,詳細的將舉例說明:

> head(mtcars) #原始數據集
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
> table(mtcars$vs)  #頻數統計(chisq.test使用)

 0  1 
18 14 

在此處若只有下圖的原始的數據則需要轉換一下(不知道有沒有更簡單的方法,向大家請教一下)
在這裏插入圖片描述
數據處理:

> status<-c(rep("治癒",231),rep("治癒",298),rep("死亡",97),rep("死亡",41))
> group<-c(rep("未服藥組",231),rep("服藥組",298),rep("未服藥組",97),rep("服藥組",41))
> data<-data.frame(status,group)

調用ggstatsplot包:(計算出95%置信區間並標記p值)

> ggstatsplot::ggbarstats(
+     data = data,
+     main = status,
+     nboot = 10,condition = group,
+     legend.title = "Group"
+ )
Note: 95% CI for effect size estimate was computed with 10 bootstrap samples.

# A tibble: 2 x 11
  group    counts  perc N         死亡   治癒   statistic  p.value parameter method                                   significance
  <fct>     <int> <dbl> <chr>     <chr>  <chr>      <dbl>    <dbl>     <dbl> <chr>                                    <chr>       
1 未服藥組    328  49.2 (n = 328) 29.57% 70.43%      54.7 1.37e-13         1 Chi-squared test for given probabilities ***         
2 服藥組      339  50.8 (n = 339) 12.09% 87.91%     195.  2.80e-44         1 Chi-squared test for given probabilities ***      

在這裏插入圖片描述可以看見p值以及卡方值都被標註出來了,同時還可以通過title參數來加入標題,還可以轉化繪圖類型(從堆砌直方圖轉化爲餅圖)。
詳細的參數以及說明已經放到另一篇博文中了,有興趣的朋友可以打開看看。
https://blog.csdn.net/m0_45248682/article/details/104086729

參考文獻:

https://www.jianshu.com/p/6547fa7e97c1
https://www.meiwen.com.cn/subject/qfmmvftx.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章