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包深度挖掘一个陌生数据库

相关推荐
樱花的浪漫1 天前
Cuda reduce算子实现与优化
数据库·人工智能·深度学习·神经网络·机器学习·自然语言处理
啊森要自信1 天前
【MySQL 数据库】MySQL用户管理
android·c语言·开发语言·数据库·mysql
kkkkk0211061 天前
Redis八股
数据库·redis·缓存
Liu1bo1 天前
【MySQL】表的约束
linux·数据库·mysql
胖胖的战士1 天前
Mysql 数据库迁移
数据库·mysql
czhc11400756631 天前
LINUX1012 mysql GLIBC安装
数据库·mysql
DemonAvenger1 天前
深入 Redis Hash:从原理到实战,10 年经验的后端工程师带你玩转哈希结构
数据库·redis·性能优化
❥ღ Komo·1 天前
PHP数据库操作全攻略
数据库·oracle
程序新视界1 天前
MySQL的整体架构及功能详解
数据库·后端·mysql
ANYOLY1 天前
MySQL索引指南
数据库·mysql