调整 GLM 时出错:eval(family$initialize) 出错

Error when adjusting a GLM: Error in eval(family$initialize)

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

必须注意,响应变量 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 

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

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

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

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

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