R语言用多重插补法估算相对风险
时间:2022-07-22
本文章向大家介绍R语言用多重插补法估算相对风险,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原文链接:http://tecdat.cn/?p=6379
在这里,我将用R中的一个小模拟示例进行说明。首先,我们使用X1和X2双变量法线和Y模拟大型数据集,其中Y遵循给定X1和X2的逻辑模型。
首先,我们模拟一个非常大的完整数据集:
#simulate完整数据
expit < - function(x){
EXP(X)/(1 + EXP(X))
}
n < - 100000
x < - mvrnorm(n,mu = c(0,0),Sigma =(c(1,0.2,0.2,1),nrow = 2))
x1 < - x [,1]
x2 < - x [,2]
y < - 1 *(runif(n)<expit(-3 + log(3)* x1 + log(3)* x2))
(Y)
[1] 0.11052
接下来,我们估计将X1从1更改为0的影响的边际风险比:
#estimate x1 = 1 vs x1 = 0的边际风险比,标准化为完整数据
#以后用于MI,我们将编写一个获取数据集并返回此估计值的函数
marginalRiskRatio < - function(inputData){
ymod < - glm(y~x1 + x2,family =“binomial”,data = inputData)
#predict风险在x1 = 0下
x1 = 1下的#predict risk
risk1 < - expit(coef(ymod)[1] + coef(ymod)[2] * 1 + (ymod)[3] * inputData $ x2)
#estimate边际风险比率
(risk1)/(risk0)
}
fullData < - data.frame(y = y,x1 = x1,x2 = x2)
marginalRiskRatio(fullData)
[1] 2.295438
接下来,我们使用Sullivan 等人考虑的一种机制,在Y和X2中缺少一些值:
根据Sullivan等人的说法,#make缺少一些数据
z1 < - x1 / 0.2 ^ 0.5
r_y < - 1 *(runif(n)<expit(2.5 + 2 * z1))
r_x2 < - 1 *(runif(n)<expit(2.5 + 2 * z1))
obsData < - fullData
obsData $ y [r_y == 0] < - NA
obsData $ x2 [r_x2 == 0] < - NA
现在我们可以在Y和X2中估算缺失的值。指定逻辑结果模型的缺失结果以及来自与逻辑结果模型兼容的插补模型的缺失协变量值:
numImps < - 10
imps < - (obsData,smtype =“logistic”,smformula =“y~x1 + x2”,
method = c(“”,“”,“norm”),m = numImps)
[1] "Outcome variable(s): y"
[1] "Passive variables: "
[1] "Partially obs. variables: x2"
[1] "Fully obs. substantive model variables: x1"
[1] "Imputation 1"
[1] "Imputing missing outcomes using specified substantive model."
[1] "Imputing: x2 using x1 plus outcome"
[1] "Imputation 2"
[1] "Imputation 3"
[1] "Imputation 4"
[1] "Imputation 5"
[1] "Imputation 6"
[1] "Imputation 7"
[1] "Imputation 8"
[1] "Imputation 9"
[1] "Imputation 10"
Warning message:
In smcfcs.core(originaldata, smtype, smformula, method, predictorMatrix, :
Rejection sampling failed 7 times (across all variables, iterations, and imputations). You may want to increase the rejection sampling limit.
最后,我们可以应用我们之前定义的函数来估算每个估算数据集的边际风险比,并使用鲁宾规则(即采用对数风险比的平均值)将它们结合起来:
estLogRR <- array(0, dim=numImps)
for (i in 1:numImps) {
[i] <- log(marginalRiskRatio(imps$impDatasets[[i]]))
}
#pooled estimate of log risk ratio is
mean(estLogRR)
[1] 0.8325685
#and estimate of risk ratio
exp(mean(estLogRR))
[1] 2.299217
我们在插补后得到一个非常接近完整数据估计的估计值。
- 开发 | 星际争霸2人工智能研究环境 SC2LE 初体验
- 开发 | 我做了12万条的影评分析,告诉你《战狼Ⅱ》都在说些啥
- JavaScript | 函数定义的两种方法;预编译与执行
- jQuery特效 | 导航底部横线跟随鼠标缓动
- JavaScript | 选中并获取多行文本框内容的效果
- JavaScript | 动画显示比例的投票效果
- 原生JS | 作用域
- 腾讯、网易、新浪新闻网站爬虫编写记录及评论格式分析
- 原生JS | 随机抽取不重复的数组元素 —— 有没有更好的方法?
- 原生JS | 逻辑操作符的短路问题
- 数字识别,从KNN,LR,SVM,RF到深度学习
- 原生JS | 数据类型检测,并没你想象的那么简单
- Excel 有哪些可能需要熟练掌握而很多人不会的技能?
- 原生JS | 值类型与引用类型变量
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- android自定义view用path画长方形
- 机器学习:如何快速从Python栈过渡到Scala栈
- Android studio实现加法软件
- 解决php extension 加载顺序问题
- Android 获取drawable目录图片 并存入指定文件的步骤详解
- php基于 swoole 实现的异步处理任务功能示例
- PHP中Session ID的实现原理实例分析
- php5.6.x到php7.0.x特性小结
- android自定义加减按钮
- php链式操作的实现方式分析
- php中的依赖注入实例详解
- Android通知栏前台服务的实现
- Laravel 默认邮箱登录改成用户名登录的实现方法
- Android Studio实现简单计算器APP
- 基于PHP实现微信小程序客服消息功能