如何解决使用 match.call() 更新 glm
假设我有以下模型:
mod1 <- glm(cyl ~ mpg + disp,data = mtcars)
fm_new <- formula(cyl ~ mpg + disp + offset(log(gear)))
df_new <- mtcars
并将新元素组合到一个列表中:
lst1 <- list(fm = fm_new,df = df_new,mod_call = mod1$call)
然后在最后一步中,我想将此列表传递给 glm2()
以改装 glm:
glm2 <- function(x){
fm <- x$fm
df <- x$df
glm(fm,data = df)
}
这将返回改装的 glm:
glm2(lst1)
# Call: glm(formula = fm,data = df)
#
# Coefficients:
# (Intercept) mpg disp
# 4.44751 -0.09326 0.01009
#
# degrees of Freedom: 31 Total (i.e. Null); 29 Residual
# Null Deviance: 111.5
# Residual Deviance: 16.34 AIC: 77.3
但是,以上仅当我在 glm2()
中的 glm 调用中明确定义参数时才有效,我想要实现的是 glm()
中的 glm2()
使用完全相同的元素在调用中作为 mod1
。例如:
mod2 <- glm(cyl ~ mpg + disp,family = "poisson",weights = am,data = mtcars)
然后将所有新元素添加到列表中:
lst2 <- list(fm = fm_new,mod_call = mod2$call)
此处 glm2()
还应使用来自 mod2
的 Poisson GLM 和权重。如何修改 glm2()
使其还包含 mod2
中使用的系列和权重(或传递给 mod2
的其他参数)?我知道 match.call()
但不完全了解它在这里是如何工作的。
以下是我想要实现的:
glm2(lst2)
# Call: glm(formula = fm,data = df,weights = am)
#
# Coefficients:
# (Intercept) mpg disp
# 0.374368 -0.017450 0.001163
#
# degrees of Freedom: 12 Total (i.e. Null); 10 Residual
# Null Deviance: 4.037
# Residual Deviance: 1.256 AIC: 52.23
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。