我正在使用Stargazer报告某些模型的结果,在这些模型中我使用了可靠的标准误差。计算这些然后将模型提供给Stargazer的过程会去除诸如R ^ 2之类的数据,因此我需要手动添加它们。但是,这样做给我带来了麻烦。以下是我尝试运行的基本stargazer()调用。在此之后,进行一些讨论是生成进入stargazer()调用的数据所需的代码:

stargazer(fit1_robust, fit2_robust,
    keep.stat = c("n", "adj.rsq"), # doesn't actually result in keeping the stats, but including it just to demonstrate such.
    add.lines = list(c("Adjusted $R^2$", fit1_r2, fit2_r2)),
    out = "~/Test.tex"
    )


调用此命令时,出现以下错误:

Error in if (nchar(text.matrix[r, c]) > max.length[real.c]) { :
missing value where TRUE/FALSE needed


有一些有趣的方面:


如果我省略^而是使用"Adjusted $R2$",则不会发生该错误
如果我不使用out参数指定要导出到的.tex文件,则不会发生该错误。


解决这些项目符号中的任何一个都可以“解决”该错误,但是以我的代码没有真正按照我想要的做为代价。如何以此处完成的方式手动添加调整后的R ^ 2(更普遍地说,添加涉及^的注释)?

(注意:我还尝试转义^字符,将其替换为/^。这产生了错误。如果我使用双转义符://^可以防止错误,但是生成的内容中会出现一个转义符.tex文件,那不是我想要的。)

这是剩下的代码,可以满足上述stargazer()调用所需的所有对象:

library(stargazer)
library(lmtest)
library(sandwich)

#################
# Simulate Data #
#################

N = 100

A = rnorm(N)
B = rnorm(N)
Y = 2*A + B + rnorm(N)
Data = data.frame(Y, A, B)

#####################################
# Fit Models and Find Robust Errors #
#####################################

fit1 = lm(Y~A)
fit2 = lm(Y~A+B)

fit1_robust = coeftest(fit1, vcov = sandwich)
fit2_robust = coeftest(fit2, vcov = sandwich)

fit1_r2 = round(summary(fit1)$adj.r.squared, 4)
fit2_r2 = round(summary(fit2)$adj.r.squared, 4)

最佳答案

一种解决方法是将stargazer的输出保存在变量中,然后将其写入文件:

star = stargazer(fit1_robust, fit2_robust,
  add.lines = list(c("Adjusted $R^2$", fit1_r2, fit2_r2))
)
cat(star, sep = '\n', file = 'Test.tex')


r - R Stargazer-手动指定R ^ 2并写入.tex-LMLPHP

10-07 15:26