- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用smooth.spline
来估计我的数据的三次样条。但是当我使用方程计算 90% 逐点置信区间时,结果似乎有点偏差。有人可以告诉我我是否做错了吗?我只是想知道是否有一个函数可以自动计算与 smooth.spline
函数关联的逐点间隔带。
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")
最佳答案
我不确定 smooth.spline
的置信区间是否像 lowess
那样具有“良好”的置信区间。但我从 CMU Data Analysis course 找到了一个代码示例建立贝叶斯引导置信区间。
以下是使用的函数和示例。主要函数是 spline.cis,其中第一个参数是数据框,其中第一列是 x 值,第二列是 y 值> 值(value)观。另一个重要参数是 B,它指示要执行的引导复制数量。 (有关完整详细信息,请参阅上面链接的 PDF。)
# Helper functions
resampler <- function(data) {
n <- nrow(data)
resample.rows <- sample(1:n,size=n,replace=TRUE)
return(data[resample.rows,])
}
spline.estimator <- function(data,m=300) {
fit <- smooth.spline(x=data[,1],y=data[,2],cv=TRUE)
eval.grid <- seq(from=min(data[,1]),to=max(data[,1]),length.out=m)
return(predict(fit,x=eval.grid)$y) # We only want the predicted values
}
spline.cis <- function(data,B,alpha=0.05,m=300) {
spline.main <- spline.estimator(data,m=m)
spline.boots <- replicate(B,spline.estimator(resampler(data),m=m))
cis.lower <- 2*spline.main - apply(spline.boots,1,quantile,probs=1-alpha/2)
cis.upper <- 2*spline.main - apply(spline.boots,1,quantile,probs=alpha/2)
return(list(main.curve=spline.main,lower.ci=cis.lower,upper.ci=cis.upper,
x=seq(from=min(data[,1]),to=max(data[,1]),length.out=m)))
}
#sample data
data<-data.frame(x=rnorm(100), y=rnorm(100))
#run and plot
sp.cis <- spline.cis(data, B=1000,alpha=0.05)
plot(data[,1],data[,2])
lines(x=sp.cis$x,y=sp.cis$main.curve)
lines(x=sp.cis$x,y=sp.cis$lower.ci, lty=2)
lines(x=sp.cis$x,y=sp.cis$upper.ci, lty=2)
这给出了类似的东西
实际上,看起来可能有一种更参数化的方法来使用折刀残差计算置信区间。此代码来自S+ help page for smooth.spline
fit <- smooth.spline(data$x, data$y) # smooth.spline fit
res <- (fit$yin - fit$y)/(1-fit$lev) # jackknife residuals
sigma <- sqrt(var(res)) # estimate sd
upper <- fit$y + 2.0*sigma*sqrt(fit$lev) # upper 95% conf. band
lower <- fit$y - 2.0*sigma*sqrt(fit$lev) # lower 95% conf. band
matplot(fit$x, cbind(upper, fit$y, lower), type="plp", pch=".")
结果是
就 gam
置信区间而言,如果您阅读 print.gam
帮助文件,就会发现有一个 se=
参数默认为 TRUE
并且文档说
when TRUE (default) upper and lower lines are added to the 1-d plots at 2 standard errors above and below the estimate of the smooth being plotted while for 2-d plots, surfaces at +1 and -1 standard errors are contoured and overlayed on the contour plot for the estimate. If a positive number is supplied then this number is multiplied by the standard errors when calculating standard error curves or surfaces. See also shade, below.
所以可以通过调整这个参数来调整置信区间。 (这将在 print()
调用中进行。)
关于r - 如何获得 smooth.spline 的置信区间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23852505/
我有几个数据点似乎适合于通过它们拟合样条曲线。当我这样做时,我得到了一个非常坎bump的拟合,例如过度拟合,这不是我所理解的平滑。 是否有特殊的选项/参数来恢复像here这样的非常平滑的样条曲线的功能
在生产环境中运行 Angular 6 时出现此错误。 91%额外的 Assets 处理脚本-webpack-plugin✖「wdm」: Error: ENOENT: no such file or d
张力与三次样条插值有何关系?我指的是this article用于三次样条插值。第一个结点的张力系数 t=0,最后一个结点的张力系数 t=1。但是我们可以在哪里替换三次样条中的其他张力值,例如 0.1、
我是 R 的新手,我正在尝试将 smooth.spline() 应用于大型数据帧。我查看了相关线程(“将 n 个函数的列表应用于数据帧的每一行”,“如何应用样条基矩阵”,...)。这是我的数据框以及我
我知道平滑参数(lambda)对于拟合平滑样条曲线非常重要,但是我在这里没有看到有关如何选择合理的lambda(spar =?)的任何文章,有人告诉我spar通常在0到1的范围内。当使用smooth.
我需要一个插值函数来插值一个点: var times = new List(); var offsets = new List(); .. .. ..//I fill times and offset
我尝试了几种不同的开箱即用选项来平滑我的数据中的一个步骤,但还没有完全找到我所追求的。在下面粘贴一个小的可复制示例。正如下面的屏幕截图中突出显示的,是否有一个 R 函数可以平滑步骤,类似于 smoot
我使用smooth.spline来估计我的数据的三次样条。但是当我使用方程计算 90% 逐点置信区间时,结果似乎有点偏差。有人可以告诉我我是否做错了吗?我只是想知道是否有一个函数可以自动计算与 smo
我想对一些数据进行平滑样条拟合,我注意到内部计算的 LOOCV 误差似乎取决于数据是否无序。具体来说,我只在订购数据时得到预期的结果。 我不明白为什么会出现这种情况?有帮助吗? set.seed(0)
我正在尝试在 Windows 中安装 Apache Spline。我的 Spark 版本是 2.4.0Scala 版本为 2.12.0我按照这里提到的步骤 https://absaoss.github
我正在准备一些代码来用样条插入一系列点。 有many kinds样条:二次,三次,许多边界条件...... 到目前为止,我已经尝试了最流行的:三次样条,边界条件: 自然:二阶导数在第一点和最后点为零。
下图中,Matlab中使用spap2函数来平滑噪声数据。结果非常好。 Eigen 库支持此功能 Splines 。我正在寻找 Eigen 中的示例以获得类似的结果。对于 Matlab,我使用了 spa
我想在 R 中平滑非常长、嘈杂的数据。但我发现对于高度周期性的数据,开箱即用的 smooth.spline() 很快就会崩溃,平滑后的数据开始出现振铃现象。 考虑一个余弦时间序列(有或没有噪声) t
我对它们之间的关系有点困惑。在我的课上,我的教授询问如何使用自动计算的切线将 C1 连续分段 Hermite 曲线拟合到 x 个点。有人可以解释这是如何工作的吗? 最佳答案 埃尔米特样条是 的一种方法
我找到了 2012 年 Android API 的 Spline 实现: https://android.googlesource.com/platform/frameworks/base/+/mas
我有一个效果很好的 highcharts 样条图。我改变了一些 ajax 调用,现在它不会绘制连接前 30 个左右点的线。它只是绘制点一段时间,然后线条就出现了。我更关心线条而不是点。 有谁知道为什么
我想在我的屏幕上生成一个随机样条。这是我目前所拥有的: public class CurvedPath { Random rn; CatmullRomSpline curve; float[] xPt
我有严格增加的数据,并希望拟合一个单调增加的平滑样条曲线以及 smooth.spline()由于此功能的易用性,请尽可能使用该功能。 例如,我的数据可以通过示例有效地重现: testx <- 1:10
有没有办法计算在 R 中具有平滑样条曲线(或类似曲线)的特定点的曲率? 该曲线是根据一组 x,y 点计算的。 先感谢您。 最佳答案 如果您知道有一个 predict(),这实际上很容易。 smooth
我有一个月度图表(在 highcharts 中制作),其中有两个 SPLINE 系列。我想为图表中的系列添加随机文本(基于系列的随机位置),我怎样才能实现这一点。 我希望它看起来像这样。 最佳答案 您
我是一名优秀的程序员,十分优秀!