很多新手剛才是總是覺得自己沒什么可以寫的,自己不知道選什么題材進行分析,使用scitable包后這個完全不用擔心,選題多到你只會擔心你寫不完,寫得不夠快。
今天演示一下使用scitable包深度挖掘一個陌生數據庫
先導入R包和數據
library(survival)
library(scitable)
setwd("E:/r/test")
bc<-read.csv("qztp.csv",sep=',',header=TRUE)
這個是個來自私人創建的醫院內部數據庫,我一個朋友的,變量我就不解釋了,這個數據有141個變量,605個數據。變量非常多。我們先把變量導出來
dput(names(bc))
像"SID", “REGDATE”, “REGUID”, "Q1"這些變遷。日期人員的變量沒有什么意義,直接刪掉,然后定義我們需要研究的全部變量
allVars <-c("Q1120", "Q657", "Q344", "Q27501", "Q27502", "Q27503", "Q18805", "Q13028", "Q27272", "Q27271", "Q27269", "Q27270", "Q79", "Q82", "Q27410_1", "Q27410_2", "Q27410_3", "Q27410_4", "Q27410_5", "Q27410_6", "Q27410_7", "Q27410_8", "Q27410_9", "Q27410_10", "Q27410_11", "Q27410_12", "Q27410_13", "Q27410_14", "Q27410_15", "Q27273", "Q27277", "Q27406", "Q27291", "Q3806", "Q27204", "Q27279", "Q27278", "Q27297", "Q27284", "Q27299", "Q27282", "Q27280", "Q27283", "Q27205", "Q27507_1", "Q27507_2", "Q27507_3", "Q27507_4", "Q27507_5", "Q27507_6", "Q27506_1", "Q27506_2", "Q27506_3", "Q27506_4", "Q27506_5", "Q27506_6", "Q27506_7", "Q27508_1", "Q27508_2", "Q27508_3", "Q27508_4", "Q27508_5", "Q27201", "Q1865", "Q27192", "Q27206", "Q27207", "Q27208", "Q27286", "Q27358", "Q27359", "Q27302_1", "Q27302_2", "Q27302_3", "Q27302_4", "Q27302_5", "Q27302_6", "Q27302_7", "Q27302_8", "Q27302_9", "Q27302_10", "Q27302_11", "Q27302_12", "Q27302_13", "Q27302_14", "Q20503", "Q27407", "Q27301", "Q434", "Q592", "Q1432", "Q441", "Q368", "Q897", "Q374", "Q1066", "Q802", "Q804", "Q1671", "Q6000", "Q371", "Q572", "Q1308", "Q27509", "Q27510_1", "Q27510_2", "Q27510_3", "Q27510_4", "Q27510_5", "Q27510_6", "Q27510_7", "Q27510_8", "Q27510_9", "Q27510_10", "Q27510_11", "Q27510_12", "Q27510_13", "Q27510_14", "Q79.1", "Q79.2", "BMI", "Q27272.NEW", "Q27271.NEW", "Q13028.NEW", "Q27406.CS", "Q27406.CS.NEW", "Q18805.NEW", "Q1432.T3", "BMI.CS", "Q1432.T3.CONT", "Q344.CS", "白球比", "血淋比", "Q27278.NEW", "Q27278.NEW1", "Q27406.NEW", "Q1432YA")
然后定義一下咱們研究的類型,統一定義為“glm”
family<-"glm" #你的研究類型
然后在organizedata2函數中放入數據和全部研究變量
out<-organizedata2(data = bc,allVars = allVars,family=family,username=username,token=token)
咱們可以看到函數報錯了,主要是Q27410_13這個變量只有一個類型,屬于不合格的變量需要刪掉
所以咱們要在allVars中刪除函數報錯,不合格的變量,直到沒有報錯位置。
有的人可能會說,變量太多了,自己一個個刪太麻煩了。函數還提供了一個探索模式
out<-organizedata2(data = bc,allVars = allVars,family=family,username=username,token=token,explore = T)
上圖函數提示上面的變量都被刪除了。咱們再out中提出整理好的數據,所有變量和分類變量
data<-out[["data"]]
fvars<-out[["factorvarout"]]
allVars<-out[["allVars"]]
整理好數據以后就可以進一步分析,假設咱們的研究變量、觀察變量和模型如下
x<-"Q1432" #你研究的變量
y<-"Q3806" #你的結局變量
family<-"glm" #你的研究類型
這個時候我想先挖掘一下數據,看看哪些變量和Y關聯
var<-allVars
tb2<-scitb2(data=data,x=var,y=y,family = family,username=username,token=token)
小于0.05的變量都是和結局有關聯的,咱們來看下咱們關心的變量"Q1432"和結局的情況
咱們發現"Q1432"和結局并無關聯,是不是這個變量就沒有意義了呢?別急著下結論,咱們來進行更加深度的交互效應挖掘,其實就是看各個亞組之間,"Q1432"和結局和結局的關系分層這里放入所有的交互變量就行
Interaction<-fvars
tb5.a<-scitb5a(data=data,x=x,y=y,Interaction=Interaction,cov = cov3,family=family,username=username,token=token)
做了交互效應分析以后,咱們發現兩個問題,雖然"Q1432"和結局并無關聯,但是再Q27278這個亞組,當Q27278等于0的時候,"Q1432"和結局是線性相關的,理論上有一個亞組相關就可以寫一篇文章。
為什么會這樣,舉個簡單的例子,假設你要研究尿酸和痛經的關系?我們知道男性不可能痛經的,但是男性喝酒可能尿酸又高,你的數據中要是男性過多的化就會對結果造成影響,因此,性別就是一個混雜因素,性別分層以后就能得到女性尿酸和痛經的關系,等于是個消除混雜的處理。
交互效應中深度挖掘數據關聯通常有兩種情況:
**1.**在觀察變量和結局沒有關聯,亞組卻發現了有關聯意義(咱們數據的情況)
**2.**在觀察變量和結局有關聯,亞組中卻發現關聯明顯減弱了,拮抗效應,交互P值小于0.05。
第二種情況我拿個文章舉例說明
空腹血糖濃度之間的縱向關聯中國高血壓成人首次卒中:葉酸的影響干預
這篇文章說的是血糖濃度越高,腦梗死發生率越高
但是使用葉酸以后,血糖高的患者,腦梗風險明顯下降
表明葉酸是保護因素,其實做法很簡單,就是把是否使用葉酸做個分類變量,然后做個交互效應分析而已。寫法可以參照這篇文章。
我還想說的是再亞組分段中,咱們把Q1432也做了分段,看到再2這個2亞組中也是有關聯的
表明有可能Q1432有一段是有線性關聯的,咱們可以通過ggmgcv函數來觀察
library(ggscitable)
out2<-ggmgcv(data = data,x="Q1432",y="Q3806",family = "gaussian",username=username,token=token)
最后發現Q1432其實和結局是非線性關聯,當Q1432大于120左右,Q1432和結局是線性關聯。具體分析還是要通過分段和閾值分析。
最后展望一下
Sctb2和scitb5函數都是線性關系的判斷,將來會編寫一個圖形化判斷非線性數據關系的函數
看文字不明白的還有視頻介紹
R語言使用scitable包深度挖掘一個陌生數據庫