我知道Zelig
是一个包装器...但是,它仍然提供了很好的模拟功能(我自己无法做到)。
假设我有这些数据,
set.seed(123)
x1 = rnorm(5)
x2 = rnorm(5)
z = 1 + 2*x1 + 3*x2
pr = 1/(1+exp(-z))
y = rbinom(5,1,pr)
df = data.frame(y=y,x1=x1,x2=x2)
现在,我们估计模型,
library(Zelig)
relogit <- zelig(y ~ x1 + x2, model = "relogit", data = df)
现在,我们(尝试)制作表格
library(texreg)
texreg(relogit)
...只是为了得到这个错误。
Error in (function (classes, fdef, stable):
unable to find an inherited method for function ‘extract’ for
signature ‘"Zelig-relogit"’
我知道$getvcov()
和$getcoef()
函数。但我想知道如何使用texreg
制作一个简单的表格。任何建议将不胜感激。谢谢!
答案 0 :(得分:4)
texreg
使用名为extract
的通用函数从模型对象中提取相关数据,然后处理生成的texreg
对象以创建回归表。为了扩展适用的模型范围texreg
,您可以为extract
函数编写自己的方法。
Zelig-relogit
个对象显然存储了一个glm
对象,其中包含对象内部的相关数据,并为其附加了不同的类名。因此,创建此子对象的副本,修复其类名,并将现有的extract.glm
方法应用于此对象以提取数据应该相对简单。更具体地说:
# extension for Zelig-relogit objects (Zelig package >= 5.0)
extract.Zeligrelogit <- function(model, include.aic = TRUE, include.bic = TRUE,
include.loglik = TRUE, include.deviance = TRUE, include.nobs = TRUE, ...) {
g <- model$zelig.out$z.out[[1]]
class(g) <- "glm"
e <- extract(g, include.aic = include.aic, include.bic = include.bic,
include.loglik = include.loglik, include.deviance = include.deviance,
include.nobs = include.nobs, ...)
return(e)
}
setMethod("extract", signature = className("Zelig-relogit", "Zelig"),
definition = extract.Zeligrelogit)
此代码为Zelig-relogit
函数创建extract
方法。您可以通过键入screenreg(relogit)
之类的内容来使用它,其中relogit
是Zelig-relogit
对象的名称。结果应如下所示:
==================================
Model 1
----------------------------------
(Intercept) -9446502571.59 ***
(62615.78)
x1 19409089045.70 ***
(141084.20)
x2 856836055.47 ***
(98175.65)
----------------------------------
AIC 6.00
BIC 4.83
Log Likelihood -0.00
Deviance 0.00
Num. obs. 5
==================================
*** p < 0.001, ** p < 0.01, * p < 0.05
更一般地说,如果您想让任何Zelig
模型与texreg
一起使用,您应该查看model$zelig.out$z.out[[1]]
以查找相关信息。我会在下一个Zelig-relogit
版本中添加extract
texreg
方法。