Пакет R-›TeX Table: после ручного ввода данных в выводе отсутствуют SE и звездочки

Почему звездочет не выводит стандартные ошибки и звездочки в таблице ниже?

Как заставить stargazer (или другой пакет таблиц) отображать стандартные ошибки в круглых скобках под коэффициентом и отображать звездочки значимости рядом с коэффициентом?

Как вы можете видеть внизу, сейчас он выводит только коэффициенты.

Просто для небольшого фона, из-за характера анализа мне нужно сохранять каждый коэффициент отдельно. Я не могу сохранить каждую модель как объект модели.

Для каждой модели у меня есть двенадцать коэффициентов, стандартные ошибки и p-значения. Затем я ввожу эти значения в звездочет с помощью команд se= и p=, но явно ошибаюсь.

Сейчас я использую stargazer(), но я был бы рад принять ответ, используя любой пакет R->TeX (например, xtable()).

set.seed(961)

# Two models, twelve variables each. 

# Create empty matrices to store results below 
coefs <- matrix(NA, nrow = 12, ncol = 2)
ses <- matrix(NA, nrow = 12, ncol = 2)
p_values <- matrix(NA, nrow = 12, ncol = 2)

colnames(coefs) <- c("Model 1", "Model 2")
rownames(coefs) <- c("V1",  "V2",  "V3",  "V4",  "V5",  "V6",  "V7",  "V8",  "V9",  "V10", "V11", "V12")

colnames(ses) <- c("Model 1", "Model 2")
rownames(ses) <- c("V1",  "V2",  "V3",  "V4",  "V5",  "V6",  "V7",  "V8",  "V9",  "V10", "V11", "V12")

colnames(p_values) <- c("Model 1", "Model 2")
rownames(p_values) <- c("V1",  "V2",  "V3",  "V4",  "V5",  "V6",  "V7",  "V8",  "V9",  "V10", "V11", "V12")

for(i in 1:2){
coefs[, i] <- rnorm(12, 0, 5)  # Random coefficients
ses[, i] <- coefs[, i]*seq(0.1, 1.2, by = 0.1)  #Define standard error for coef
z <- coefs[, i] / ses[, i]  # Calculate Z-score for each coef
p_values[, i] <- 2*pnorm(-abs(z))  # Calculate p-value for each coef
}

stargazer(coefs, se = ses, p = p_values)


===================
    Model 1 Model 2
-------------------
V1  -0.500   0.054 
V2   7.667  -8.738 
V3   0.631   2.266 
V4  -4.003   3.759 
V5  -4.608  -8.939 
V6  -7.241   0.893 
V7   6.799  13.984 
V8  -5.981   3.577 
V9   3.041  10.789 
V10 -6.941  -1.109 
V11  0.776  -5.073 
V12  2.277   8.667 
-------------------

person Dr. Beeblebrox    schedule 06.10.2015    source источник
comment
В документации для звездочета говорится, что эти аргументы должны быть списками, а не матрицами.   -  person Josh    schedule 12.10.2015
comment
@Josh Я пробовал играть со списками, но у меня не получилось. Можете ли вы понять это с примером кода?   -  person Dr. Beeblebrox    schedule 12.10.2015
comment
Вам нужно использовать Stargazer? Почему бы не использовать что-то более общее, например xtable()?   -  person Thomas    schedule 13.10.2015
comment
@ Томас Хороший вопрос. Я был бы рад использовать любой пакет таблиц. Это не обязательно должен быть Звездочет.   -  person Dr. Beeblebrox    schedule 13.10.2015
comment
Проблема в том, что вам все еще нужен объект модели для работы звездочета. Если вы измените свой вызов на stargazer(coef = coefs, se = ses, p = p_values), вы получите сообщение об ошибке, поскольку модели там нет. На данный момент он молча терпит неудачу, так как считает, что coefs является объектом модели.   -  person jeremycg    schedule 14.10.2015
comment
@jeremycg К сожалению, здесь это невозможно. Я запускаю что-то необычное и не хочу вдаваться в подробности здесь, но, как я уже сказал в вопросе, я не могу сохранить каждую модель как объект модели.   -  person Dr. Beeblebrox    schedule 14.10.2015
comment
как написал @jeremycg, вы должны предоставить объект модели. В противном случае вам пришлось бы обманывать stargazer(), воссоздавая объекты фиктивной модели из ваших значений. Я не думаю, что это того стоит. Мне было бы очень интересно узнать, почему вы не можете или не хотите сохранять свои объекты модели. Вы могли бы, по крайней мере, обрезать их, удалив огромные компоненты.   -  person Karl Forner    schedule 15.10.2015
comment
@KarlForner Я не могу предоставить модель, потому что каждый коэффициент взят из другой модели. Мои столбцы представляют собой полиномиальные спецификации. Мои строки представляют изменение параметра модели. Я показываю, как ключевая оценка варьируется в зависимости от полиномиальной спецификации и этого другого параметра.   -  person Dr. Beeblebrox    schedule 15.10.2015
comment
в этом случае вы не должны использовать звездочет. Вы можете посмотреть его вывод на модели и заменить фактические значения своими, используя, например, подход на основе sprintf/   -  person Karl Forner    schedule 15.10.2015
comment
@KarlForner Я не замужем за звездочетом. Боюсь, что подход, основанный на sprintf, мне не по силам. Я не знаю С.   -  person Dr. Beeblebrox    schedule 16.10.2015


Ответы (1)


Основываясь на аналогичном ответе, я разместил здесь, я предлагаю создать это с нуля, используя xtable.

Из вашего поста я не совсем уверен в желаемом формате таблицы, кроме упомянутых требований (т.е. SE ниже и звезды значения рядом с коэффициентами). Общая идея состоит в том, чтобы построить матрицу или фрейм данных с заданными размерами в R, а затем получить скелетную таблицу, используя xtable. Эту таблицу можно сохранить, используя параметр file для print (подробности см. в связанном посте). Затем этот файл вводится в ваш окончательный документ LaTeX с помощью \input.

set.seed(961)

# Two models, twelve variables each. 

# Create empty matrices to store results below 
coefs <- matrix(NA, nrow = 12, ncol = 2)
ses <- matrix(NA, nrow = 12, ncol = 2)
p_values <- matrix(NA, nrow = 12, ncol = 2)

colnames(coefs) <- c("Model 1", "Model 2")
rownames(coefs) <- c("V1",  "V2",  "V3",  "V4",  "V5",  "V6",  "V7",  "V8",  "V9",  "V10", "V11",     "V12")

colnames(ses) <- c("Model 1", "Model 2")
rownames(ses) <- c("V1",  "V2",  "V3",  "V4",  "V5",  "V6",  "V7",  "V8",  "V9",  "V10", "V11",     "V12")

colnames(p_values) <- c("Model 1", "Model 2")
rownames(p_values) <- c("V1",  "V2",  "V3",  "V4",  "V5",  "V6",  "V7",  "V8",  "V9",  "V10",     "V11", "V12")

for(i in 1:2){
    coefs[, i] <- rnorm(12, 0, 5)  # Random coefficients
    ses[, i] <- coefs[, i]*seq(0.1, 1.2, by = 0.1)  #Define standard error for coef
    z <- coefs[, i] / ses[, i]  # Calculate Z-score for each coef
    p_values[, i] <- 2*pnorm(-abs(z))  # Calculate p-value for each coef
}

### generate coefficients, se, t-stat and p values

star.wars <- function(x){
    out <- ifelse(x <= 0.1, ifelse(x <= 0.05, ifelse(x <= 0.01, "***", "**"), '*'), "")
    out
}

stars.coef <- apply(p_values, 2, function(x) sapply(x, star.wars))
coefs_w_stars <- paste(sprintf("%.4f",coefs), stars.coef, sep="")
ses_w_pars <-paste("(", sprintf("%.4f", ses), ")", sep="")



df_model = matrix(c(coefs_w_stars, ses_w_pars), ncol = 2)

colnames(df_model) <- c("Coef.", "Std. error")
tbl <- xtable(t(df_model))
print(tbl, only.contents=TRUE, include.rownames=T, 
      include.colnames=T, floating=F,
      hline.after=NULL,
      file = 'text.tex')

Я использую это вместе с пакетом threeparttable в LaTeX, чтобы украсить это. Убедитесь, что вы прочитали доступные параметры метода print для xtable объектов. Он довольно гибкий и позволяет опускать имена столбцов и строк и т. д.

В LaTeX я часто использую что-то вроде этого

\begin{table}[t]
\centering
\begin{threeparttable}
\captionabove{Regression results.}
\begin{tabular}{lccc}
      \toprule
      & <Insert your variable names here> \\
      \midrule
      \input{test}
      \bottomrule
   \end{tabular}
\label{tab:summary}
\end{threeparttable}
\end{table}
person pfifas    schedule 18.10.2015
comment
Спасибо @pfifas. Я не знаком с sprintf() (кроме чтения файла справки). Что sprintf() предлагает в этом случае? Например, в чем разница между использованием вашей строки paste(sprintf("%.4f",coefs), stars.coef, sep="") и последующей paste(round(coefs, 4), stars.coef, sep="")? - person Dr. Beeblebrox; 19.10.2015
comment
Когда вы запускаете свой код, вы видите таблицу 12x2 (или 24x2, если считать строки со стандартными ошибками), как я представляю в своем формате кода в своем коде? - person Dr. Beeblebrox; 19.10.2015
comment
Я думаю, что в этом случае он дает точно такой же результат. Я использую sprintf со своими таблицами, потому что считаю его более интуитивным и получаю желаемые результаты с меньшим количеством ошибок (см. краткий обзор альтернатив: r-bloggers.com/paste-paste0-and-sprintf). У него также есть несколько удобных параметров (см.: stackoverflow.com/questions/23654521/), которых нет у paste. Хотя в вашем случае он возвращает то же самое, я думаю, что просто хорошо знать об этом. - person pfifas; 19.10.2015