2017-09-09 19 views
3

正でなければならない、私は私のデータをMATLABでtコピュラに合うようにしようとしていますし、私の機能は次のとおりです。MatLabの:CHOL行列が確定

u = ksdensity(range_1, range_1,'function','cdf'); 
v = ksdensity(range_2, range_2,'function','cdf'); 
%fit a t-copula to returns 
rng default ; % For reproducibility 
[Rho,nu] = copulafit('t',[u v],'Method','ApproximateML'); 

そして、私が言うエラーが出る:

エラーコレを使用する
マトリックスは正定でなければなりません。
copulafit/approxProfileNLL_tのエラー(行314)
nll = negloglike_t(nu、chol(Rho)、t_);
copulafitのエラー> bracket1D(行494)
oldnll = nllFun(bound);
copulafit(行126)のエラー
[lowerBnd、upperBnd] = bracket1D(profileFun、lowerBnd、5); %「上位」、5

から検索上昇は、私はそれが原因chol()分解が起こることを理解したが、私はこの問題を克服するために変更すべきパラメータがわかりません。どんな助けもありがとう。私が使用

データは次のようになりますされています:

range_1   range_2 
-0.639388612 -0.639388612 
1.029603565  1.029603565 
1.273883288  1.273883288 
0.754717135  0.754717135 
1.747817835  1.747817835 
1.717787291  1.717787291 
-0.120625114 -0.120625114 
2.173913469  2.173913469 
2.836879977  2.836879977 
-0.804601995 -0.804601995 
     0   0 

答えて

0

は実際に、あなたのrange1range2変数は全く同じです。コマンドウィンドウでの簡単なチェックは、それを確認:

eq = (range1 == range2) 

eq = 

    11×1 logical array 

    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 
    1 

copulafit機能の目標は、ガウスコピュラのための線形相関パラメーターの行列の推定値を計算するために、全体のプロセスは、IL入力変数があまりにもあり失敗したので、相関:

c = corr(range1,range1); % 1 

実は、私たちはrange1range2間の完全な正の相関関係に直面しています。 chol(参照here)例外をスローする関数は、Gaussian Copula適合を生成するプロセスの一部に過ぎず、内部でcopulafit関数によって呼び出されています。

唯一の解決策は、あなたはしている:

  1. 変えるあなたの変数
  2. あなたの変数にランダムノイズを加える(あなたが許可されている場合に)

のが第二の使用例を作ってみましょうオプション:

range1 = [ 
    -0.639388612 
    1.029603565 
    1.273883288 
    0.754717135 
    1.747817835 
    1.717787291 
    -0.120625114 
    2.173913469 
    2.836879977 
    -0.804601995 
    0 
]; 

% just an example, I'm tired of using rand function xD 
range2 = awgn(range1,1,'measured'); 

u = ksdensity(range1, range1,'function','cdf'); 
v = ksdensity(range2, range2,'function','cdf'); 
rng default ; 
[Rho,nu] = copulafit('t',[u v],'Method','ApproximateML'); 

これはエラーなく動作します。