多元回归的输出表

时间:2019-01-19 15:25:00

标签: r

我运行了多个时间序列回归(每年一次),现在我想生成一个与coef()返回的表类似,但也具有显着性水平(星号),R平方和每年的F统计信息如下所示:

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

到目前为止,我尝试使用memisc软件包中的mtable(),它使我可以将多年作为列,将coeffecients作为行,但是我希望结果是“转置的”(如上)。

1 个答案:

答案 0 :(得分:0)

由于我们无权访问您的数据或用于运行模型的代码,因此我使用mtcars数据集创建了自己的虚拟模型:

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

为将来参考,您总是希望使用dput(head(my_dataframe, 20))等提供一些数据。您还应该提供更多用于到达目的地的代码。实际上,重现问题所需的最少代码量。您可能需要阅读How to Create a Great R Reproducible Example以获得更多信息;它只会帮助别人帮助您。

然后,我组装了以下我认为大致能实现的功能(笨拙)。无论如何,它应该使您朝正确的方向开始:

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"