问题描述
假设我有以下模型:
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 (将#修改为@)