R 中 GLM 预测中的变换族 Link 函数

Transform Family Link Functions in GLM predictions in R

这可能是一个我找不到的明显问题,但我正在为 GLM 的不同 family/link 函数寻找不同的预测转换(在 R 代码中)。

示例我知道当我 运行 具有 family=poisson(link = "log") 函数的 GLM 时,我必须将我的预测值转换为 exp(df$predictedvalue)。 如何转换 family=binomial(link = "logit")?我搜索了 google,但似乎找不到执行此操作的代码。提前致谢!

规范的方法是使用家族的 $linkinv 组件。这是一个函数,它为所使用的系列提供 link 函数的反函数。

例如:

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

最后一行returns以下对象

> 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 组件是包含所用 link 函数的反函数的函数,这里是反函数,因为这是 family 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 中找到它或编写您自己的函数。例如,前面提到的二项式族的 logit link 函数的反函数也可以在函数 plogis() 中找到。 exp() 可用于 log() link.

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