【问题标题】:R: Collecting Regression ModelsR:收集回归模型
【发布时间】:2013-11-22 13:10:12
【问题描述】:

我使用 for 循环将 100 个线性模型和 100 个二次模型拟合到相同的合成数据。

我想(随机)提取 5 个线性拟合和 5 个二次拟合,并将这些回归函数与真实模型的均值函数一起绘制。

到目前为止我的想法:

  1. 选择 10 个随机数
  2. 创建一个容器(数据框?)来容纳 10 个模型
  3. 进入 for 循环,获取拟合,如果第 i 次迭代来自随机数集,则将该模型保存在容器中。
  4. 退出循环,将容器中的所有拟合与真实模型一起绘制

我遇到的主要困难是如何为“lm”类创建一个空数据框。

在for循环之前,构建容器,

fit.container.linear <- list()
fit.container.quadratic <- list()

并为将要进入容器的模型随机选择索引

randy.linear <- sample(1:100,5,replace=F) 
randy.quadratic <- sample(1:100,5,replace=F) 

然后在 for 循环中,我使用 lm 得到一个线性和二次模型。 model.1 是线性的。 model.2 是二次的。现在在 for 循环中,我将模型存储在容器中

for (k in 1:length(randy.linear)){
    if (i == randy.linear[k]){
        fit.container.linear <- list(fit.container.linear,model.1)
    }
    }

for (p in 1:length(randy.quadratic)) {
    if (i == randy.linear[p]){
        fit.container.quadratic <- list(fit.container.quadratic,model.2)
    }
}

退出 for 循环。

现在我想访问保存系数的容器,并在一张图上绘制所有内容。

【问题讨论】:

  • 你想要的容器是一个列表:results &lt;- list().
  • 谢谢。有没有办法直接从结果中绘制?命令 plot(results[1]) 抛出错误。
  • 您可以编辑您的问题以发布您目前获得的代码吗?

标签: r


【解决方案1】:

我会将所有模型存储在一个列表中,然后将它们编入索引。

lin_mods <- vector(mode = "list", length = 100)
quad_mods  <- vector(mode = "list", length = 100)

for(i in 1:100){
    # ....
    lin_mods[[i]]  <- model.1
    quad_mods[[i]] <- model.2
}

randy_linear    <- sample(1:100, 5, replace=F) 
randy_quadradic <- sample(1:100, 5, replace=F)

rand_lin_mods  <- lin_mods[randy_linear]
rand_quad_mods <- quad_mods[randy_quadradic]

至于绘制它们,如果不了解原始数据和预测变量,很难给出一个好的答案。你可以尝试的是:

pred_grid <- expand.grid(y = seq(min(data$y), max(data$y), length = 100)
get_fit <- function(model, newdata){
    newdata$fit <- predict(model, newdata = newdata)
    return(newdata)
}    

library(plyr)
names(randy_lin_mods) <- 1:5
names(randy_quad_mods) <- 1:5

lin_fits  <- ldply(randy_lin_mods,  get_fit, newdata = pred_grid)
quad_fits <- ldply(randy_quad_mods, get_fit, newdata = pred_grid)

现在lin_fitsquad_fits 是模型预测拟合的数据框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-30
    • 2018-04-28
    • 2018-01-26
    • 2016-10-03
    • 1970-01-01
    • 2020-10-10
    • 2020-04-21
    • 2021-04-28
    相关资源
    最近更新 更多