我使用 smooth.spline
来估算数据的三次样条 . 但是当我使用方程式计算90%的逐点置信区间时,结果似乎有点偏差 . 有人可以告诉我,如果我做错了吗?我只是想知道是否有一个函数可以自动计算与 smooth.spline
函数关联的 point-wise interval band .
boneMaleSmooth = smooth.spline( bone[males,"age"], bone[males,"spnbmd"], cv=FALSE)
error90_male = qnorm(.95)*sd(boneMaleSmooth$x)/sqrt(length(boneMaleSmooth$x))
plot(boneMaleSmooth, ylim=c(-0.5,0.5), col="blue", lwd=3, type="l", xlab="Age",
ylab="Relative Change in Spinal BMD")
points(bone[males,c(2,4)], col="blue", pch=20)
lines(boneMaleSmooth$x,boneMaleSmooth$y+error90_male, col="purple",lty=3,lwd=3)
lines(boneMaleSmooth$x,boneMaleSmooth$y-error90_male, col="purple",lty=3,lwd=3)
因为我不确定我是否正确使用了,所以我使用了 mgcv
函数中的 gam()
函数 .
它立即给了一个信心乐队,但我不确定它是90%还是95%CI或其他什么 . 如果有人可以解释,那将是很棒的 .
males=gam(bone[males,c(2,4)]$spnbmd ~s(bone[males,c(2,4)]$age), method = "GCV.Cp")
plot(males,xlab="Age",ylab="Relative Change in Spinal BMD")
2 回答
我不确定
smooth.spline
的置信区间是否像lowess
那样具有"nice"置信区间 . 但是我发现了一个来自CMU Data Analysis course的代码样本来制作贝叶斯bootstap置信区间 .以下是使用的功能和示例 . 主要功能是
spline.cis
,其中第一个参数是数据框,其中第一列是x
值,第二列是y
值 . 另一个重要参数是B
,表示要执行的引导程序复制的数量 . (有关详细信息,请参阅上面链接的PDF . )这给了类似的东西
实际上,看起来可能存在使用折刀残差计算置信区间的更具参数的方法 . 此代码来自S+ help page for smooth.spline
这导致了
并且就
gam
置信区间而言,如果您阅读print.gam
帮助文件,则会有se=
参数,默认为TRUE
且文档说因此,您可以通过调整此参数来调整置信区间 . (这将在
print()
电话中 . )R包
mgcv
计算平滑样条和贝叶斯"confidence intervals."这些不是通常(频率论)意义上的置信区间,但数值模拟表明几乎没有区别;请参阅mgcv
帮助文件中Marra和Wood的链接论文 .