выходная таблица для нескольких регрессий - PullRequest
0 голосов
/ 19 января 2019

Я провел несколько регрессий временных рядов (по одному на каждый год), и теперь я хотел бы создать таблицу, аналогичную той, которую возвращает coef(), но также с уровнем значимости (звезды), R-квадрат и F-статистика для каждого года, которая будет выглядеть примерно так:

        b0    b1    b2    b3    b4    R-sq.    F-stat.
2010    ...*   
2011          ...
2012                ...**

До сих пор я пробовал mtable() из пакета memisc, который дает мне годы в виде столбцов и коэффициенты в виде строк, но я бы предпочел, чтобы результат былбыть "транспонированным" (как выше).

1 Ответ

0 голосов
/ 19 января 2019

Поскольку у нас нет доступа к вашим данным или коду, который вы использовали для запуска своих моделей, я создал свои собственные фиктивные модели, используя набор данных mtcars:

data("mtcars")
model1 <- lm(mpg ~ wt + cyl, data = mtcars)
model2 <- lm(mpg ~ wt + cyl + hp, data = mtcars)

Для дальнейшего использования вам всегда нужно будет предоставить некоторые данные, используя, например, dput(head(my_dataframe, 20)). Вы должны также добавить больше кода, который вы использовали, чтобы получить то, где вы находитесь; фактически минимальный объем кода, необходимый для воспроизведения вашей проблемы. Вы можете прочитать Как создать великолепный воспроизводимый пример R для получения дополнительной информации; это просто помогает другим помочь вам.

Затем я установил следующую (неуклюжую) функцию, которая, я думаю, выполняет примерно то, что вы ищете. В любом случае, вы должны начать в правильном направлении:

get_row <- function(x, coef_names) {
    coef_mat <- coef(summary(x))
    these_coef_names <- rownames(coef_mat)
    rows <- match(coef_names, these_coef_names)
    p <- coef_mat[rows, 4]
    stars <- c("", "*", "**", "***")[(p < 0.05) + (p < 0.01) + (p < 0.001) + 1]
    coefs <- round(coef_mat[rows, 1], 3)
    output <- paste0(coefs, stars)
    output <- ifelse(grepl("NA", output), NA, output)
    return(output)
}
get_table <- function(...) {
    models <- list(...)
    if ( any(lapply(models, class) != "lm" ) ) {
        stop("This function has only been tested with lm objects.")
    }
    coef_names <- unique(unlist(sapply(models, variable.names)))
    coef_table <- t(sapply(models, get_row, coef_names))
    colnames(coef_table) <- coef_names
    return(coef_table)
}

get_table(model1, model2)

#      (Intercept) wt          cyl        hp      
# [1,] "39.686***" "-3.191***" "-1.508**" NA      
# [2,] "38.752***" "-3.167***" "-0.942"   "-0.018"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...