我想知道如何在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"))
多个Bootstrap曲线如本书左下角的图8.2所示.
@L_404_0@
名为Bone Mineral Density的数据可以从这个网站获得:
data
解决方法
您可以使用smooth.spline和lines绘制样条曲线:
plot.spline = function(x,...) { s = smooth.spline(x,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",col="blue")
最终结果:
1: In smooth.spline(x,cv = TRUE) : crossvalidation with non-unique 'x' values seems doubtful
这是因为引导程序重新取样. smooth.spline使用交叉验证来确定给出样条曲线的自由度数,但是它不希望使用重复的x值(因为实际上总是会有自举重新采样).你可以通过选择你自己的自由度来解决这个问题,但这可能就此而言很好.