2012-11-06 41 views
6

Tôi đang tự hỏi làm thế nào để vẽ những đường cong nhiều bootstrap trong R. Các mã của tôi là nhưVẽ nhiều đường cong Bootstrap trong R

dat2 <- read.delim("bone.data", sep ="\t", header= TRUE) 
y <- dat2[,4] 
x <- dat2[,2] 
plot(x,y,xlab="age",ylab="BMD",col=ifelse(dat2[,3]=="female","red","blue")) 

Bội Curves Bootstrap được như hình 8.2 dưới trái một trong cuốn sách này . ESL

enter image description here

Và dữ liệu có tên Mật độ xương khoáng có thể nhận được từ trang web này: data

Các liên kết trực tiếp đến tập tin hạnh phúc: here

+4

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

+0

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? –

Trả lời

6

Bạn có thể vẽ một đường cong spline sử dụng smooth.splinelines:

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ả:

enter image description here

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.

+0

Tôi thấy từ việc kiểm tra rằng thiết lập 'cv = NA' trong lời gọi' smooth.spline' không xuất hiện với các cảnh báo và dường như không ảnh hưởng đến hoạt động làm mịn. Sau khi đọc phần trợ giúp, tôi không biết gì về bất kỳ vấn đề tiềm tàng nào khi sử dụng phương pháp này. Có suy nghĩ gì không? – thelatemail

+0

@thelatemail: Khi tôi chạy nó với 'cv = NA' tất cả các đường cong được thay thế bởi các đường thẳng - điều đó không xảy ra với bạn? Tương tự như vậy, việc đặt 'cv = FALSE' dẫn đến quá nhiều mức độ tự do, và các đường cong quá lởm chởm. –

+0

Tôi không biết mình đã làm gì, nhưng ở đâu đó tôi đã nhầm lẫn. Tôi đang nhận được kết quả tương tự như bạn bây giờ. Phấn lên một vài tuần. – thelatemail

Các vấn đề liên quan