2015-10-06 3 views
1

Почему нет данных о стандартных ошибках и звездах в таблице ниже?R-> TeX Table Package: после ввода данных вручную, SE и звезды отсутствуют на выходе

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

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

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

Для каждой модели у меня есть двенадцать коэффициентов, стандартные ошибки и значения p. Затем я передаю эти значения в stargazer командами 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 
------------------- 
+0

документация для Stargazer говорит, что эти аргументы должны быть списки, а не матрицы. – Josh

+0

@ Josh Я пробовал играть со списками, но не получил его на работу. Можете ли вы понять это с помощью примера кода? –

+0

Вам нужно использовать Stargazer? Почему бы не использовать нечто более общее, например 'xtable()'? – Thomas

ответ

2

Основываясь на подобном ответ я отправил here, я предлагаю, чтобы построить это с нуля, используя 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} 
+0

Спасибо @pfifas. Я не знаком с 'sprintf()' (кроме чтения файла справки). Что предлагает 'sprintf()' в этом случае? Например, какая разница между использованием вашей строки 'paste (sprintf («%. 4f », coefs), stars.coef, sep =" ")' и следующей пасты (round (coefs, 4), stars.coef , sep = "") '? –

+0

Когда вы запускаете свой код, вы видите таблицу 12x2 (или 24x2, если подсчитываете стандартные строки ошибок), например, я присутствую в своем коде кода в своем коде? –

+0

Я думаю, что в этом случае он дает точно такой же результат. Я использую 'sprintf' с моими таблицами, потому что я нахожу его обработку более интуитивной и получаю желаемые результаты с меньшим количеством ошибок на пути (см. Краткий обзор альтернатив: http://www.r-bloggers.com/paste- paste0-и-Sprintf /). Он также имеет некоторые опрятные варианты, которые могут стать удобными (см. Http://stackoverflow.com/questions/23654521/collapsing-character-vectors-with-sprintf-instead-of-paste), которые 'paste' не имеет. Хотя в вашем случае он возвращает то же самое, я думаю, что это просто хорошо знать об этом. – pfifas

 Смежные вопросы

  • Нет связанных вопросов^_^