重复最小二乘回归以检查估计和预测的一致性与真实性

时间:2016-10-08 18:03:09

标签: r regression linear-regression lm least-squares

问题在于:Y分别对X = 4, 8, 12, 16, 20进行五次观察。真正的回归函数是E(y) = 20 + 4X,而ei是独立的N(O, 25)

  1. 生成五个正态随机数,平均值为0,方差为25.将这些随机数视为Y的五个X = 4,8, 12, 16, 20观察值的误差项,并计算Y1Y2Y3Y4Y5。在为五个案例拟合直线时,获得最小二乘估计bob1。同时在Yh时计算Xh = 10,并在E(Yh)时获得Xh = 10的95%置信区间。我做了第1部分,但我需要帮助重复它200次。

  2. 重复第(1)部分200次,每次都产生新的随机数。

  3. 制作200个估算值b1的频率分布。计算200个估计值b1的平均值和标准差。结果是否与理论预期一致?

  4. E(Yh)包含Xh = 10时,E(Yh)的200个置信区间有多大比例?这个结果是否符合理论预期?

  5. 到目前为止,这是我的代码,我对如何重复第1部分200次感到难过:

    X <- matrix(c(4, 8, 12, 16, 20), nrow = 5, ncol = 1)
    e <- matrix(c(rnorm(5,0,sqrt(5))), nrow = 5, ncol = 1)
    Y <- 20 + 4 * X + e
    mydata <- data.frame(cbind(Y=Y, X=X, e=e))
    names(mydata) <- c("Y","X","e")
    reg<-lm(Y ~ X, data = mydata)
    predict(reg, newdata = data.frame(X=10), interval="confidence")
    

1 个答案:

答案 0 :(得分:1)

您的代码中存在错误。您希望出现独立的N(O, 25)错误,但您已将sqrt(5)作为标准错误传递给rnorm()。它应该是5

我们首先将您的代码包装成一个函数。此函数不接受任何输入,但只运行一次实验,并在中返回回归系数b0b1和预测fitlwrupr命名为 vector。

sim <- function () {
  x <- c(4, 8, 12, 16, 20)
  y <- 20 + 4 * x + rnorm(5,0,5)
  fit <- lm(y ~ x)
  pred <- predict(fit, data.frame(x = 10), interval = "confidence")
  pred <- setNames(c(pred), dimnames(pred)[[2]])
  ## return simulation result
  c(coef(fit), pred)
  }

例如,让我们试试

set.seed(2016)
sim()
#(Intercept)           x         fit         lwr         upr 
#  24.222348    3.442742   58.649773   47.522309   69.777236 

现在我们使用replicate重复此类实验200次。

set.seed(0)
z <- t(replicate(200, sim()))

head(z)
#     (Intercept)        x      fit      lwr      upr
#[1,]   24.100535 3.987755 63.97808 57.61262 70.34354
#[2,]    6.417639 5.101501 57.43265 52.44263 62.42267
#[3,]   20.652355 3.797991 58.63227 52.74861 64.51593
#[4,]   20.349829 3.816426 58.51409 52.59115 64.43702
#[5,]   19.891873 4.095140 60.84327 57.49911 64.18742
#[6,]   24.586749 3.589483 60.48158 53.64574 67.31743

将有200行,用于200次模拟的结果。 第二列包含200 {200}模拟下b1的估算,我们计算它们的均值和标准误差:

mean(z[,2])
# [1] 3.976249

sd(z[,2])
# [1] 0.4263377

我们知道真正的值是4,很明显我们的估计与真实值一致。

最后,让我们用X = 10的95%置信区间进行预测。真值为20 + 4 * 10 = 60,因此涵盖此真实值的置信区间的比例为

mean(z[, "lwr"] < 60 & z[, "upr"] > 60)
## 0.95

完全 0.95。