2

我知道这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. 任何建议将不胜感激。谢谢!

4

1 回答 1

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版本中包含该方法。

于 2016-05-01T16:00:47.567 回答