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
ます (事実上、ブートストラップのリサンプリングでは常に存在するため)。独自の自由度を選択することでこれを回避できますが、これはおそらくこの目的には問題ありません。