对包含多个观察的样本进行循环线性回归

时间:2015-04-19 23:41:18

标签: r

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

每次我适合模型时,我都需要使用20对x和y值,其中x是seq(从= 0.5到= 10,乘以= 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]
}

1 个答案:

答案 0 :(得分:0)

您已为错误生成了10个随机变量,但生成了20个x,因此尺寸不匹配。 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