2

我正在使用 R 的 fda 包来生成随机曲线样本。更具体地说,我正在使用具有周期变化的傅立叶级数来表示我需要的特定结构。定义样本工作正常,但是当基函数的数量足够大并且我想在样本上应用“pca.fd”时遇到问题。错误是:

"leading minor of order [... e.g. 24] is not semi positive definite."

我想知道为什么会发生这种情况,以及是否有办法规避它。显然,这是一个数字或统计问题,而不是纯粹的编码问题。但是我分配的所有系数都是独立同分布的,并且傅立叶基提供了正交函数。此外,当时间段设置为其默认级别时,一切正常。那么 period=2 出了什么问题?

我很高兴有任何关于这个问题的提示。非常感谢您提前!

这是一些重现错误的代码:

nc <- 40 # Number of curves  
nb <- 101 # Number of basis functions  
coefm <- matrix(rnorm(nb*nc),nrow=nb,ncol=nc) # random coeficient matrix

# basis function object with "normal" period:  
mybase = create.fourier.basis(rangeval=c(0,1), nbasis=nb, period=1) 

# generate the sample of curves:  
fdobj <- fd(coefm,mybase) 

# Principal component analysis:  
pca.fd(fdobj) # should work, even though the number of basis functions is large.

# Now: change the period of the fourier basis object:  
mybase = create.fourier.basis(rangeval=c(0,1), nbasis=nb, period=2)  
fdobj <- fd(coefm,mybase)  

pca.fd(fdobj) # Here is the error. However, this does not happen with nb<20 
4

1 回答 1

0

不幸的是,没有简单直接的答案。我联系了 fda 包的维护者,在他们调查了这个问题后,让我知道我所做的事情对于我生成的曲线的影响非常糟糕。显然,曲线在其范围的某些部分非常相似,以至于 pca 遇到了某种数字困难。所以要结束这个问题,我不再期待更好的答案了。

于 2017-07-25T08:32:07.643 回答