2017-05-02 11 views
0

共分散行列(3x3 COVAR)と対応する平均値(3x1Ω)から、信頼できる領域(1シグマおよび2シグマ)の等高線プロットを生成できます。そうすることで、負の値(見積もり)も発生するので、避ける必要があります。すなわちMATLABを使用してデータから負の推定値を削除する方法

、私はそれが10000x3データセットをもたらすであろう%%

samples = mvnrnd(OMEGA,COVAR,10000);として上記多変量分布からサンプリングすることができます。

このサンプルから、負の値を含む行全体を削除したいと考えています。私は特定の行のすべてのエントリが正のみである必要があります。これは

...私のコードで以下0.0 により、すべての負の値を置き換えます)だけで、単一の負のエントリまたは 2を含む行を排除 1):私は、これらの負の値を取り除くには二つの方法を考えましたどのように私は、私は再びデータの平均と共分散を計算するコードのこの部分を実行した後

samples = mvnrnd(OMEGA,COVAR,100000); 
flag=1; 
for iRow=1:length(samples) 
a=samples(iRow,:); 
%  if (~any(a<0)&&flag==1) 
%    flag=0; 
%    data=a; 
%  elseif (~any(a<0)&&flag==0) %eliminating row 
%    data=[data;a]; 
%  end 



     if flag==1 
      flag=0;a(a<0)=0;data=a; % replacing by 0.0 
    else 
      a(a<0)=0;data=[data;a]; 
    end 
end 

...心掛けておりますが、唯一の...

%新しい平均彼らはLOTを異なること見つけるために、新しい共分散と新しい共分散

OMEGA = mean(data); 
COVAR = cov(data); 

誰も私に上記のより良い方法を提案できますか?この考え方は、負の値を取り除く(非物理的)ことによって共分散行列(誤差)の大きさを減らすことです。次に、これらの新しい値(平均とコバマット)から等高線図をプロットし、最初の象限のみに制限します(つまり、パラメータの唯一の正の値)。

ありがとうございます。

+0

私は正確に何を求めているのかを言及する必要があります。新しい共分散行列または多変量分布(この場合は3次元)の体積は明らかに縮小されています。この分布は、3次元空間の第1象限にのみ限定されている。 この新しいボリュームが1.0であることを保証したいと思います。分布が正規化されるように、言い換えれば、多変量は確率分布である。 これが達成されたら、私はこの分布からサンプルを引き出し、共分散行列と等高線プロットに到達する平均値を計算するのと同じ演習をしたいと思います。 –

+0

(x - mean(x))/ std(x)の標準化方法を使用することができます – anyanwu

答えて

1

変更されたデータセットの平均と分散は、最初に配布の一部であった値を削除するため、オリジナルとは異なるになります。 -4、-5、2、8,9のような数字のシーケンスが平均2であるとしましょう。ここで、負の部分を完全に削除すると、平均は19/3になり、負の値ゼロでは、平均は19/5になります。これはあなたの場合でも起こっていることです。

ただし、0にすることで負の値を削除するという2番目の方法では、値の差を最小限に抑えることができます。コードは両方のケースで正しく動作します。それはより速く、より最適化されますようしかし、あなたは以下のコードを使用することがあります:

アプローチ1

%Turns out there is a 1 line solution to this as well 
data = samples(~any(samples < 0, 2), :); 

%Define an anonymous function that finds out which rows have a negative values 
%fn = @(x) any(samples(x, :) < 0); 
%Now run this function over all the rows of the samples 
%neg_rows = arrayfun(fn, 1:size(samples, 1)); 
%Change the dataset to remove the negative rows 
%data = samples(~neg_rows, :); 

アプローチ2(完全に負の行の削除)(すべての負の値を作成し0)

data = samples; % Copies all the samples to data 
data(data < 0) = 0; % Makes all the negative values in data 0 

ここで、新しいデータセットの平均と共分散を比較して、どのアプローチが最良の結果につながるかを確認できます。

+0

親愛なるammportal、私のための最適なコードを書こうとしてくれてありがとうございます。縮小した音量を標準化するのを手伝ってもらえますか? –

+0

あなたの質問を解決したら答えを受け入れてください:) – anyanwu

関連する問題