共分散の求め方

14 views (last 30 days)
wataru suzuki
wataru suzuki on 4 Jan 2021
ある値の共分散を求めたいので下記URLのサイトを参考に添付した画像のような
式を行いたいです。
参考URL:https://mathtrain.jp/covariance
そのためプログラムを書いたのですが参考サイトのようにいきません。サイトのように行うにはどうすればいいのか教えてください。
%プログラム
A=[50 50 80 70 90];
B=[50 70 60 90 100];
DDD=cov(A,B);
%出力結果
DDD =
320 235
235 430
  1 Comment
Hiroyuki Hishida
Hiroyuki Hishida on 5 Jan 2021
Suzukiさん、
covは共分散を計算するとありますが、正しくは共分散行列を計算します。共分散行列とは共分散の概念を拡張したものでして、参照されていらっしゃるサイトにもその記載はございます。大学の統計学では分散共分散行列という行列が活躍します。→分散共分散行列の定義と性質
さて、MATALBで実現する方法は2通りございます。1つは、参照されているサイトの通りに記述する方法です。サンプルを書いてみましたので、確認してみてください。
%別解で記述する方法
ua = mean(A)
ub = mean(B)
exy = sum(A.*B)/numel(A)
Covxy2 = exy-ua*ub
%そのまま記述する方法
Covxy=sum((ua-A).*(ub-B))/numel(A)
もう1つは、共分散行列から意中のものを導出する方法です。共分散行列の各成分の定義については、共分散についての詳細を確認ください。(X,Y)成分が以下で定義されていますをみると以下のようにあり、ほぼ、参照されているサイトの通りです。
違いといえば、Nで割り算しないで、N-1で割り算していることですので、cov(A,B)で得た行列の(1, 2)成分もしくは(2, 1)成分について、N-1を乗じてNで除算すれば良いことになります。
%関数を利用する方法
DDD=cov(A,B)
DDD(1,2)*(numel(A)-1)/numel(A)
いかがでしょうか?
菱田

Sign in to comment.

Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!