这可能是一个我找不到的明显问题,但我正在寻找 GLM 不同系列/链接函数的不同预测转换(在 R 代码中)。
例如,我知道当我使用family=poisson(link = "log")函数运行 GLM 时,我必须将预测值转换为exp(df$predictedvalue). 我该如何转型family=binomial(link = "logit")?我已经搜索过谷歌,但似乎无法找到执行此操作的代码。提前致谢!
规范的方法是使用$linkinv族的组件。这是一个函数,它为所使用的系列提供链接函数的反函数。
例如:
> b <- binomial()
> b$linkinv
function (eta)
.Call(C_logit_linkinv, eta)
<environment: namespace:stats>
Run Code Online (Sandbox Code Playgroud)
这是 logit 链接函数的逆函数,因为这是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)
Run Code Online (Sandbox Code Playgroud)
最后一行返回以下对象
> 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"
Run Code Online (Sandbox Code Playgroud)
该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
Run Code Online (Sandbox Code Playgroud)
当然,如果您知道反函数是什么,您可能可以在基 R 中找到它或编写自己的函数。前面提到的二项式族的 logit 链接函数的逆函数也可以在函数中找到plogis()。exp()可用于log()链接。
对于使用族机制的更复杂模型,您可能会发现从拟合模型中提取相关信息更容易,如上所示,以便您获得适合您正在使用的实现的函数。
| 归档时间: |
|
| 查看次数: |
738 次 |
| 最近记录: |