使用glm函数做泊松回归预测时出现log(time)错误的排查与解决
错误原因与修复方案
错误解释
Error in log(time) : non-numeric argument to mathematical function 本质是:你的模型公式包含offset(log(time)),调用predict时,传入的newdata里没有提供time变量,程序找不到这个变量来计算offset项,因此抛出错误。
修复方法
根据你的预测需求,有两种处理方式:
1. 预测特定时间长度下的失败数/事件数
如果你想预测随访时间为某一特定值时的失败事件数,只需在newdata中补充time的取值即可。比如预测随访100天的情况:
predict(poisson.fit, newdata = data.frame(ph.karno = 50, age = 55, time = 100), type="response")
2. 预测单位时间内的失败率
如果你的目标是预测单位时间的失败率,可以调整建模和预测的方式:
- 首先调整建模代码(两种写法等价,选一种即可):
# 写法1:在公式外指定offset poisson.fit = glm(status ~ ph.karno + age, offset = log(time), family = "poisson", data = lung) # 写法2:保持公式内的offset,和原代码一致 poisson.fit = glm(status ~ offset(log(time)) + ph.karno + age, family = "poisson", data = lung)
- 预测时,通过
offset参数传入单位时间的log值(比如time=1,对应log(1)):
predict(poisson.fit, newdata = data.frame(ph.karno = 50, age = 55), offset = log(1), type="response")
如果需要预测其他时间长度的率,只需把offset里的log(1)换成对应时间的log值,比如log(200)代表随访200天的率。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

