无法使用FDA软件包R中的smooth.pos

时间:2018-08-15 12:30:07

标签: spline smoothing bspline

我有300个月的每日观察数据。我正在尝试使用FDA R软件包拟合每月bSplines。尽管我可以使用回归分析来平滑样条曲线,从而获得相对较好的拟合度,但它偶尔会产生负值。在我的示例中不可能使用负值,因此我尝试使用smooth.pos()约束样条曲线。但是,我一直没有成功。以下是我使用模拟数据的尝试:

set.seed(1)

m1 = c(rep(0,14), 0.1, rep(0, 13)) # Month 1
m2 = rnorm(28, 0.5, 0.1) # Month 2
dat = cbind(m1, m2)

sp.basis=create.bspline.basis(c(1,28), norder=6, nbasis=10)

sb.fd=smooth.basis(1:28, dat, sp.basis)$fd

plot(sb.fd)
points(dat[,2]) # Ignore that it is a relatively poor fit here, the actual data is better

parameters = fdPar(fdobj = sp.basis, Lfdobj = int2Lfd(4), lambda = 1e3)
sp.fd = smooth.pos(1:28, dat, parameters) 

plot(sp.fd$Wfdobj) 

我使用的代码会产生一个负的样条曲线,但是即使对系数进行各种转换(绝对值,指数等),也无法产生产生负值的拟合度。

我认为我错误地实现了smooth.pos,但不确定如何实现。任何指针将不胜感激。

我还有几个月的时间里,响应变量是恒定的。 smooth.pos似乎无法处理此问题。对于我来说,选择一个固定的基础而不是花键是有意义的。但是,由于最后一步将是在所有月份执行功能性PCA,因此我需要以同时拟合一系列样条曲线时形成的格式(smooth.basis(range,matrix.of.values,basedfd))形成它们。 。我不确定如何在不同时平滑一系列值的情况下重现此格式。因此,对此的指导也将非常有帮助!

0 个答案:

没有答案