全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2692 2
2020-10-07
请教各位,现在我想尝试一个实例数据数据分析,数据是因果领域很出名的lalonde(DW-PSID)数据集,treat变量有185个取值1,另外2490个取值0。以treat变量为因变量对数据集中的10个协变量做logistic回归,会出现警告信息,代码和警告信息如下:
library(qte)
rm(list = ls())
data(lalonde)
myglm <- glm(treat~age+education+black+hispanic+ married+nodegree+re74+ re75+ u74+ u75, data = lalonde.psid, family = binomial("logit"))


##Warning message:
glm.fit:拟合機率算出来是数值零或一

请问这种logistic回归的警告如何消除? 看了一下博客和论坛里的logistic回归相关说明,有些人说是因为数据过于不平衡,treat取值中0太多,1太少导致,但是我看使用这个数据集的相关参考文献中他们就是对这种不平衡数据做了Logistic回归,为什么他们没有出现这种问题?  (我后来也试了类似于bayesglm这种修正的logistic回归函数,警告信息依然存在)
因为后续的方法需要用到倾向得分的估计,也就是这个logitic回归的拟合值,因此需要一个合适的求解方法,求大佬解惑,十分感谢!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-10-8 21:25:04
报错是lalonde数据集本身的问题,不是treat取值不均衡,而是treat划分的太“标准”了,导致过拟合。有的观点说,过拟合的glm不可用,可以理解。
实际上,用lalonde.psid数据直接作logistic glm,初步结果可以发现education和re74两个变量不显著,另外black和espanic两个变量非此即彼其实用一个就可以啦,如果我们减少几个变量,再进logistic glm,报错就不会出现了。当然这种处理合不合适还需要验证,比如做个ROC看一下。
我个人认为,降维处理应该是可行的。
第二种处理方法是,采用MASS包的lda(),直接进行判别分析。基于原数据集过于“标准”的情况,我们采用判别分析是可行的。
第三种方法可以试试随即森林分析、lasso之类的,应该比glm效果好一些,再做一做交叉验证。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-10-12 12:21:20
llb_321 发表于 2020-10-8 21:25
报错是lalonde数据集本身的问题,不是treat取值不均衡,而是treat划分的太“标准”了,导致过拟合。有的观点 ...
好的,谢谢您的回复,我试一下
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群