原文链接:http://tecdat.cn/?p=6366

原文出处:拓端数据部落公众号

最近我被问到我的 - [R和Stata的软件包是否能够适应协变量之间的非线性关系。答案是肯定的,在这篇文章中,我将说明如何做到这一点。

为了说明,我们将模拟具有两个协变量X1和X2以及连续结果ý的非常大的数据集。

 set.seed(123)
n < -  10000
x1 < -  rnorm(n)
x2 < -  x1 ^ 2 + rnorm(n)
y < -  x1 + x2 + rnorm(n)[(runif(n)<expit(y))] < -  NA
mydata < -  data.frame(x1, X2,Y)
 

因此,模型的真实系数是0(截距)。注意,实体模型中没有非线性,但x2对x1的依赖性存在非线性。

imps1 < -   (mydata,smtype =“lm” ,numit = 50,method = c(“”,“norm”,“”))
impobj < -  imputationList(imps1 $ impDatasets)
 

输出:

[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:  x2  using  x1,x1sq  plus outcome"
[1] "Imputation  2"
[1] "Imputation  3"
[1] "Imputation  4"
[1] "Imputation  5"
Warning message:
In smcfcs.core(originaldata, smtype, smformula, method, predictorMatrix,  :Rejection sampling failed 503 times (across all variables, iterations, and imputations). You may want to increase the rejection sampling limit.Multiple imputation results:with(impobj, lm(y ~ x1 + x2))MIcombine.default(models)results          se      (lower      upper) missInfo
(Intercept) -0.0274234 0.015746687 -0.06054163 0.005694823     53 %
x1           1.0075646 0.018740270  0.96407720 1.051052088     77 %
x2           1.0026004 0.008043873  0.98549090 1.019709850     56 %

我们看到x1的截距和系数的估计有明显的偏差。假设x2遵循以x1为条件的线性回归模型,smcfcs正在估算x2中的缺失值,条件均值在x1中是线性的。这样做意味着X2平方会在X2的插补模型中自动调整:

mydata $ x1sq < -  mydata $ x1 ^ 2
imps2 < -   (mydata,smtype =“lm”,smformula =“y~x1 + x2 + x1sq”,numit = 50,method = c(“”,“norm”, “”,“”))
impobj < -  imputationList(imps2 $ impDatasets)

输出:

[1] "Outcome variable(s): y"
[1] "Passive variables: x1sq"
[1] "Partially obs. variables: x1,x2"
[1] "Fully obs. substantive model variables: "
[1] "Imputation  1"
[1] "Imputing:  x1  using  x2  plus outcome"
[1] "Imputing:  x2  using  x1,x1sq  plus outcome"
[1] "Imputation  2"
[1] "Imputation  3"
[1] "Imputation  4"
[1] "Imputation  5"
Warning message:
In smcfcs.core(originaldata, smtype, smformula, method, predictorMatrix,  :Rejection sampling failed 17260 times (across all variables, iterations, and imputations). You may want to increase the rejection sampling limit.Multiple imputation results:with(impobj, lm(y ~ x1 + x2))MIcombine.default(models)results         se    (lower    upper) missInfo
(Intercept) 0.2687343 0.04002737 0.1694782 0.3679903     88 %
x1          1.0276229 0.03432337 0.9436348 1.1116109     86 %
x2          1.0742299 0.01635284 1.0385746 1.1098852     64 %

我们现在估计与数据生成机制中使用的真实值非常接近。

需要注意的一点是,我们已经修改了假设为x2 | X1的模型,但我们还将实体模型(至少是用作插补过程的一部分的模型)修改为包含x1sq的模型。

predictorMatrix < -  array(0,dim = c(4,4))
predictorMatrix [2,c(1,4)] < -  1
imps3 < -   (mydata,smtype =“lm”,smformula =“y~x1 + x2“,numit = 50,predictorMatrix = predictorMatrix )
impobj < -  imputationList(imps3 $ impDatasets)
models < -  with(impobj,lm(y~x1) + x2))

输出:

[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:  x2  using  x1,x1sq  plus outcome"
[1] "Imputation  2"
[1] "Imputation  3"
[1] "Imputation  4"
[1] "Imputation  5"
Warning message:
In smcfcs.core(originaldata, smtype, smformula, method, predictorMatrix,  :Rejection sampling failed 503 times (across all variables, iterations, and imputations). You may want to increase the rejection sampling limit.Multiple imputation results:with(impobj, lm(y ~ x1 + x2))MIcombine.default(models)results          se      (lower      upper) missInfo
(Intercept) -0.0274234 0.015746687 -0.06054163 0.005694823     53 %
x1           1.0075646 0.018740270  0.96407720 1.051052088     77 %
x2           1.0026004 0.008043873  0.98549090 1.019709850     56 %

这里完全观察到x1。如果x1也有一些缺失值怎么办?然后我们需要告诉smcfcs如何估算x1,然后被动地估算x1sq变量。鉴于我们对真实数据生成模型的了解,我们应该如何归认于x1?然而,我们将继续,要求smcfcs使用规范方法来估算X1:

mydata$x1[runif(n)<0.25] <- NA
mydata$x1sq <- mydata$x1^2
predictorMatrix[1,2] <- 1
imps4 <-  (mydata, smtype="lm", smformula = "y~x1+x2", numit=50,predictorMatrix=predictorMatrix,  =c("norm","norm","","x1^2"))
impobj <-  (imps4$impDatasets)
models <- with(impobj, lm(y~x1+x2))
summary(MIcombine(models))

输出:

[1] "Outcome variable(s): y"
[1] "Passive variables: x1sq"
[1] "Partially obs. variables: x1,x2"
[1] "Fully obs. substantive model variables: "
[1] "Imputation  1"
[1] "Imputing:  x1  using  x2  plus outcome"
[1] "Imputing:  x2  using  x1,x1sq  plus outcome"
[1] "Imputation  2"
[1] "Imputation  3"
[1] "Imputation  4"
[1] "Imputation  5"
Warning message:
In smcfcs.core(originaldata, smtype, smformula, method, predictorMatrix,  :Rejection sampling failed 17260 times (across all variables, iterations, and imputations). You may want to increase the rejection sampling limit.Multiple imputation results:with(impobj, lm(y ~ x1 + x2))MIcombine.default(models)results         se    (lower    upper) missInfo
(Intercept) 0.2687343 0.04002737 0.1694782 0.3679903     88 %
x1          1.0276229 0.03432337 0.9436348 1.1116109     86 %
x2          1.0742299 0.01635284 1.0385746 1.1098852     64 %

这个例子也说明了smcfcs的一个理论问题 - 虽然它从一个与指定的实体或结果模型兼容的插补模型中推算每个协变量,但这并不意味着这些插补模型中的每一个都是相互兼容的。具体而言,用于分配其他协变量的模型可能不兼容。

更有效的方法是为数据指定单个联合模型,并在其隐含的条件分布下进行估算。例如,这可以使用JAGS来实现。

非常感谢您阅读本文,有任何问题请在下方留言!

拓端tecdat|R语言分析协变量之间的非线性关系相关推荐

  1. 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

    最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...

  2. 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系

    最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...

  3. 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例

    最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...

  4. 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测

    最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...

  5. R语言分析蛋白质组学数据:飞行时间质谱(MALDI-TOF)法、峰值检测、多光谱比较...

    全文链接:http://tecdat.cn/?p=30051 •研究生物体产生的全部蛋白质. • Foci:鉴定.结构测定.生物标志物.通路.表达(点击文末"阅读原文"获取完整代码 ...

  6. 【视频】KMEANS均值聚类和层次聚类:R语言分析生活幸福指数可视化|数据分享...

    原文链接:http://tecdat.cn/?p=24198 聚类是将总体或数据点划分为多个组的任务,以使同一组中的数据点与同一组中的其他数据点更相似,而与其他组中的数据点不相似.它基本上是基于它们之 ...

  7. r语言pls分析_零基础学习R语言分析GEO

    关于零基础用R语言分析GEO的视频已更新完,发布在B站,有兴趣的小伙伴可以移驾到B站,我的B站号:I_am_Becky 之前录制过一系列关于零代码分析GEO数据的,但是这样画出来的图太low了,所以学 ...

  8. 【视频】主成分分析PCA降维方法和R语言分析葡萄酒可视化实例|数据分享

    最近我们被客户要求撰写关于主成分分析PCA的研究报告,包括一些图形和统计输出.降维技术之一是主成分分析 (PCA) 算法,该算法将可能相关变量的一组观察值转换为一组线性不相关变量.在本文中,我们将讨论 ...

  9. 如何用r语言分析数据

    如果要使用 R 语言分析数据,通常需要以下步骤: 导入数据:可以从多种格式的数据文件(如 CSV,Excel 等)中导入数据,并将其存储为 R 中的数据框(data.frame). 数据清理:检查数据 ...

  10. 拓端tecdat荣获掘金社区入驻新人奖

    2021年7月,由掘金发起了"入驻成长礼"颁奖活动.本次活动邀请到知名开发者.服务机构代表等业界人士. 据了解,掘金社区"新入驻创作者礼"主要对已经积累了一定历 ...

最新文章

  1. java,js,jstl,EL的简单交互
  2. G1回收器:我怎么知道你是什么时候的垃圾?
  3. php common errors
  4. 如何理解左操作数必须为左值
  5. asp.net中通过HyperLinkField传值
  6. Android 基本控件使用
  7. 用于编写configure.in的Config语言简介
  8. 蓝桥杯安慰奶牛java_最小生成树——安慰奶牛(蓝桥杯试题集)
  9. 代理模式———动态代理
  10. 使用 VMware vRealize Automation 6.2.1 中的 Remote Console (VMRC) 选项连接到资源失败,并显示以下错误: 无法建立远程控制台连接
  11. RoomIt屏幕画笔工具
  12. 数字化转型背景下的“新IT职业教育”
  13. 「PKUSC2018」最大前缀和 LOJ#6433BZOJ5369
  14. 计算机电子表格编辑栏,#wps显示不出来excle#WPSexcel怎么把表格里的内容全部显示在编辑栏里...
  15. 《计算之魂》1.11.2--阅读心得
  16. T字形路口小车如何要c语言编程,科二皮卡怎么找30公分线
  17. 马化腾: 你想想不充钱能不能玩这游戏? 丁磊:你仔细想想不充钱能不能玩这游戏? 张栋:CNM我就问你不充钱能玩我运营的游戏吗?
  18. RTP协议全解析(H264码流和PS流
  19. 前端根据后端信息动态拼接html
  20. Shiro中的Realms

热门文章

  1. CSS 3的display:盒类型详解
  2. php 日期和时间 (转)
  3. Aria2 一键安装管理脚本 与Snap安装Nextcloud 与离线下载百度云
  4. [java多线程]高并发List与Map
  5. Android自定义ProgressBar样式:渐变圆角水平进度条
  6. 常用的DIV+CSS网站布局的基本框架结构-完整版
  7. 一些实用但不为人知的Unix命令
  8. Android驱动工程师职位要求
  9. markdown的基本使用方法
  10. RPC和Message Passing比较