r - 提高拟合许多模型的效率

标签 r model regression coefficients

感谢之前帮助我解决关于 coefficients 问题的人和 p values来自许多模型。现在,我可以从许多模型中获取所有系数、p 值和 AIC 值。

md <- "mpg ~ cyl" 
xlist <- c("disp", "hp", "am")
n <- length(xlist)
comb_lst <- unlist(lapply(1:n, function(x) combn(xlist, x, simplify = F)), recursive = F)
md_lst <- lapply(comb_lst, function(x) paste(md, "+", paste(x, collapse = "+")))

coefs <- unlist(lapply(md_lst, function(x) lm(as.formula(x),data = mtcars)$coe[2]))
pvalues <- unlist(lapply(md_lst, function(x) summary(lm(as.formula(x), data = mtcars))$coe["cyl", 4]))
aic <- unlist(lapply(md_lst, function(x) AIC(lm(as.formula(x), data = mtcars))))

从上面的代码可以看出,最后 3 行中的每一行都会独立地拟合多个模型。这意味着代码将拟契约(Contract)一组模型 3 次。对于大数据和许多变量,这可能很耗时。我的问题是如何一次性拟合所有模型,然后再获取系数、p 值和 AIC 值。

最佳答案

为方便起见,我使用了我编写的 package 中的一个函数。可以通过使用 summary 来避免,如另一个 answer 所示。

我们可以做到:

models <- lapply(md_lst, function(x) do.call(lm, list(formula =x,
                                                      data=mtcars)) )
sapply(models, function(x) { cbind(coef(x),
 manymodelr::extract_model_info(x, "p_value")["cyl"], AIC(x) )})

我不想使用包(manymodelr)

sapply(models, function(x) {
  cbind(coef(x),coef(summary(x))[,4]["cyl"],
        AIC(x)
        )})

这为我们提供了一个矩阵列表,其中每一列分别代表系数、p 值和 AIC。

结果(截断)

   [[1]]
                       [,1]       [,2]     [,3]
    (Intercept) 34.66099474 0.03366495 167.1456
    cyl         -1.58727681 0.03366495 167.1456
    disp        -0.02058363 0.03366495 167.1456

    [[2]]
                      [,1]         [,2]     [,3]
    (Intercept) 36.9083305 0.0004803752 169.5618
    cyl         -2.2646936 0.0004803752 169.5618
    hp          -0.0191217 0.0004803752 169.5618

    [[3]]
                     [,1]        [,2]     [,3]
    (Intercept) 34.522443 1.28456e-07 167.2191
    cyl         -2.500958 1.28456e-07 167.2191
    am           2.567035 1.28456e-07 167.2191

    [[4]]
                       [,1]      [,2]     [,3]
    (Intercept) 34.18491917 0.1349044 168.0184
    cyl         -1.22741994 0.1349044 168.0184
    disp        -0.01883809 0.1349044 168.0184
    hp          -0.01467933 0.1349044 168.0184

关于r - 提高拟合许多模型的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58232088/

相关文章:

r - 我如何对 data.table 中特定列的不同子集取平均值?

linux - 为什么boost::aio基于epoll(synchronous)实现是异步的

node.js - 重命名模型文件中的列名 - Sequelize

r - 计算非线性回归的 R^2 值

python - 训练的 Tensorflow CNN 回归 MSE 高于测试

r - MLR - getBMRModels - 如何从基准测试结果访问每个模型

R:数据框或列表列表中的部分(或完全)匹配

r - 如何在 RMarkdown 文档中使用引用书目 YAML 元素的 URL?

model - 如何制作字段取决于 product.product 的 lst_price 但可以编辑

arrays - 将平面拟合到二维数组