这可能是一个我无法找到的明显问题,但我正在为GLM的不同族/链接函数寻找不同的预测变换(在R代码中)。
示例我知道当我运行带有family=poisson(link = "log")
函数的GLM时,我必须将我的预测值转换为exp(df$predictedvalue)
。
如何转换family=binomial(link = "logit")
?我已经搜索谷歌,但似乎无法找到代码来做到这一点。提前致谢!
答案 0 :(得分:4)
规范方法是使用该系列的$linkinv
组件。这是一个为所用系列提供链接函数反转的函数。
例如:
> b <- binomial()
> b$linkinv
function (eta)
.Call(C_logit_linkinv, eta)
<environment: namespace:stats>
是logit link函数的反函数,因为它是binomial()
的默认值。
您可以使用family()
函数从拟合模型中提取族:
## from ?glm
clotting <- data.frame(u = c(5,10,15,20,30,40,60,80,100),
lot1 = c(118,58,42,35,27,25,21,19,18),
lot2 = c(69,35,26,21,18,16,13,12,12))
mod <- glm(lot1 ~ log(u), data = clotting, family = Gamma)
fam <- family(mod)
最后一行返回以下对象
> str(fam)
List of 12
$ family : chr "Gamma"
$ link : chr "inverse"
$ linkfun :function (mu)
$ linkinv :function (eta)
$ variance :function (mu)
$ dev.resids:function (y, mu, wt)
$ aic :function (y, n, mu, wt, dev)
$ mu.eta :function (eta)
$ initialize: expression({ if (any(y <= 0)) stop("non-positive values not allowed for the 'gamma' family") n <- rep.int(1, n| __truncated__
$ validmu :function (mu)
$ valideta :function (eta)
$ simulate :function (object, nsim)
- attr(*, "class")= chr "family"
linkinv
组件是包含所用链接函数的反函数的函数,此处为反函数,因为这是函数Gamma
的默认值。
如果您从此系列预测,您可以使用该功能将值转换为响应比例
> pred <- predict(mod, type = "link")
> fam$linkinv(pred)
1 2 3 4 5 6 7 8
122.85904 53.26389 40.00713 34.00264 28.06578 24.97221 21.61432 19.73182
9
18.48317
当然,如果您知道反函数是什么,您可以在基数R中找到它或编写自己的函数。前面提到的二项式族的logit链接函数的逆也可以在函数plogis()
中找到。 exp()
可用于log()
链接。
对于使用家庭机制的更复杂的模型,您可能会发现如上所示从拟合模型中提取相关信息更容易,这样您就可以获得实现的正确功能使用