Bạn có thể vẽ một đường cong spline sử dụng smooth.spline
và lines
:
plot.spline = function(x, y, ...) {
s = smooth.spline(x, y, cv=TRUE)
lines(predict(s), ...)
}
Vì vậy, để thực hiện bootstrapping, theo các hướng dẫn trong cuốn sách, bạn lấy mẫu hàng ngẫu nhiên từ dữ liệu với thay thế, và gọi plot.spline
trên các dữ liệu resampled:
bootstrap.curves = function(dat, nboot, ...) {
for (i in 1:nboot) {
subdata = dat[sample(NROW(dat), replace=TRUE), ]
plot.spline(subdata$age, subdata$spnbmd, ...)
}
}
Bạn do đó có thể sử dụng chức năng này để chạy lô riêng biệt cho nam và nữ:
bootstrap.curves(dat2[dat2$gender == "female", ], 10, col="red")
bootstrap.curves(dat2[dat2$gender == "male", ], 10, col="blue")
End kết quả:
Lưu ý: Mã này sẽ tạo ra một số lượng cảnh báo (không lỗi) mà hình như:
1: In smooth.spline(x, y, cv = TRUE) :
crossvalidation with non-unique 'x' values seems doubtful
Điều này là do các resampling bootstrap. smooth.spline
sử dụng xác thực chéo để quyết định số bậc tự do để cung cấp cho một spline, nhưng nó không muốn làm như vậy với các giá trị trùng lặp x
(vì sẽ luôn có hiệu quả với khả năng lấy lại bootstrap). Bạn có thể giải quyết vấn đề này bằng cách chọn số độ tự do của riêng bạn, nhưng điều này có lẽ là tốt cho mục đích này.
Nhiều đường cong khởi động nào? Hãy làm ví dụ của bạn [reproducible] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) và câu hỏi của bạn rõ ràng. – mnel
Không có mã nào trong sách hoặc tại trang web của sách. Bạn có quen thuộc với gói: khởi động không? –