在 stargazer 中重新排序变量
Reorder variables in stargazer
我在 stargazer 中尝试重新排序变量时遇到了一些问题。首先,我定义了一个字符向量来指示我想要的顺序。
> order
[1] "poly(log(fall_t), 2)1" "poly(log(fall_t), 2)2" "poly(winter_t, 2)1" "poly(winter_t, 2)2"
[5] "poly(log(spring_t), 2)1" "poly(log(spring_t), 2)2" "poly(log(fall_p), 2)1" "poly(log(fall_p), 2)2"
[9] "poly(log(winter_p), 2)1" "poly(log(winter_p), 2)2" "poly(log(spring_p), 2)1" "poly(log(spring_p), 2)2"
[13] "log(aot_fall)" "log(aot_winter)" "log(aot_spring)" "poly(log(aot_fall), 2)1"
[17] "poly(log(aot_fall), 2)2" "log(aot_fall):log(fall_t)" "poly(log(aot_spring), 2)1" "poly(log(aot_spring), 2)2"
[21] "log(aot_spring):log(spring_t)" "poly(log(aot_winter), 2)1" "poly(log(aot_winter), 2)2" "log(aot_winter):winter"
然后我打电话给 stargazer
stargazer(pmclimatevft, pmftsea, pmftqsea, pmftint, title = "Panel data with fixed time effect poly",
model.names = F, model.numbers = F, object.names = F, dep.var.caption = "Yield", dep.var.labels.include = F,
column.labels = c("Only climate variables","linear","quartic","Intersection"),
omit = c("Year"), omit.labels = c("Time fixed effect"),
order = order,
dep.var.labels = "Yield", digits = 3, notes = "*Average and square temperature of Winter are not in log form due to negative values.",
align = T, no.space = T, column.sep.width = "-10pt", omit.stat = "f")
下面是 LaTex 代码。
\begin{table}[!htbp] \centering
\caption{Panel data with fixed time effect poly}
\label{}
\begin{tabular}{@{\extracolsep{-10pt}}lD{.}{.}{-3} D{.}{.}{-3} D{.}{.}{-3} D{.}{.}{-3} }
\[-1.8ex]\hline
\hline \[-1.8ex]
& \multicolumn{4}{c}{Yield} \
\cline{2-5}
& \multicolumn{1}{c}{Only climate variables} & \multicolumn{1}{c}{linear} & \multicolumn{1}{c}{quartic} & \multicolumn{1}{c}{Intersection} \
\hline \[-1.8ex]
poly(log(fall\_t), 2)1 & -8.096^{***} & -7.946^{***} & -8.030^{***} & -10.271 \
& (1.173) & (1.184) & (1.187) & (9.071) \
poly(log(fall\_t), 2)2 & 0.443 & 0.350 & 0.534 & 0.340 \
& (0.312) & (0.323) & (0.329) & (0.372) \
poly(winter\_t, 2)1 & -7.065^{***} & -6.683^{***} & -6.879^{***} & 1.615 \
& (0.899) & (0.907) & (0.926) & (4.048) \
poly(winter\_t, 2)2 & -1.160^{***} & -1.072^{***} & -1.057^{***} & -1.073^{***} \
& (0.279) & (0.280) & (0.280) & (0.280) \
poly(log(spring\_t), 2)1 & -9.967^{***} & -10.428^{***} & -10.028^{***} & -19.885^{**} \
& (1.095) & (1.106) & (1.110) & (8.014) \
poly(log(spring\_t), 2)2 & -0.867^{***} & -0.924^{***} & -0.753^{***} & -0.996^{***} \
& (0.269) & (0.274) & (0.276) & (0.288) \
poly(log(fall\_p), 2)1 & 2.270^{***} & 2.431^{***} & 2.511^{***} & 2.337^{***} \
& (0.421) & (0.428) & (0.427) & (0.432) \
poly(log(fall\_p), 2)2 & -3.553^{***} & -3.582^{***} & -3.522^{***} & -3.653^{***} \
& (0.247) & (0.249) & (0.249) & (0.253) \
poly(log(winter\_p), 2)1 & 2.693^{***} & 2.630^{***} & 2.635^{***} & 2.519^{***} \
& (0.585) & (0.587) & (0.586) & (0.591) \
poly(log(winter\_p), 2)2 & -1.832^{***} & -1.786^{***} & -1.934^{***} & -1.775^{***} \
& (0.262) & (0.262) & (0.264) & (0.265) \
poly(log(spring\_p), 2)1 & 0.106 & 0.196 & 0.246 & 0.207 \
& (0.415) & (0.416) & (0.418) & (0.417) \
poly(log(spring\_p), 2)2 & -4.917^{***} & -4.793^{***} & -4.889^{***} & -4.747^{***} \
& (0.256) & (0.259) & (0.259) & (0.261) \
log(aot\_fall) & & 0.049 & & -0.081 \
& & (0.033) & & (0.461) \
log(aot\_winter) & & -0.048^{**} & & -0.038^{*} \
& & (0.020) & & (0.021) \
log(aot\_spring) & & 0.090^{***} & & -0.294 \
& & (0.032) & & (0.315) \
poly(log(aot\_fall), 2)1 & & & 0.372 & \
& & & (0.571) & \
poly(log(aot\_fall), 2)2 & & & -0.751^{**} & \
& & & (0.302) & \
poly(log(aot\_winter), 2)1 & & & -0.553 & \
& & & (0.587) & \
poly(log(aot\_winter), 2)2 & & & 1.321^{***} & \
& & & (0.303) & \
poly(log(aot\_spring), 2)1 & & & 0.868 & \
& & & (0.618) & \
poly(log(aot\_spring), 2)2 & & & -0.382 & \
& & & (0.305) & \
log(aot\_fall):log(fall\_t) & & & & 0.052 \
& & & & (0.180) \
log(aot\_winter):winter\_t & & & & -0.013^{**} \
& & & & (0.006) \
log(aot\_spring):log(spring\_t) & & & & 0.152 \
& & & & (0.128) \
\hline \[-1.8ex]
Time fixed effect & \multicolumn{1}{c}{Yes} & \multicolumn{1}{c}{Yes} & \multicolumn{1}{c}{Yes} & \multicolumn{1}{c}{Yes} \
\hline \[-1.8ex]
Observations & \multicolumn{1}{c}{2,979} & \multicolumn{1}{c}{2,979} & \multicolumn{1}{c}{2,979} & \multicolumn{1}{c}{2,979} \
R$^{2}$ & \multicolumn{1}{c}{0.641} & \multicolumn{1}{c}{0.642} & \multicolumn{1}{c}{0.645} & \multicolumn{1}{c}{0.643} \
Adjusted R$^{2}$ & \multicolumn{1}{c}{0.621} & \multicolumn{1}{c}{0.623} & \multicolumn{1}{c}{0.625} & \multicolumn{1}{c}{0.623} \
\hline
\hline \[-1.8ex]
\textit{Note:} & \multicolumn{4}{r}{$^{*}$p$<[=12=].1; $^{**}$p$<[=12=].05; $^{***}$p$<[=12=].01} \
& \multicolumn{4}{r}{*Average and square temperature of Winter are not in log form due to negative values.} \
\end{tabular}
\end{table}
原来输出中的顺序没有改变。我在 stargazer 中的订购代码无效。我可以在 TeXstudio 中手动更改顺序。但如果我们能在 stargazer 中做到这一点就更好了。
您没有提供可重现的示例,但这里有一个使用虚拟数据的解决方案。
library(stargazer)
# silly lm with a lot of parameters
lm(Sepal.Length ~ poly(log(Sepal.Width),4) +
poly(log(Petal.Length),5) +
Petal.Width:Species, data=iris) -> foo
names(coef(foo)) -> parameters
parameters
> parameters
[1] "(Intercept)" "poly(log(Sepal.Width), 4)1"
[3] "poly(log(Sepal.Width), 4)2" "poly(log(Sepal.Width), 4)3"
[5] "poly(log(Sepal.Width), 4)4" "poly(log(Petal.Length), 5)1"
[7] "poly(log(Petal.Length), 5)2" "poly(log(Petal.Length), 5)3"
[9] "poly(log(Petal.Length), 5)4" "poly(log(Petal.Length), 5)5"
[11] "Petal.Width:Speciessetosa" "Petal.Width:Speciesversicolor"
[13] "Petal.Width:Speciesvirginica"
parameters
现在是默认顺序。比方说,我想按以下顺序获取我的参数:
desiredOrder <- c("poly(log(Sepal.Width), 4)4", "Petal.Width:Speciesvirginica",
"poly(log(Sepal.Width), 4)1", "Petal.Width:Speciesversicolor",
"poly(log(Petal.Length), 5)1", "poly(log(Sepal.Width), 4)3",
"Petal.Width:Speciessetosa", "poly(log(Petal.Length), 5)3", "(Intercept)",
"poly(log(Petal.Length), 5)4", "poly(log(Petal.Length), 5)2",
"poly(log(Sepal.Width), 4)2", "poly(log(Petal.Length), 5)5")
order <- match(desiredOrder, parameters)
>order
[1] 5 13 2 12 6 4 11 8 1 9 7 3 10
值得注意的是,stargazer参数order
是相对于stargazer输出的默认顺序的。默认情况下,stargazer 将拦截放在底部,而它在 parameters
.
中排在第一位
如果我们设置 intercept.top=TRUE, intercept.bottom=FALSE
.
,将 order
作为参数传递给 stargazer 将按所需顺序打印出回归系数
stargazer(foo, order=order, type='text', intercept.top=TRUE, intercept.bottom=FALSE)
=========================================================
Dependent variable:
---------------------------
Sepal.Length
---------------------------------------------------------
poly(log(Sepal.Width), 4)4 0.033
(0.313)
Petal.Width:Speciesvirginica -0.376**
(0.151)
poly(log(Sepal.Width), 4)1 2.660***
(0.464)
Petal.Width:Speciesversicolor -0.205
(0.202)
poly(log(Petal.Length), 5)1 13.503***
(1.792)
poly(log(Sepal.Width), 4)3 -0.030
(0.319)
Petal.Width:Speciessetosa 0.251
(0.435)
poly(log(Petal.Length), 5)3 1.108**
(0.481)
Constant 6.167***
(0.195)
poly(log(Petal.Length), 5)4 -0.065
(0.344)
poly(log(Petal.Length), 5)2 3.828***
(0.521)
poly(log(Sepal.Width), 4)2 0.745**
(0.337)
poly(log(Petal.Length), 5)5 0.388
(0.381)
---------------------------------------------------------
Observations 150
R2 0.876
Adjusted R2 0.865
Residual Std. Error 0.304 (df = 137)
F Statistic 80.690*** (df = 12; 137)
=========================================================
Note: *p<0.1; **p<0.05; ***p<0.01
我在 stargazer 中尝试重新排序变量时遇到了一些问题。首先,我定义了一个字符向量来指示我想要的顺序。
> order
[1] "poly(log(fall_t), 2)1" "poly(log(fall_t), 2)2" "poly(winter_t, 2)1" "poly(winter_t, 2)2"
[5] "poly(log(spring_t), 2)1" "poly(log(spring_t), 2)2" "poly(log(fall_p), 2)1" "poly(log(fall_p), 2)2"
[9] "poly(log(winter_p), 2)1" "poly(log(winter_p), 2)2" "poly(log(spring_p), 2)1" "poly(log(spring_p), 2)2"
[13] "log(aot_fall)" "log(aot_winter)" "log(aot_spring)" "poly(log(aot_fall), 2)1"
[17] "poly(log(aot_fall), 2)2" "log(aot_fall):log(fall_t)" "poly(log(aot_spring), 2)1" "poly(log(aot_spring), 2)2"
[21] "log(aot_spring):log(spring_t)" "poly(log(aot_winter), 2)1" "poly(log(aot_winter), 2)2" "log(aot_winter):winter"
然后我打电话给 stargazer
stargazer(pmclimatevft, pmftsea, pmftqsea, pmftint, title = "Panel data with fixed time effect poly",
model.names = F, model.numbers = F, object.names = F, dep.var.caption = "Yield", dep.var.labels.include = F,
column.labels = c("Only climate variables","linear","quartic","Intersection"),
omit = c("Year"), omit.labels = c("Time fixed effect"),
order = order,
dep.var.labels = "Yield", digits = 3, notes = "*Average and square temperature of Winter are not in log form due to negative values.",
align = T, no.space = T, column.sep.width = "-10pt", omit.stat = "f")
下面是 LaTex 代码。
\begin{table}[!htbp] \centering
\caption{Panel data with fixed time effect poly}
\label{}
\begin{tabular}{@{\extracolsep{-10pt}}lD{.}{.}{-3} D{.}{.}{-3} D{.}{.}{-3} D{.}{.}{-3} }
\[-1.8ex]\hline
\hline \[-1.8ex]
& \multicolumn{4}{c}{Yield} \
\cline{2-5}
& \multicolumn{1}{c}{Only climate variables} & \multicolumn{1}{c}{linear} & \multicolumn{1}{c}{quartic} & \multicolumn{1}{c}{Intersection} \
\hline \[-1.8ex]
poly(log(fall\_t), 2)1 & -8.096^{***} & -7.946^{***} & -8.030^{***} & -10.271 \
& (1.173) & (1.184) & (1.187) & (9.071) \
poly(log(fall\_t), 2)2 & 0.443 & 0.350 & 0.534 & 0.340 \
& (0.312) & (0.323) & (0.329) & (0.372) \
poly(winter\_t, 2)1 & -7.065^{***} & -6.683^{***} & -6.879^{***} & 1.615 \
& (0.899) & (0.907) & (0.926) & (4.048) \
poly(winter\_t, 2)2 & -1.160^{***} & -1.072^{***} & -1.057^{***} & -1.073^{***} \
& (0.279) & (0.280) & (0.280) & (0.280) \
poly(log(spring\_t), 2)1 & -9.967^{***} & -10.428^{***} & -10.028^{***} & -19.885^{**} \
& (1.095) & (1.106) & (1.110) & (8.014) \
poly(log(spring\_t), 2)2 & -0.867^{***} & -0.924^{***} & -0.753^{***} & -0.996^{***} \
& (0.269) & (0.274) & (0.276) & (0.288) \
poly(log(fall\_p), 2)1 & 2.270^{***} & 2.431^{***} & 2.511^{***} & 2.337^{***} \
& (0.421) & (0.428) & (0.427) & (0.432) \
poly(log(fall\_p), 2)2 & -3.553^{***} & -3.582^{***} & -3.522^{***} & -3.653^{***} \
& (0.247) & (0.249) & (0.249) & (0.253) \
poly(log(winter\_p), 2)1 & 2.693^{***} & 2.630^{***} & 2.635^{***} & 2.519^{***} \
& (0.585) & (0.587) & (0.586) & (0.591) \
poly(log(winter\_p), 2)2 & -1.832^{***} & -1.786^{***} & -1.934^{***} & -1.775^{***} \
& (0.262) & (0.262) & (0.264) & (0.265) \
poly(log(spring\_p), 2)1 & 0.106 & 0.196 & 0.246 & 0.207 \
& (0.415) & (0.416) & (0.418) & (0.417) \
poly(log(spring\_p), 2)2 & -4.917^{***} & -4.793^{***} & -4.889^{***} & -4.747^{***} \
& (0.256) & (0.259) & (0.259) & (0.261) \
log(aot\_fall) & & 0.049 & & -0.081 \
& & (0.033) & & (0.461) \
log(aot\_winter) & & -0.048^{**} & & -0.038^{*} \
& & (0.020) & & (0.021) \
log(aot\_spring) & & 0.090^{***} & & -0.294 \
& & (0.032) & & (0.315) \
poly(log(aot\_fall), 2)1 & & & 0.372 & \
& & & (0.571) & \
poly(log(aot\_fall), 2)2 & & & -0.751^{**} & \
& & & (0.302) & \
poly(log(aot\_winter), 2)1 & & & -0.553 & \
& & & (0.587) & \
poly(log(aot\_winter), 2)2 & & & 1.321^{***} & \
& & & (0.303) & \
poly(log(aot\_spring), 2)1 & & & 0.868 & \
& & & (0.618) & \
poly(log(aot\_spring), 2)2 & & & -0.382 & \
& & & (0.305) & \
log(aot\_fall):log(fall\_t) & & & & 0.052 \
& & & & (0.180) \
log(aot\_winter):winter\_t & & & & -0.013^{**} \
& & & & (0.006) \
log(aot\_spring):log(spring\_t) & & & & 0.152 \
& & & & (0.128) \
\hline \[-1.8ex]
Time fixed effect & \multicolumn{1}{c}{Yes} & \multicolumn{1}{c}{Yes} & \multicolumn{1}{c}{Yes} & \multicolumn{1}{c}{Yes} \
\hline \[-1.8ex]
Observations & \multicolumn{1}{c}{2,979} & \multicolumn{1}{c}{2,979} & \multicolumn{1}{c}{2,979} & \multicolumn{1}{c}{2,979} \
R$^{2}$ & \multicolumn{1}{c}{0.641} & \multicolumn{1}{c}{0.642} & \multicolumn{1}{c}{0.645} & \multicolumn{1}{c}{0.643} \
Adjusted R$^{2}$ & \multicolumn{1}{c}{0.621} & \multicolumn{1}{c}{0.623} & \multicolumn{1}{c}{0.625} & \multicolumn{1}{c}{0.623} \
\hline
\hline \[-1.8ex]
\textit{Note:} & \multicolumn{4}{r}{$^{*}$p$<[=12=].1; $^{**}$p$<[=12=].05; $^{***}$p$<[=12=].01} \
& \multicolumn{4}{r}{*Average and square temperature of Winter are not in log form due to negative values.} \
\end{tabular}
\end{table}
原来输出中的顺序没有改变。我在 stargazer 中的订购代码无效。我可以在 TeXstudio 中手动更改顺序。但如果我们能在 stargazer 中做到这一点就更好了。
您没有提供可重现的示例,但这里有一个使用虚拟数据的解决方案。
library(stargazer)
# silly lm with a lot of parameters
lm(Sepal.Length ~ poly(log(Sepal.Width),4) +
poly(log(Petal.Length),5) +
Petal.Width:Species, data=iris) -> foo
names(coef(foo)) -> parameters
parameters
> parameters
[1] "(Intercept)" "poly(log(Sepal.Width), 4)1"
[3] "poly(log(Sepal.Width), 4)2" "poly(log(Sepal.Width), 4)3"
[5] "poly(log(Sepal.Width), 4)4" "poly(log(Petal.Length), 5)1"
[7] "poly(log(Petal.Length), 5)2" "poly(log(Petal.Length), 5)3"
[9] "poly(log(Petal.Length), 5)4" "poly(log(Petal.Length), 5)5"
[11] "Petal.Width:Speciessetosa" "Petal.Width:Speciesversicolor"
[13] "Petal.Width:Speciesvirginica"
parameters
现在是默认顺序。比方说,我想按以下顺序获取我的参数:
desiredOrder <- c("poly(log(Sepal.Width), 4)4", "Petal.Width:Speciesvirginica",
"poly(log(Sepal.Width), 4)1", "Petal.Width:Speciesversicolor",
"poly(log(Petal.Length), 5)1", "poly(log(Sepal.Width), 4)3",
"Petal.Width:Speciessetosa", "poly(log(Petal.Length), 5)3", "(Intercept)",
"poly(log(Petal.Length), 5)4", "poly(log(Petal.Length), 5)2",
"poly(log(Sepal.Width), 4)2", "poly(log(Petal.Length), 5)5")
order <- match(desiredOrder, parameters)
>order
[1] 5 13 2 12 6 4 11 8 1 9 7 3 10
值得注意的是,stargazer参数order
是相对于stargazer输出的默认顺序的。默认情况下,stargazer 将拦截放在底部,而它在 parameters
.
如果我们设置 intercept.top=TRUE, intercept.bottom=FALSE
.
order
作为参数传递给 stargazer 将按所需顺序打印出回归系数
stargazer(foo, order=order, type='text', intercept.top=TRUE, intercept.bottom=FALSE)
=========================================================
Dependent variable:
---------------------------
Sepal.Length
---------------------------------------------------------
poly(log(Sepal.Width), 4)4 0.033
(0.313)
Petal.Width:Speciesvirginica -0.376**
(0.151)
poly(log(Sepal.Width), 4)1 2.660***
(0.464)
Petal.Width:Speciesversicolor -0.205
(0.202)
poly(log(Petal.Length), 5)1 13.503***
(1.792)
poly(log(Sepal.Width), 4)3 -0.030
(0.319)
Petal.Width:Speciessetosa 0.251
(0.435)
poly(log(Petal.Length), 5)3 1.108**
(0.481)
Constant 6.167***
(0.195)
poly(log(Petal.Length), 5)4 -0.065
(0.344)
poly(log(Petal.Length), 5)2 3.828***
(0.521)
poly(log(Sepal.Width), 4)2 0.745**
(0.337)
poly(log(Petal.Length), 5)5 0.388
(0.381)
---------------------------------------------------------
Observations 150
R2 0.876
Adjusted R2 0.865
Residual Std. Error 0.304 (df = 137)
F Statistic 80.690*** (df = 12; 137)
=========================================================
Note: *p<0.1; **p<0.05; ***p<0.01