smooth.spline
您可以使用和绘制样条曲线lines
:
plot.spline = function(x, y, ...) {
s = smooth.spline(x, y, cv=TRUE)
lines(predict(s), ...)
}
因此,为了执行引导,按照书中的说明,您从数据中随机抽取行替换,并调用plot.spline
重新抽样的数据:
bootstrap.curves = function(dat, nboot, ...) {
for (i in 1:nboot) {
subdata = dat[sample(NROW(dat), replace=TRUE), ]
plot.spline(subdata$age, subdata$spnbmd, ...)
}
}
因此,您可以使用此函数为男性和女性运行单独的图:
bootstrap.curves(dat2[dat2$gender == "female", ], 10, col="red")
bootstrap.curves(dat2[dat2$gender == "male", ], 10, col="blue")
最终结果:
注意:此代码将产生许多警告(不是错误),如下所示:
1: In smooth.spline(x, y, cv = TRUE) :
crossvalidation with non-unique 'x' values seems doubtful
这是因为自举重采样。smooth.spline
使用交叉验证来决定给出样条曲线的自由度的数量,但它不喜欢对重复x
值这样做(因为实际上总是会使用自举重采样)。您可以通过选择自己的自由度数来解决此问题,但这可能适用于此目的。