gpt4 book ai didi

r - 在 R 中的 GLM 预测中转换 Family Link 函数

转载 作者:行者123 更新时间:2023-12-02 15:03:02 25 4
gpt4 key购买 nike

这可能是一个我找不到的明显问题,但我正在为 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>

这是 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)

最后一行返回下面的对象

> 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

当然,如果您知道反函数是什么,您可能可以在 base R 中找到它或编写您自己的函数。例如,在函数 plogis() 中也可以找到前面提到的二项式族的 logit 链接函数的反函数。 exp() 可用于 log() 链接。

对于使用族机制的更复杂的模型,您可能会发现更容易从如上所示的拟合模型中提取相关信息,以便您获得适合您的实现的函数使用。

关于r - 在 R 中的 GLM 预测中转换 Family Link 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48331543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com