Я работаю с самым исправленным пакетом в R для запуска модели регрессии и использую etable для отображения результатов. Я хочу разделить коэффициенты на два разных столбца в зависимости от того, содержат ли они строку «основная» или «вторая». Вот воспроизводимый пример данных и модели:
library(data.table)
library(fixest)
set.seed(123)
n <- 1000
dt <- data.table(
y = rnorm(n),
height_main_1 = rnorm(n),
height_second_1 = rnorm(n),
height_main_2 = rnorm(n),
height_second_2 = rnorm(n),
weight_main_1 = rnorm(n),
weight_main_2 = rnorm(n),
weight_second_1 = rnorm(n),
weight_second_2 = rnorm(n),
second = sample(0:1, n, replace = TRUE),
control1 = rnorm(n),
control2 = rnorm(n),
id = sample(1:100, n, replace = TRUE),
FE2 = sample(1:50, n, replace = TRUE)
)
m2 <- feols(y ~ height_main_1 + height_second_1 + height_main_2 + height_second_2 + weight_main_1 + weight_second_1 + weight_main_2 + weight_second_2 + second + control1 + control2 | id + FE2, data = dt)
summary(m2)
Как мне это сделать? В идеале я хочу, чтобы переменные, которые отличаются только «основной»/«второй» частью имени, были помечены одинаково, чтобы коэффициенты находились в одной строке, но в двух разных столбцах.
Обратите внимание, что я хочу экспортировать результаты в латексном формате.
Спасибо за вашу помощь!
Думаю, я нашел решение, возможно, оно немного длинное, но оно выполняет свою работу.
Сначала я создаю два фрейма данных, содержащие результаты модели m2, выбирая только для первого только «основные» коэффициенты, а для второго фрейма данных только «вторые». Затем я объединяю два фрейма данных и после некоторого форматирования экспортирую набор данных в виде латексной таблицы, используя пакет xtable. Вот код:
library(xtable)
## create the first column - only "main" coefficients
setFixest_dict(dict=c("height_main_1" = "height 1", "weight_main_1" = "weight 1",
"height_main_2" = "height 2", "weight_main_2" = "weight 2",
"height_second_1" = "todrop", "height_second_2" = "todrop2",
"weight_second_1" = "todrop3", "weight_second_2" = "todrop4",
"second" = "todrop_"
))
order <- c("^height$", "^weight$", "!2", "!1", "!weight")
# transform the regression results in a dataframe
t2_main <- etable(m2, order=order, tex=FALSE,se.below=TRUE,
drop=c("control", "todrop"))
colnames(t2_main) <- c("Vars", "Main")
setDT(t2_main)[, counter := 1:.N]
# second column - only "second" coefficients
setFixest_dict(dict=c("height_main_1" = "todrop", "weight_main_1" = "todrop2",
"height_main_2" = "todrop3", "weight_main_2" = "todrop4",
"height_second_1" = "height 1", "height_second_2" = "height 2",
"weight_second_1" = "weight 1", "weight_second_2" = "weight 2",
"second" = "todrop_"
))
order <- c("^height$", "^weight$", "!2", "!1", "!weight")
t2_second <- etable(m2, order=order, tex=FALSE,se.below=TRUE,
drop=c("control", "todrop"))
colnames(t2_second) <- c("Vars", "Second")
# merge the two datasets and export them as a latex table using table
table <- cbind(t2_main, t2_second %>% select(-Vars))
# select only the relevant variables
table <- table[counter %in% c(c(3:10), 15,11,12) ]
setkey(table,counter)[, counter:=NULL]
addtorow <- list()
addtorow$pos <- list(0,0,8,8)
addtorow$command <- c("& \\multicolumn{2}{c}{Outcome variable} \\\\\n",
" & (1) & (2) \\\\\n",
"& & \\\\\n",
"context & main & second \\\\\n")
print(xtable(table), compress = TRUE,include.rownames = FALSE, include.colnames=FALSE,
hline.after = c(-1, 0, nrow(xtable(table))),
floating=FALSE, add.to.row = addtorow, booktabs=TRUE,
file=paste0(PATH, "Regtable.tex"))