R语言使用scitable包交互效应深度挖掘一个陌生数据库

很多新手刚才是总是觉得自己没什么可以写的,自己不知道选什么题材进行分析,使用scitable包后这个完全不用担心,选题多到你只会担心你写不完,写得不够快。

今天演示一下使用scitable包深度挖掘一个陌生数据库

先导入R包和数据

r 复制代码
library(survival)
library(scitable)
setwd("E:/r/test")
bc<-read.csv("qztp.csv",sep=',',header=TRUE)

这个是个来自私人创建的医院内部数据库,我一个朋友的,变量我就不解释了,这个数据有141个变量,605个数据。变量非常多。我们先把变量导出来

r 复制代码
dput(names(bc))

像"SID", "REGDATE", "REGUID", "Q1"这些变迁。日期人员的变量没有什么意义,直接删掉,然后定义我们需要研究的全部变量

r 复制代码
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"

r 复制代码
family<-"glm"   #你的研究类型

然后在organizedata2函数中放入数据和全部研究变量

r 复制代码
out<-organizedata2(data = bc,allVars = allVars,family=family,username=username,token=token)

咱们可以看到函数报错了,主要是Q27410_13这个变量只有一个类型,属于不合格的变量需要删掉

所以咱们要在allVars中删除函数报错,不合格的变量,直到没有报错位置。

有的人可能会说,变量太多了,自己一个个删太麻烦了。函数还提供了一个探索模式

r 复制代码
out<-organizedata2(data = bc,allVars = allVars,family=family,username=username,token=token,explore = T)

上图函数提示上面的变量都被删除了。咱们再out中提出整理好的数据,所有变量和分类变量

r 复制代码
data<-out[["data"]]
fvars<-out[["factorvarout"]]
allVars<-out[["allVars"]]

整理好数据以后就可以进一步分析,假设咱们的研究变量、观察变量和模型如下

r 复制代码
x<-"Q1432"    #你研究的变量
y<-"Q3806"    #你的结局变量
family<-"glm"   #你的研究类型

这个时候我想先挖掘一下数据,看看哪些变量和Y关联

r 复制代码
var<-allVars
tb2<-scitb2(data=data,x=var,y=y,family = family,username=username,token=token)

小于0.05的变量都是和结局有关联的,咱们来看下咱们关心的变量"Q1432"和结局的情况

咱们发现"Q1432"和结局并无关联,是不是这个变量就没有意义了呢?别急着下结论,咱们来进行更加深度的交互效应挖掘,其实就是看各个亚组之间,"Q1432"和结局和结局的关系分层这里放入所有的交互变量就行

r 复制代码
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函数来观察

r 复制代码
library(ggscitable)
out2<-ggmgcv(data = data,x="Q1432",y="Q3806",family = "gaussian",username=username,token=token)

最后发现Q1432其实和结局是非线性关联,当Q1432大于120左右,Q1432和结局是线性关联。具体分析还是要通过分段和阈值分析。

最后展望一下

Sctb2和scitb5函数都是线性关系的判断,将来会编写一个图形化判断非线性数据关系的函数

看文字不明白的还有视频介绍

R语言使用scitable包深度挖掘一个陌生数据库

相关推荐
XY.散人21 分钟前
初识Redis · list和hash类型
数据库·redis·哈希算法
Arbori_2621521 分钟前
Oracle WITH 子句(也称为 公共表表达式,Common Table Expression,CTE)
数据库·oracle
Tapdata37 分钟前
拒绝停服, 随时回退:Sybase 到 Postgresql 的无缝数据库双向迁移方案
数据库
moxiaoran57531 小时前
mysql自动赋值
数据库·mysql
结衣结衣.1 小时前
【MySQL】数据库基础
数据库·mysql
博界IT精灵1 小时前
SQL语言
数据库·sql
小样vvv1 小时前
【微服务管理】注册中心:分布式系统的基石
java·数据库·微服务
struggle20251 小时前
Trinity三位一体开源程序是可解释的 AI 分析工具和 3D 可视化
数据库·人工智能·学习·3d·开源·自动化
清同趣科研2 小时前
扩增子分析|基于R语言microeco包进行微生物群落网络分析(network网络、Zi-Pi关键物种和subnet子网络图)
r语言
敲敲敲-敲代码3 小时前
【数据库系统概论】第3章 SQL(四)视图(超详细)
数据库