我想在斜率最大的点处获得x和y值,在样条曲线上获得最小值。我在this post看到了如何做到这一点,但无法在我的数据集上复制它。他们可以使用diff()
,但我的数据集具有特定的x和y向量。我的数据通常如下所示:
x<-c(0, 0.13, 0.22, 0.34, 0.44, 0.53, 0.62, 0.72, 0.83, 0.91)
y<-c(120, 121, 122, 122, 122, 122, 122, 121, 119, 103)
z <-data.frame(x, y)
z
plot(z)
xspline(z$x,z$y, shape=0.5)
但当然我不能用这个:
w <-xspline(z$x,z$y, shape=0.5)
plot(diff(w))
如果可以,我会这样做:
param1 <- which(abs(diff(w))==max(abs(diff(w))) )
param2 <-z[which(abs(diff(w))==max(abs(diff(w))) ) ]
param1 <- which(abs(diff(w))==min(abs(diff(w))) )
param2 <-z[which(abs(diff(w))==min(abs(diff(w))) ) ]
对于获得斜坡图的不同方法,或者另外获得这些参数的方法,我将不胜感激。也许我已经走了太多的样条&#39;路。
答案 0 :(得分:1)
只需使用
w <-data.frame(xspline(z$x,z$y, shape=0.5, draw=F))
这会使w
成为一个data.frame,其中x
和y
值用于绘制样条线。然后你可以取y
中差异的最大值/最小值来估算最大和最小斜率点
plot(z)
with(w, lines(x,y))
with(w[which.max(diff(w$y)),], points(x,y,col="red"))
with(w[which.min(diff(w$y)),], points(x,y,col="blue"))
答案 1 :(得分:1)
根据@Carl Witthoft提供的线索,我安装了包numDeriv
,因此我可以使用grad()
,并继续我之前离开的位置:
`plot(splinefun(z, method="monoH.F")) #just to check the shape of the spline
w <-splinefun(z, method="monoH.F")
z$slopes <-grad(w, z$x, method="simple")
z
plot(z$slopes~z$x) #just out of interest
max.slope <- subset(z, slopes==max(z$slopes))
max.slope.y <-max.slope$y[1]
max.slope.x <-max.slope$x[1]`
也许不是那么优雅,但是做了伎俩。我注意到splinefun()
和xspline()
之间样条曲线的形状略有不同,这可能与我的应用相关或不相关。