R语言对二分连续变量进行逻辑回归数据分析
原文链接:http://tecdat.cn/?p=10067
教育或医学的标准情况是我们有一项连续的措施,但随后我们对那些具有临床/实践意义的措施有了切入点。一个例子是BMI。您可能有一个成绩测试,合格分数为70。研究人员有时可能会对30岁以上的BMI建模感兴趣,或者对通过/失败作的结果感兴趣。实质性问题通常落在对某人超过/低于此临床上显着阈值的概率进行建模的范畴之内。因此,我们将连续测量结果分为两部分,并使用逻辑回归等方法分析。
回到介绍性统计信息,您会听到类似的信息:大多数人宁愿使用规则线性回归而不是逻辑回归。但是,在上述情况下,出于实质性原因,我们经常有理由将结果一分为二。
因此,这是建议:
- 估计连续结果的线性模型
- 可以对它们取幂以获取赔率。
- 我们不在乎线性回归的截距,因为它会受到阈值的影响。
那么这种方法在实践中如何起作用?在使用逻辑回归分析之前尝试在不同阈值上将连续变量二等分的任何人都知道,估计的系数确实会发生变化,并且它们会发生很大的变化!这是否与结果不应依赖阈值的说法相符?
我们可以使用模拟进行检查。首先,我将逐步介绍数据生成过程:
set.seed(12345) # Set seed for reproducible results# Our single x variable is binary with 50% 0s and 50% 1s# so like random assignment to treatment and control# Our sample size is 300dat <- data.frame(x = rbinom(300, 1, .5))# Outcome ys = intercept of -0.5, the coefficient of x is 1 and there is logistic errordat$yc <- -.5 + dat$x + rlogis(nrow(dat))
yc
:
然后,我们可以yc
在各个点上将结果分为两部分,以查看x
当使用逻辑回归时是否会影响估计系数:
x0.9619012 x1.002632 x0.8382662
数字有些不同。如果我们yc
直接将线性回归应用?
# First, we create an equation to extract the coefficients and# transform them using the transform to logit formula above. x1.157362
所有这些数字彼此之间并没有太大差异。如果我们对它们求幂以获得比值比,它们的差异会更大。现在,我们可以重复此过程几次,以比较结果中的模式。我重复2500次:
vlt.x lt.x mt.x ht.x vht.x ols.x1.0252116 1.0020822 1.0049156 1.0101613 1.0267511 0.9983772
这些数字是不同方法的平均回归系数。
v代表非常,l / m / h代表低/中/高,t代表阈值,ols是回归结果。因此,例如,vlt.x是来自极低阈值模型的平均x系数。
所有方法的这些估计系数平均约为1,这就是我们编写的程序!每个方法的可变性如何?
boxplot(res)
我们看到,尽管平均值大致相同,但是当阈值极高时,估计的系数就更加可变。最小的可变系数是变换后的线性回归系数,因此当我们使用线性回归方法时,结果有些稳定。阈值越极端,我们获得的可变系数就越多。我们经常将数据二分法用于极端情况下的逻辑回归。
不同方法之间的估计系数如何?
我们看到,尽管所有方法声称x
的系数y
平均为1,但阈值非常低时的估计系数与阈值非常高时的估计系数非常弱相关(.13)。这些差异仅反映阈值,并且可能在实际数据分析中产生误导。人们可能会相信,在不同的阈值处的估计值差异很大,而在不同的阈值下却代表不同的人口参数(真实系数)。与每种方法最相关的方法是线性回归方法。线性回归方法与中阈值结果最相关。它也是最稳定的。
从本质上讲,当将数据按极端阈值二等分时,我们是否应该相信这些发现?还是应该只使用变换后的线性回归系数?
在结果的不同分位数处,预测变量和结果之间的关系也可能不同--分位数回归情况探讨。
- 将已有项目代码通过命令行方式上传到github,简易傻瓜教程(图文)将已有项目代码通过命令行方式上传到github,傻瓜教程(图文)1. 创建一个github项目2. 在Repository name
- mac执行git命令出现xcrun: error: invalid active developer path解决方法
- centos修改主机名
- SSH免密登录,RSA认证登录
- Zookeeper安装部署调试命令
- Facebook 直播是如何承受海量压力的?
- 将 Redis 作为图数据库
- 爬取 Stackoverflow 100 万条问答并简单分析
- Python: 早点知道这些就不会这样了
- 第一个参数:initScans(job)
- Mysql 高可用 InnoDB Cluster 多节点搭建过程
- 用MapReduce分析Hbase将结果插入mysql中
- 敲敲级简单的鉴别H图片的小程序
- processArgs方法解读
- 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 数组属性和方法
- 这也太简单了吧!一个函数完成数据相关性热图计算和展示
- CentOS7安装Zookeeper
- CentOS7卸载OpenJDK,然后安装Oracle JDK
- Java停止线程的四种方法
- Educational Codeforces Round 95 (Rated for Div. 2) A-D
- Go服务迁到K8s后老抽风重启? 记一次完整的线上问题解决过程
- PHP的另一个高效缓存扩展:Yac
- 在PHP中操作临时文件
- 在线IDE开发入门之从零实现一个在线代码编辑器
- 树莓派4裸机基础教程:从hello world开始
- 基于f2从零实现移动端可视化编辑器
- GORM V2 读操作
- Kubernetes 1.19.0——Pod(1)
- GORM V2 写操作
- Selenium自动化最佳实践技巧(下)