R Stargazer: Как объединить динамические отсечки с фиксированным вектором символов в заметках

В течение некоторого времени я застрял со следующей проблемой, и постепенно я прихожу в отчаяние, потому что не могу найти решение своей проблемы. Я столкнулся со следующей проблемой:

При создании таблиц результатов регрессии HTML с помощью Stargazer в разделе примечаний отображаются следующие ограничения значимости:

*p**p***p<0.01

Однако я бы предпочел компоновку, подобную следующей:

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’

Я хочу получить это, динамически извлекая отсечки и комбинируя их с фиксированными векторами символов. В руководстве Stargazer сказано:

> a character vector containing notes to be included below the table.
> The character strings can include special substrings that will be
> replaced by the corresponding cutoffs for statistical significance
> 'stars': [*], [**], and [***] will be replaced by the cutoffs, in
> percentage terms, for one, two and three 'stars,' respectively (e.g.,
> 10, 5, and 1). Similarly, [0.*], [0.**] and [0.***] will be replaced
> by the numeric value of cutoffs for one, two and three 'stars' (e.g.,
> 0.1, 0.05, and 0.01). [.*], [.**] and [.***] will omit the leading zeros (e.g., .1, .05, .01).

Я пробовал все возможные комбинации, но всегда терпел неудачу. Я всегда заканчиваю тем, что R выводит, например, [***] в HTML-файл или выдает ошибку.

Не могли бы вы помочь мне найти правильный код для объединения фиксированных строковых значений в примечаниях с динамическими отсечениями?


person deca    schedule 22.11.2016    source источник


Ответы (1)


Это интересная проблема. После проверки кода я думаю, что проблема возникает из-за того, что код, который заменяет [***], [**] и т. Д. С соответствующими отсечениями, появляется до применения пользовательского вектора notes (когда он должен быть после). Итак, решением было бы переупорядочить код, чтобы он шел в правильном порядке. Это требует небольшой коррекции кода. Следующее работает для меня; Я использую stargazer_5.2:

library(stargazer)

## Create new stargazer.wrap() to rearrange order of blocks
x <- capture.output(stargazer:::.stargazer.wrap)
idx <- c(grep("for \\(i in 1:length\\(\\.format\\.cutoffs\\)\\)", x)[2],
  grep("if \\(!is\\.null\\(notes\\)\\)", x),
  grep("if \\(!is\\.null\\(notes\\.align\\)\\)", x)[2])
eval(parse(text = paste0("stargazer.wrap <- ", paste(x[c(1:(idx[1] - 1), 
    (idx[2]):(idx[3] - 1), 
    idx[1]:(idx[2] - 1), 
    idx[3]:(length(x) - 1))], collapse = "\n"))))

## Create a new stargazer.() that uses our modified stargazer.wrap() function
x <- capture.output(stargazer)
x <- gsub(".stargazer.wrap", "stargazer.wrap", x)
eval(parse(text = paste0("stargazer. <- ", paste(x[-length(x)], collapse = "\n"))))

Результаты: Во-первых, до:

stargazer(lm(mpg ~ wt, mtcars), 
  type = "text",
  notes.append = FALSE,
  notes =  c("Signif. codes: 0 $***$ [.***] $**$ [.**] $*$ [.*]"))
# ===============================================================
#                                 Dependent variable:            
#                     -------------------------------------------
#                                         mpg                    
# ---------------------------------------------------------------
# wt                                   -5.344***                 
#                                       (0.559)                  

# Constant                             37.285***                 
#                                       (1.878)                  

# ---------------------------------------------------------------
# Observations                            32                     
# R2                                     0.753                   
# Adjusted R2                            0.745                   
# Residual Std. Error               3.046 (df = 30)              
# F Statistic                   91.375*** (df = 1; 30)           
# ===============================================================
# Note:               Signif. codes: 0 *** [.***] ** [.**] * [.*]

Как вы отметили, у нас есть проблема. Теперь, используя нашу модифицированную функцию stargazer.() (обратите внимание на точку в конце):

stargazer.(lm(mpg ~ wt, mtcars), 
  type = "text",
  notes.append = FALSE,
  notes =  c("Signif. codes: 0 $***$ [.***] $**$ [.**] $*$ [.*]"))
# ========================================================
#                             Dependent variable:         
#                     ------------------------------------
#                                     mpg                 
# --------------------------------------------------------
# wt                               -5.344***              
#                                   (0.559)               

# Constant                         37.285***              
#                                   (1.878)               

# --------------------------------------------------------
# Observations                         32                 
# R2                                 0.753                
# Adjusted R2                        0.745                
# Residual Std. Error           3.046 (df = 30)           
# F Statistic                91.375*** (df = 1; 30)       
# ========================================================
# Note:               Signif. codes: 0 *** .01 ** .05 * .1
person Weihuang Wong    schedule 22.11.2016