R通过(a)固定点将多项式拟合为数据

时间:2015-01-26 10:38:22

标签: r interpolation curve-fitting polynomials

我遇到了一个非常具体的问题,我必须找到一个描述植物(标准化)叶子形状的函数。问题不仅在于找到最能描述数据的多项式,而且它从(0,0)开始在(1,0)处结束并在最大宽度点(x_ymax,1)处移动而不会变宽。

我尝试的另一个选项是Hermite插值,使用这3个特定点作为控制点,但它提供的功能远离叶子的实际形状,除非我提供更多的控制点。

是否有针对此的特定功能,还是需要进行一些手动转换?或者是否有更好或替代方案来解决这个问题?

提前致谢!

1 个答案:

答案 0 :(得分:1)

我不确定这是否会一直有效,但这里有一个"广义添加模型"使用循环样条曲线。当你指定模型不应该有一个截距(即在公式中包含-1时,它应该通过y = 0.你必须将预测变量缩放到0到1之间,以便结束通过您提到的要点(有关详细信息,请参阅here。)。

实施例

# required model
library(mgcv)

# make data
n <- 200
tmp <- seq(0,20*pi,,n)
x <- tmp / (2*pi)
mon <- x%%1
err <- rnorm(n, sd=0.5)
y <- sin(tmp) + err + 1
plot(x, y, t="l")
df <- data.frame(x, y, mon)

# GAM with intercept
fit1 <- gam(y ~ s(mon, bs = "cc", k = 12), data=df)
summary(fit1)
plot(fit1)

# GAM without intercept
fit2 <- gam(y ~ s(mon, bs = "cc", k = 12) - 1, data=df) # note "-1" for no intercept
summary(fit2)
plot(fit2)

enter image description here