【问题标题】:Error when adjusting a GLM: Error in eval(family$initialize)调整 GLM 时出错:eval 中的错误(family$initialize)
【发布时间】:2021-08-02 20:23:27
【问题描述】:

我正在尝试调整下面定义的广义线性模型:

需要注意的是,响应变量Var1和回归变量Var2的值为零,为此添加了一个常数以避免在应用日志时出现问题。

model = glm(Var1+2 ~ log(Var2+2) + offset(log(Var3/Var4)), 
family = gaussian(link = "log"), data = data2)

但是,我在使用hnp 函数执行诊断分析图表时遇到错误,该函数表示为:

library(hnp)
hnp(model)
Gaussian model (glm object) 
Error in eval(family$initialize) : 
  cannot find valid starting values: please specify some

为了规避这种情况,我尝试手动执行,然后进行图的构建,但是错误信息仍然存在。

dfun <- function(obj) resid(obj)

sfun <- function(n, obj) simulate(obj)[[1]]

ffun <- function(resp) glm(resp ~ log(Var2+2) + offset(log(Var3/Var4)), 
family = gaussian(link = "log"), data = data2)

hnp(model, newclass = TRUE, diagfun = dfun, simfun = sfun, fitfun = ffun)

 Error in eval(family$initialize) : 
  cannot find valid starting values: please specify some 

使用了一些指导方针,其中我找到了尝试解决问题的信息,例如考虑初始值以在线性预测器和均值中初始化估计算法,但是,这些还不足以解决问题,见下面的计算例程:

fit = lm(Var1+2 ~ log(Var2+2) + offset(log(Var3/Var4)), data=data2)
coefficients(fit)
 (Intercept) log(Var2+2)
    32.961103     -8.283306

model = glm(Var1+2 ~ log(Var2+2) + offset(log(Var3/Var4)), 
family = gaussian(link = "log"), start = c(32.96, -8.28), data = data2)
hnp(model)

Error in eval(family$initialize) : 
  cannot find valid starting values: please specify some 

看到即使尝试手动实现半正态图,错误仍然存​​在。

dfun <- function(obj) resid(obj)

sfun <- function(n, obj) simulate(obj)[[1]]

ffun <- function(resp) glm(resp ~ log(Var2+2) + offset(log(Var3/Var4)), 
family = gaussian(link = "log"), data = data2, start = c(32.96, -8.28))

hnp(model, newclass = TRUE, diagfun = dfun, simfun = sfun, fitfun = ffun)

 Error in eval(family$initialize) : 
  cannot find valid starting values: please specify some 

我也尝试通过从数据库中删除零来重新调整模型,但是我没有得到任何解决问题的方法,即它仍然存在。

【问题讨论】:

  • 你真的想要一个带有日志链接的高斯响应吗?在拟合模型之前使用伽马响应或对数变换变量更为常见
  • 您好,感谢您的反馈。但是,我会尝试更好地详细说明我的问题。我的回答不承认“正确的不对称性”,那么,我使用伽玛分布是否正确?我在变量中使用日志的事实是由于存在一些等于零的值,所以我对带有链接日志的高斯响应感兴趣。你能帮我解决一下吗?
  • 嘿@BrenoS。我认为零并不能证明使用日志链接是合理的。您的错误没有呈指数分布,我希望现在这一点很清楚

标签: r statistics regression data-modeling glm


【解决方案1】:

我怀疑您要拟合的是针对您的预测变量的对数转换响应变量。您可以更详细地了解the difference between a log link glm and a log transformed response variable。本质上,当您使用日志链接时,您假设错误是指数级的。我对hnp 不太熟悉,但我猜它模拟响应变量时存在问题。

如果我使用提供的数据像这样运行你的回归,它看起来没问题

  data2$Y = with(data2, log( (Var1+2)/Var3/Var4))

model = glm(Y ~ log(Var2+2), data = data2)
hnp(model)

【讨论】:

  • 您好,感谢您的反馈。但是,我会尝试更好地详细说明我的问题。我在变量中使用日志的事实是由于存在一些等于零的值。这部分代码data2$Y = with (data2, log ((Var1 + 2) / Var3 / Var4)),你是在根据预测变量对我的响应变量进行转换吗?你能解释一下你为什么这样做吗?你介绍的模型和我上面介绍的模型一样吗?对不起,我不明白。
  • 您的问题分为两部分。第一部分是统计部分,即如何对响应变量进行建模。我认为这很可能超出了 SO 的范围,更好地进行交叉验证。
  • 第二部分,为什么你会收到hnp 的错误,正如我所解释的,这带有日志链接。除非您非常确定自己在做什么,否则不要使用它。使用上面的代码,我转换了您的响应变量。可以从您的回复中减去偏移量,同意吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多