【发布时间】:2018-09-11 17:26:03
【问题描述】:
我有一个适合滞后的测量值。出于可视化目的,我想绘制一条近似滞后的线来帮助解释这种模式。
我想要一个类似于绿色曲线的输出 - 但是我没有直接可用的数据,我不在乎它是否是尖的。
但是大多数平滑函数,例如我用蓝色绘制的smooth.spline - 不允许循环。我能找到的最接近的来自bezier 库 - 以红色绘制。在这里不太明显,但它会产生一个循环,但它很不适合(并且会给出一些警告并且需要相当长的时间)。
你能推荐一个方法吗?
set.seed(12345)
up <- seq(0,1,length.out=100)^3
down <- sqrt(seq(1,0,length.out=100))
x <- c(seq(0,1,length.out=length(up)),
seq(1,0, length.out=length(down)))
data <- data.frame(x=x, y=c(up,down),
measuredx=x + rnorm(length(x))*0.01,
measuredy=c(up,down) + rnorm(length(up)+length(down))*0.03)
with(data,plot(measuredx,measuredy, type = "p"))
with(data,lines(x,y, col='green'))
sp <- with(data,smooth.spline(measuredx, measuredy))
with(sp, lines(x,y, col="blue"))
library(bezier)
bf <- bezierCurveFit(as.matrix(data[,c(1,3)]))
lines(bezier(t=seq(0, 1, length=500), p=bf$p), col="red", cex=0.25)
更新
事实证明我的实际问题略有不同,我提出另一个问题以反映我在问题中的实际问题:How to fit a smooth hysteresis in a poorly distributed data set?
【问题讨论】: