在康斯坦丁的有用回答的基础上,我创建了一个简单的函数unzelig 来获取一个 glm zelig 对象并返回一个传统的 glm 对象:
# extract data + model + family zelig object, return glm object
unzelig <- function(zelig_model) {
z_out <- zelig_model$zelig.out$z.out[[1]]
z_family <- z_out[["family"]][["family"]]
# when zelig(model = 'ls') assign family <- "gaussian"
if(is.null(z_family)) {z_family <- "gaussian"}
glm(z_out,
family = z_family)
}
# simple example
z1 <- zelig(mpg ~ cyl, model = 'ls', data = mtcars, cite = FALSE)
z2 <- zelig(I(mpg > 15) ~ cyl, model = 'logit', data = mtcars, cite = FALSE)
z3 <- zelig(as.integer(mpg) ~ cyl, model = 'poisson', data = mtcars, cite = FALSE)
g1 <- unzelig(z1)
g2 <- unzelig(z2)
g3 <- unzelig(z3)
stargazer(g1, g2, g3, type = 'text')
# error check
g1 <- glm(mpg ~ cyl, data = mtcars)
g2 <- glm(I(mpg > 15) ~ cyl, family = binomial, data = mtcars)
g3 <- glm(as.integer(mpg) ~ cyl, family = poisson, data = mtcars)
stargazer(g1, g2, g3, type = 'text')
此外,还有一个正在开发中的功能,可以使用命令to_zelig 将一些非 Zelig 对象转换为 Zelig 友好的对象。这将允许使用lm 或glm 等标准R 函数估计模型,使用stargazer 或其他包生成表,然后将对象转换为使用Zelig 函数,如setx 和sim。查看更多,在这里:
http://docs.zeligproject.org/reference/to_zelig.html