【问题标题】:loop linear regression over samples that contain multiple observations包含多个观测值的样本的循环线性回归
【发布时间】:2015-06-26 13:08:38
【问题描述】:

我有一个线性回归模型 y = 50 + 10x + e,其中 e 是正态分布的。

每次拟合模型时,我都需要使用 20 对 x 和 y 值,其中 x 是 seq(from = 0.5, to = 10, by = 0.5)。

我的第一个任务是拟合模型 100 次。也就是说,生成 100 个样本,每个样本由 10 对 x 和 y 值组成。

我的第二个任务是保存 100 个模型拟合实例的截距和斜率。

我不成功的代码如下:

linear_model <- c()
intercept <- c()
slope <- c()

for (i in 1:100) {
e <- rnorm(n = 20, mean = 0, sd = 4)
x <- seq(from = 0.5, to = 10, by = 0.5)
y <- 50 + 10 * x + e
linear_model[i] <- lm(formula = y ~ x)
intercept[i] <- summary(object = linear_model[i])$coefficients[1, 1]
slope[i] <- summary(object = linear_model[i])$coefficients[2, 1]
}

【问题讨论】:

  • 如果您从linear_model &lt;- list() 开始,然后将所有linear_model[i] 实例替换为linear_model[[i]],应该没问题。您不能制作线性模型的向量,但可以制作它们的列表。
  • 感谢@josiber,您的解决方案有效。请随时将您的评论复制到答案中,我可以给它打勾。

标签: r


【解决方案1】:

您为错误但20 x值生成了10个随机变量,以便维度不匹配。 20 个随机变量或 10 个 x 值都可以。

下面是我的试用 - 请注意,循环仅制作两次(倍= 2),而在您的示例中是100。

errs <- lapply(rep(x=20, times=2), rnorm, mean=0, sd=4)
x <- seq(0.5, 10, 0.5)
y <- lapply(errs, function(err) 50 * x + err)

myLM <- function(res) {
    mod <- lm(formula = res ~ x)
    out <- list(intercept = mod$coefficients[1],
                slope = mod$coefficients[2])
    out
}
fit <- sapply(y, myLM)

fit
         [,1]        [,2]     
intercept 0.005351345 -2.362931
slope     50.13638    50.60856     

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2016-01-17
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    相关资源
    最近更新 更多