使用 broom::augment 函数获取响应规模的预测值

Posted

技术标签:

【中文标题】使用 broom::augment 函数获取响应规模的预测值【英文标题】:Getting predicted values at response scale using broom::augment function 【发布时间】:2016-04-05 16:54:07 【问题描述】:

我在R 中拟合glm 模型,并且可以使用predict.glm(object=fm1, type="response") 获得响应规模的预测值,其中fm1 是拟合模型。我想知道如何使用broom 包中的augment 函数在响应范围内获得预测值。下面给出了我的最小工作示例。

Dilution <- c(1/128, 1/64, 1/32, 1/16, 1/8, 1/4, 1/2, 1, 2, 4)
NoofPlates <- rep(x=5, times=10)
NoPositive <- c(0, 0, 2, 2, 3, 4, 5, 5, 5, 5)
Data <- data.frame(Dilution,  NoofPlates, NoPositive)


fm1 <- glm(formula=NoPositive/NoofPlates~log(Dilution),
           family=binomial("logit"), data=Data, weights=NoofPlates)
predict.glm(object=fm1, type="response")
# 1          2          3          4          5          6          7          8          9         10 
# 0.02415120 0.07081045 0.19005716 0.41946465 0.68990944 0.87262421 0.95474066 0.98483820 0.99502511 0.99837891 

library(broom)
broom::augment(x=fm1)

# NoPositive.NoofPlates log.Dilution. X.weights.    .fitted   .se.fit     .resid       .hat    .sigma
# 1                    0.0    -4.8520303          5 -3.6989736 1.1629494 -0.4944454 0.15937234 0.6483053
# 2                    0.0    -4.1588831          5 -2.5743062 0.8837030 -0.8569861 0.25691194 0.5662637
# 3                    0.4    -3.4657359          5 -1.4496388 0.6404560  1.0845988 0.31570923 0.4650405
# 4                    0.4    -2.7725887          5 -0.3249714 0.4901128 -0.0884021 0.29247321 0.6784308
# 5                    0.6    -2.0794415          5  0.7996960 0.5205868 -0.4249900 0.28989252 0.6523116
# 6                    0.8    -1.3862944          5  1.9243633 0.7089318 -0.4551979 0.27931425 0.6486704
# 7                    1.0    -0.6931472          5  3.0490307 0.9669186  0.6805552 0.20199632 0.6155754
# 8                    1.0     0.0000000          5  4.1736981 1.2522190  0.3908698 0.11707018 0.6611557
# 9                    1.0     0.6931472          5  5.2983655 1.5498215  0.2233227 0.05944982 0.6739965
# 10                   1.0     1.3862944          5  6.4230329 1.8538108  0.1273738 0.02781019 0.6778365
# .cooksd .std.resid
# 1  0.0139540988 -0.5392827
# 2  0.0886414317 -0.9941540
# 3  0.4826245827  1.3111391
# 4  0.0022725303 -0.1050972
# 5  0.0543073747 -0.5043322
# 6  0.0637954916 -0.5362006
# 7  0.0375920888  0.7618349
# 8  0.0057798939  0.4159767
# 9  0.0008399932  0.2302724
# 10 0.0001194412  0.1291827

【问题讨论】:

broom::augment(x=fm1, newdata = Data) 呢? @RomanLuštrik, broom::augment(x=fm1, newdata = Data) 给出与broom::augment(x=fm1) 相同的拟合值。任何想法。 你是对的。我想我很茫然,我不确定你所说的“响应规模的预测值”是什么意思。我将对此进行另一次挥杆。 broom::augment(x=fm1, newdata = Data, type.predict = "response") 呢? 感谢@RomanLuštrik 的帮助。 broom::augment(x=fm1, newdata = Data, type.predict = "response")。如果您更改评论以回答以供将来参考,将不胜感激。如果您还解释如何了解如何使用type.predict = "response",将不胜感激。早些时候我试过type = "response" 但没有用,args 也没有帮助我。无论如何感谢您的有用评论。 【参考方案1】:

对于广义线性模型,为了得出数学结果,需要使用link function 转换模型。对于高斯模型,这是恒等函数,但对于逻辑回归,我们使用 logit 函数(也可以是概率,这会响吗?)。这意味着您可以获得“原始”预测值或转换。这就是?predict.glm 提供type 参数的原因,它在augment 中转换为type.predict

broom::augment(x=fm1, newdata = Data, type.predict = "response")

【讨论】:

有道理,但你如何知道论点type.predict = "response"broom::augment的文档中没有提到它。 它在 ?augment.lm 中(可能应该有一个别名,以便 ?augment.glm 也能将其显示出来......)

以上是关于使用 broom::augment 函数获取响应规模的预测值的主要内容,如果未能解决你的问题,请参考以下文章

使用 Alamofire 从 API 获取响应

开玩笑地模拟获取响应的 blob 的 fetch() 函数

用递规函数求20的阶乘

案例评析姜金良张丹丹 | 网络爬虫技术使用过界的刑法规制 —— 基于案例的一个视角

如何从我得到的数组中获取特定的数组元素作为调用 axios.get() 调用的函数的响应 [重复]

用javascript获取HTML的button元素的id后,怎么使用javascript给这个元素添加响应函数