matlabによるPearsonおよびSpearmanの相関係数の算出
ピアソンの相関係数
2つのもの(データでは変数と呼ぶ)の相関の度合いを調べることは、簡単に言えば2つのデータが直線の上に乗っているかどうかを測ることです。数式で計算されます。
または
または
Nは、その変数がとる値の数を示します。
相関係数rは-1から+1までの値、すなわち-1≦r≦+1である。その性質は次の通りである。
- r>0のとき、2つの変数(Xの値が増加(減少)し、Yの値が増加(減少)するとき)は正の相関があることを意味し、r<0のとき、2つの変数は負の相関がある(Xの値が増加(減少)し、Yの値が減少(増加)するとき)ことを意味します。
- r|=1のとき、2つの変数が完全に線形相関を持つこと、すなわち関数関係を意味する。
- r=0の場合、2つの変数に線形相関がないことを意味する。
- 0<|r|<1 のとき、2つの変数間にある程度の線形相関があることを意味する。そして、|r|が1に近いほど、2つの変数間の線形相関が近く、|r|が0に近いほど、2つの変数間の線形相関が弱くなる。
一般的に3つのレベルに分けられる。|0.4は低い線形相関、0.4≦|r|<|0.7は有意な相関、0.7≦|r|<|1 は高い線形相関です。
どちらの変数も標準偏差が0でない場合に相関係数が定義され、ピアソン相関係数が適用される。
- 2つの変数の関係は線形であり、両方とも連続データである。
- 2つの変数の全体が正規分布、または単一のピークを持つ正規分布に近い分布である。
- 2つの変数の観測値が対になっており、それぞれの観測値の対が互いに独立している。
具体的な計算例です。
X Y
1 2
2 5
3 6
matlabで計算する場合は、関数corrcoefまたはcorrを使用します。
まずはヘルプのcorrcoefから見てみましょう。
もう一度、help corrの内容を見てください。
先ほどの具体的な計算例では、matlabで以下のように実装することができます。
x=[1;2;3];
y=[2;5;6];
r1=corr(x,y,'type','pearson');
r2=corrcoef(x,y);
最後に、以下のことがわかります。
r1=0.9608
r2=
1.0000 0.9608
0.9608 1.0000
いずれも、これまでの計算と一致する。なお、corr 関数を使用した場合、デフォルトで Pearson 相関係数が計算されます。
スピアマン相関係数
スピアマン相関係数は、2つの変数X,Yの相関を推定するために用いられ、変数間の相関は単調関数で記述することができます。2つの変数が値をとる2つの集合のどちらも同じ2つの要素を持っていない場合、変数の一方が他方の良い単調関数として表現できる(つまり、2つの変数が同じ変化傾向を持つ)とき、2つの変数の相関係数は+1または-1になることができる。
2つの確率変数をXとY(2つの集合とみなすこともできる)とし、どちらもN個の要素を持ち、2つの確率変数がとるi(1<=i<=N)番目の値をそれぞれXiとYiで表すとする。XとYを(共に昇順または降順で)ソートして2つの集合xとyを得、要素xiとyiはそれぞれXにおけるXiの順位とYにおけるYiの順位とする。集合x,yの要素を対応させて減算し、順位差集合dを得る。ここで、di=xi-yi, 1<=i<=N である。x、yまたはdから確率変数X、Y間のスピアマン相関係数を計算すると、以下のようになる。
ランク付けされた差分dの集合から計算される(式I)。
ランク付けされた集合x, yから算出(スピアマン相関係数は、ランク付けされた2つの確率変数のピアソン相関係数とも考えられ、以下では実際にx, yのピアソン相関係数を算出)(式2)。
以下は、コレクション内の要素の順位を計算する例です(スピアマンの相関係数の場合のみ)。
ここで、ある変数の値が2つとも同じ場合は、その順位を平均して求めることに注意。
スピールマン相関係数は、ピアソン相関係数のように厳しいデータ条件を必要とせず、2変数の観測値が対になっているか、連続変数の観測値から変換されていれば、2変数の全体の分布パターンやサンプルサイズの大きさに関係なく使用することができる。
matlabを使ったスピアマンの相関係数の計算も、corr関数を使えば、次のように簡単にできます。
r= corr(x, y, 'type' , 'Spearman')。
上記の例では、r=1が計算できる。
注意:Matlab 独自の関数を使って Spearman 相関係数を計算する場合,X と Y が両方とも列ベクトルであることを確認する必要があります; Matlab 独自の関数は,式 2 によって配列に対する Spearman 相関係数を計算します.
マルチメディアの分野でより多くの知識と情報を得るために、公開番号をフォローしてください。
この記事は役に立ちましたか? 次のQRコードをスキャンして、報酬を得ることができます〜、好きなだけ報酬を得ることができます〜。
関連
-
[解決済み】"配列のインデックスは正の整数または論理値でなければならない"
-
[解決済み] matlabで関数ハンドルを使った操作
-
[解決済み] セルコンテンツから非セル配列オブジェクトへの代入
-
[解決済み] Matlabのstrcat関数が空白を含んでいる場合のトラブル
-
[解決済み] MATLABでカラーバーのスケールを制御する
-
[解決済み] MATLABとラスタープロット
-
[解決済み] 減衰比一定の直線と根元の軌跡との交点を求めるためのrlocfindの代替プログラム(Matlab
-
[解決済み] Matlab の imrect を用いて,新しい矩形の座標を取得します.
-
[解決済み] 影付きエラーバー matlab
-
[解決済み] 信号をゼロ平均、単位分散に正規化するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「名前が重複する関数は定義できません」エラーが出るが、重複する関数はない。
-
[解決済み] matlabエディタで複数の行をコメントするためのショートカットキーはありますか?
-
[解決済み] 部分ピボッティングによるLU分解 Matlab
-
[解決済み] Matlabのリスト理解
-
[解決済み] MATLABによるパワーメソッド
-
[解決済み] パーフカーブで1つの値を返す - matlab
-
[解決済み] 匿名関数の微分
-
[解決済み] matlab のプロットベクトルは同じ長さでなければなりません。
-
[解決済み] Octave/Matlab。e^(-1*z)とexp(-1*z)の違い
-
[解決済み] matlabでアニメーションプロットを行う方法