6

我想知道如何在 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"))

多个引导曲线就像本书中的图 8.2 左下角一样。 英语母语

在此处输入图像描述

而名为Bone Mineral Density 的数据可以从这个网站获得: data

文件的直接链接是:here

4

1 回答 1

6

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值这样做(因为实际上总是会使用自举重采样)。您可以通过选择自己的自由度数来解决此问题,但这可能适用于此目的。

于 2012-11-06T16:12:51.250 回答