You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Firth惩罚逻辑回归出现无穷大卡方值的技术咨询

解答你的Firth惩罚逻辑回归相关问题

嘿,让我一步步帮你理清这些问题:

1. R中运行Firth惩罚逻辑回归的明显错误

你代码里藏了个关键的小失误:firth=FALSElogistf()函数默认是通过firth=TRUE来启用Firth惩罚逻辑回归的,你把这个参数设成FALSE的话,相当于直接跑了普通的逻辑回归,完全没用到你想要的Firth方法来解决准完全分离问题。这绝对是最需要先修正的点,把参数改成firth=TRUE再重新运行模型试试。

2. 无穷大卡方值是否合理?

这种无穷大的卡方值其实是普通逻辑回归遇到准完全分离时的典型“错误信号”——当存在某个自变量组合,对应的因变量全为0或全为1时,极大似然估计会直接发散,导致卡方统计量变成无穷大。你说交叉制表没发现零类别,但别忘了你用了weights = weight,加权后的有效单元格计数可能出现了“实际为零”的情况;或者是多个自变量组合起来才出现了分离,单变量的交叉制表根本查不出来。所以这个无穷大卡方值是“符合错误场景的表现”,但显然不是合理的分析结果,这也正是你需要启用Firth惩罚的核心原因。

3. 除交叉制表外,检测准完全分离的方法

这里有几个R里实用的方法,帮你定位分离的来源:

  • detectseparation包的detectSeparation()函数:这个工具就是专门用来检测逻辑回归中的分离问题的,它会直接告诉你是哪些自变量组合导致了分离,用法很直观:
    library(detectseparation)
    detectSeparation(restaurant_spender ~ alc_spender + income_quintiles + eduation_hh, 
                     data = alcohol, weights = weight, family = binomial())
    
  • 查看普通逻辑回归的拟合细节:先跑一遍普通的glm()逻辑回归,看系数的标准误——如果某个系数的标准误大得离谱(比如几千、几万),那这个变量大概率参与了分离;另外,summary()输出里如果出现“fitted probabilities numerically 0 or 1 occurred”的警告,也直接提示存在分离问题。
  • 多变量组合分组检查:把多个自变量交叉分组(比如income_quintiles + eduation_hh + alc_spender),然后计算每个组里restaurant_spender的加权平均取值,如果有组的平均值是0或1,那这个组就是分离的来源。

最后补充一句:你的样本量超大(20万+),Firth惩罚在大样本下依然能很好地发挥作用,修正参数后再看结果,卡方值和系数应该都会恢复正常啦。


内容的提问来源于stack exchange,提问作者Isobel M

火山引擎 最新活动