【发布时间】:2017-06-02 00:03:37
【问题描述】:
我正在使用 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)
【问题讨论】:
-
而不是
out =,您可以使用x = stargazer(...),后跟cat(x, file='Test.tex')。经过测试并为我工作 -
@dww 好点! (不过,在对
cat()的调用中指定sep='\n'也是必要的)。如果没有其他人回答,我很乐意接受您的评论作为答案,因为它确实解决了问题。