R の fda パッケージを使用して、曲線のランダム サンプルを生成しています。より具体的には、周期が変化するフーリエ級数を使用して、必要な特定の構造を表しています。サンプルの定義は正常に機能しますが、基底関数の数が十分に多く、サンプルに 'pca.fd' を適用したい場合に問題が発生します。エラーは次のとおりです。
"leading minor of order [... e.g. 24] is not semi positive definite."
どうしてこうなったのか、また回避する方法があればと思います。明らかに、純粋なコーディングの問題ではなく、むしろ数値的または統計的な問題です。しかし、割り当てられた係数はすべて iid であり、フーリエ基底は直交関数を提供します。さらに、期間がデフォルトレベルに設定されている場合、すべてが正常に機能します。では、 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