library(MASS)
set.seed(1)
medv = Boston$medv从 Q1 和 Q2 中选做一题即可.
你需要使用 Rmarkdown 或 Quarto 来复现 (replicate) 我的结果. 提交作业时, 你需要同时提交源文件 (Rmd 或 Qmd) 以及生成的 HTML 文件. 请将你的所有文件以压缩包的形式 (ZIP) 上传. 压缩格式不要用 RAR, 用 ZIP.
完成作业的过程中, 你会遇到一些你没见过的函数, 如 quantile(). 你可以使用命令 ?quantile 来查询相关文档, 一般看看最下方的例子 Examples 即可.
即使设定了相同的随机数种子, 你的最终结果仍可能和我的不同. 这可能是因为 (i) 我们使用的再抽样计算方法不同 和 (ii) 我们使用的 R 或相关包的版本不一样. 鉴于此, 设定相同的随机数种子后, 即使你的结果和我不完全一致也没关系. 只要你的方法是正确的即可.
考虑 MASS 包中的 Boston 数据集, 本问题只会用到其中的房价中位数数据 medv.
library(MASS)
set.seed(1)
medv = Boston$medvmean() 计算 medv (房价中位数)的样本均值, 记为 medv.mean.medv.mean[1] 22.53281
计算得到的样本均值 medv.mean 可视作对总体均值的估计, . 我们接下来计算 的标准误.
medv.err[1] 0.4088611
K=1000 次再抽样, 计算 的标准误, 并和上一问中的结果进行比较.sample 函数进行有放回的再抽样; 也可以直接调用 boot 包中的 boot 函数进行计算: boot(data, estimator_fun, K).library(boot)
bstrap = boot(medv, boot.fn, 1000)
bstrap
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = medv, statistic = boot.fn, R = 1000)
Bootstrap Statistics :
original bias std. error
t1* 22.53281 0.007650791 0.4106622
t.test(medv) 的结果进行比较.c(bstrap$t0 - boot.se, bstrap$t0 + 2 * boot.se)[1] 22.12214 23.35413
t.test(medv)
One Sample t-test
data: medv
t = 55.111, df = 505, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
21.72953 23.33608
sample estimates:
mean of x
22.53281
medv 总体中位数的估计, .medv.med[1] 21.2
boot(medv, boot.fn, 1000)
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = medv, statistic = boot.fn, R = 1000)
Bootstrap Statistics :
original bias std. error
t1* 21.2 -0.0386 0.3770241
quantile() 函数, 给出 medv 的10%-分位数的估计, 记作 .medv.tenth 10%
12.75
boot(medv, boot.fn, 1000)
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = medv, statistic = boot.fn, R = 1000)
Bootstrap Statistics :
original bias std. error
t1* 12.75 0.0186 0.4925766
本问题考虑 Boston 数据集, 我们尝试预测其中的 “人均犯罪” (crim) 这个变量.
分别使用最优子集选择 (Best subset selection), LASSO, 岭回归的方法来预测 crim.
使用交叉验证来评价这三个模型的预测效果, 哪个模型的预测效果最好?
你的模型是否包括了所有可能用到的特征 (features)? 为什么?