R の相関: ピアソンとスピアマンの相関行列
R の二変量相関
二変量関係は、R の XNUMX つの変数間の関係 (または相関) を表します。このチュートリアルでは、相関の概念について説明し、それを使用して R の XNUMX つの変数間の関係を測定する方法を示します。
R プログラミングにおける相関関係
R プログラミングで XNUMX つの変数間の相関を計算するには、主に XNUMX つの方法があります。
- ピアソン: パラメトリック相関
- スピアマン: ノンパラメトリック相関
R のピアソン相関行列
ピアソン相関法は、通常、XNUMX つの変数間の関係の主なチェックとして使用されます。
この 相関係数、 、は、の強さの尺度です。 線形 XNUMX つの変数と の間の関係。 これは次のように計算されます。
- 、つまり、の標準偏差
- 、つまり、の標準偏差
相関の範囲は -1 ~ 1 です。
- 値が 0 に近いか等しい場合は、 と の間に線形関係がほとんど、またはまったくないことを意味します。
- 対照的に、1 または -1 に近づくほど、線形関係は強くなります。
次のように t 検定を計算し、 に等しい自由度で分布表を確認できます。
Rにおけるスピアマンのランク相関
ランク相関では、観測値をランクごとに並べ替え、ランク間の類似性レベルを計算します。 ランク相関には、外れ値に対して堅牢であるという利点があり、データの分布にはリンクされません。 順序変数には順位相関が適していることに注意してください。
スピアマンの順位相関は、常に -1 から 1 の間であり、端に近い値は強い関係を示します。次のように計算されます。
ランクと の間の共分散が示されています。 分母は標準偏差を計算します。
R では、cor() 関数を使用できます。 XNUMX つの引数、 、およびメソッドを取ります。
cor(x, y, method)
Arguments:
- x: 最初のベクトル
- y: XNUMX 番目のベクトル
- 方法: 相関関係の計算に使用される式。 XNUMX つの文字列値:
- 「ピアソン」
- 「ケンダル」
- 「槍兵」
ベクトルに欠損値が含まれている場合は、オプションの引数を追加できます: use = “complete.obs”
BudgetUK データセットを使用します。 このデータセットは、1980 年から 1982 年までの英国の世帯の予算配分を報告します。1519 の特徴を含む XNUMX の観測結果があり、その中には次のようなものがあります。
- 食べ物: 食べ物をシェアする 支出をシェアする
- 燃料: 燃料費をシェアする
- 布: 衣料品支出の予算シェア
- ウォルク: アルコール支出を共有する
- wtrans: 交通費をシェアする
- 心配: その他の財支出の割合
- トテックス: 世帯支出総額 (ポンド)
- 収入: 世帯純所得の合計
- 年齢:世帯の年齢
- 子供: 子どもの数
例
library(dplyr) PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/british_household.csv" data <-read.csv(PATH) filter(income < 500) mutate(log_income = log(income), log_totexp = log(totexp), children_fac = factor(children, order = TRUE, labels = c("No", "Yes"))) select(-c(X,X.1, children, totexp, income)) glimpse(data)
コードの説明
- 最初にデータをインポートし、dplyr ライブラリの sinners() 関数を使用して確認します。
- 500 つのポイントは XNUMXK を超えているため、除外することにしました。
- 通貨変数をログに変換するのが一般的です。 これは、外れ値の影響を軽減し、データセットの歪度を軽減するのに役立ちます。
出力:
## Observations: 1,516## Variables: 10 ## $ wfood <dbl> 0.4272, 0.3739, 0.1941, 0.4438, 0.3331, 0.3752, 0... ## $ wfuel <dbl> 0.1342, 0.1686, 0.4056, 0.1258, 0.0824, 0.0481, 0... ## $ wcloth <dbl> 0.0000, 0.0091, 0.0012, 0.0539, 0.0399, 0.1170, 0... ## $ walc <dbl> 0.0106, 0.0825, 0.0513, 0.0397, 0.1571, 0.0210, 0... ## $ wtrans <dbl> 0.1458, 0.1215, 0.2063, 0.0652, 0.2403, 0.0955, 0... ## $ wother <dbl> 0.2822, 0.2444, 0.1415, 0.2716, 0.1473, 0.3431, 0... ## $ age <int> 25, 39, 47, 33, 31, 24, 46, 25, 30, 41, 48, 24, 2... ## $ log_income <dbl> 4.867534, 5.010635, 5.438079, 4.605170, 4.605170,... ## $ log_totexp <dbl> 3.912023, 4.499810, 5.192957, 4.382027, 4.499810,... ## $ children_fac <ord> Yes, Yes, Yes, Yes, No, No, No, No, No, No, Yes, ...
「ピアソン」法と「スピアマン」法を使用して、収入と食糧変数の間の相関係数を計算できます。
cor(data$log_income, data$wfood, method = "pearson")
出力:
## [1] -0.2466986
cor(data$log_income, data$wfood, method = "spearman")
出力:
## [1] -0.2501252
R の相関行列
二変量相関は良いスタート地点ですが、多変量解析を使用するとより広い全体像を得ることができます。 多くの変数との相関関係が、 相関行列。 相関行列は、すべての変数のペア相関を表す行列です。
cor() 関数は相関行列を返します。 二変量相関との唯一の違いは、どの変数を指定する必要がないことです。 デフォルトでは、R はすべての変数間の相関を計算します。
因子変数の相関は計算できないことに注意してください。 cor() 内でデータ フレームを渡す前に、カテゴリ特徴量を必ず削除する必要があります。
相関行列は対称です。これは、対角線上の値が下のものと同じ値を持つことを意味します。 マトリックスの半分を表示すると、より視覚的になります。
Children_fac は因子水準変数であるため除外します。 cor は、カテゴリ変数に対して相関関係を実行しません。
# the last column of data is a factor level. We don't include it in the code mat_1 <-as.dist(round(cor(data[,1:9]),2)) mat_1
コードの説明
- cor(データ):相関行列を表示
- ラウンド(データ、2): 相関行列を小数点第 XNUMX 位で四捨五入します。
- as.dist():後半のみ表示
出力:
## wfood wfuel wcloth walc wtrans wother age log_income ## wfuel 0.11 ## wcloth -0.33 -0.25 ## walc -0.12 -0.13 -0.09 ## wtrans -0.34 -0.16 -0.19 -0.22 ## wother -0.35 -0.14 -0.22 -0.12 -0.29 ## age 0.02 -0.05 0.04 -0.14 0.03 0.02 ## log_income -0.25 -0.12 0.10 0.04 0.06 0.13 0.23 ## log_totexp -0.50 -0.36 0.34 0.12 0.15 0.15 0.21 0.49
重要なレベル
有意水準は、ピアソン法またはスピアマン法を使用する場合に、状況によっては役立ちます。 ライブラリ Hmisc の関数 rcorr() が p 値を計算します。 ライブラリはからダウンロードできます コンダ コードをコピーしてターミナルに貼り付けます。
conda install -c r r-hmisc
rcorr() では、データ フレームを行列として保存する必要があります。 p 値を使用して相関行列を計算する前に、データを行列に変換できます。
library("Hmisc") data_rcorr <-as.matrix(data[, 1: 9]) mat_2 <-rcorr(data_rcorr) # mat_2 <-rcorr(as.matrix(data)) returns the same output
リスト オブジェクト mat_2 には XNUMX つの要素が含まれています。
- r: 相関行列の出力
- n:観測回数
- P: p値
XNUMX 番目の要素である p 値に興味があります。 相関係数の代わりに p 値を使用して相関行列を表示するのが一般的です。
p_value <-round(mat_2[["P"]], 3) p_value
コードの説明
- mat_2[[“P”]]: p 値は P という要素に保存されます。
- ラウンド(mat_2[[“P”]], 3): 要素を XNUMX 桁の数字で丸めます
出力:
wfood wfuel wcloth walc wtrans wother age log_income log_totexp wfood NA 0.000 0.000 0.000 0.000 0.000 0.365 0.000 0 wfuel 0.000 NA 0.000 0.000 0.000 0.000 0.076 0.000 0 wcloth 0.000 0.000 NA 0.001 0.000 0.000 0.160 0.000 0 walc 0.000 0.000 0.001 NA 0.000 0.000 0.000 0.105 0 wtrans 0.000 0.000 0.000 0.000 NA 0.000 0.259 0.020 0 wother 0.000 0.000 0.000 0.000 0.000 NA 0.355 0.000 0 age 0.365 0.076 0.160 0.000 0.259 0.355 NA 0.000 0 log_income 0.000 0.000 0.000 0.105 0.020 0.000 0.000 NA 0 log_totexp 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 NA
R での相関行列の視覚化
ヒート マップは、相関行列を表示するもう 2 つの方法です。 GGally ライブラリは ggplotXNUMX の拡張機能です。 現在、conda ライブラリでは利用できません。 コンソールに直接インストールできます。
install.packages("GGally")
このライブラリには、すべての変数の相関や分布などの要約統計を表示するためのさまざまな関数が含まれています。 マトリックス.
ggcorr() 関数には多くの引数があります。 チュートリアルで使用する引数のみを紹介します。
ggcorr 関数
ggcorr(df, method = c("pairwise", "pearson"), nbreaks = NULL, digits = 2, low = "#3B9AB2", mid = "#EEEEEE", high = "#F21A00", geom = "tile", label = FALSE, label_alpha = FALSE)
引数:
- df: 使用したデータセット
- 方法: 相関を計算する式。デフォルトでは、ペアワイズとピアソンが計算されます。
- nbreaks: 係数の色のカテゴリ範囲を返します。 デフォルトでは、切れ目はなく、色のグラデーションは連続的です。
- 数字: 相関係数を四捨五入します。 デフォルトでは 2 に設定されます
- 低いです: 発色の下位レベルを制御します。
- ミッド: 発色の中間レベルを制御します
- 高いです: 高度な発色をコントロールします。
- ジオム: 幾何学的引数の形状を制御します。 デフォルトでは「タイル」
- ラベル: ブール値。 ラベルを表示するかどうか。 デフォルトでは、「FALSE」に設定されます。
基本的なヒートマップ
パッケージの最も基本的なプロットはヒート マップです。グラフの凡例には -1 から 1 までのグラデーション カラーが表示され、暖色は強い正の相関関係を示し、寒色は負の相関関係を示します。
library(GGally) ggcorr(data)
コードの説明
- ggcorr(データ): 必要な引数は XNUMX つだけで、それはデータ フレーム名です。 因子水準変数はプロットには含まれません。
出力:
ヒート マップにコントロールを追加する
グラフにさらにコントロールを追加できます。
ggcorr(data, nbreaks = 6, low = "steelblue", mid = "white", high = "darkred", geom = "circle")
コードの説明
- nbreaks=6: 6 ランクで伝説を打ち破る。
- 低 = 「スチールブルー」: 負の相関がある場合は明るい色を使用します。
- ミッド = 「白」: 中間範囲の相関には白色を使用します
- 高い = 「暗い」: 正の相関を示すには暗い色を使用します
- ジオム = 「円」: ヒート マップのウィンドウの形状として円を使用します。円のサイズは相関の絶対値に比例します。
出力:
ヒートマップへのラベルの追加
GGally を使用すると、ウィンドウ内にラベルを追加できます。
ggcorr(data, nbreaks = 6, label = TRUE, label_size = 3, color = "grey50")
コードの説明
- ラベル = TRUE: ヒート マップ内に相関係数の値を追加します。
- カラー = “グレー50”: 色を選択します (例: グレー)
- ラベルサイズ = 3: ラベルのサイズを 3 に設定します。
出力:
ggpairs 関数
最後に、GGaly ライブラリの別の関数を紹介します。Ggpair です。これは、マトリックス形式でグラフを生成します。1 つのグラフ内に 3 種類の計算を表示できます。マトリックスは次元であり、観測数に等しくなります。上部と下部にはウィンドウが表示され、対角線上には が表示されます。マトリックスの各部分に表示する情報を制御できます。ggpair の式は次のとおりです。
ggpair(df, columns = 1: ncol(df), title = NULL, upper = list(continuous = "cor"), lower = list(continuous = "smooth"), mapping = NULL)
引数:
- df: 使用したデータセット
- コラム: プロットを描画する列を選択します
- タイトル:タイトルを入れる
- アッパー: プロットの対角線の上のボックスを制御します。返す計算またはグラフのタイプを指定する必要があります。continuous = “cor” の場合、R に相関を計算するように要求します。引数はリストである必要があることに注意してください。他の引数を使用することもできます。詳細については、[vignette](“http://ggobi.github.io/ggally/#custom_functions”) を参照してください。
- 低くなる: 対角線の下のボックスを制御します。
- マッピング:グラフの美しさを示します。 たとえば、さまざまなグループのグラフを計算できます。
グループ化を使用した ggpair による二変量解析
次のグラフは XNUMX つの情報をプロットしています。
- 世帯に子供がいるかどうかによってグループ化された log_totexp、log_income、age、および wtrans 変数の間の相関行列。
- 各変数の分布をグループごとにプロットする
- グループごとの傾向を含む散布図を表示します
library(ggplot2) ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"), title = "Bivariate analysis of revenue expenditure by the British household", upper = list(continuous = wrap("cor", size = 3)), lower = list(continuous = wrap("smooth", alpha = 0.3, size = 0.1)), mapping = aes(color = children_fac))
コードの説明
- columns = c(“log_totexp”, “log_income”, “年齢”, “wtrans”): グラフに表示する変数を選択します
- title = 「英国家計の収入支出の二変量分析」:タイトルを追加します
- アッパー = リスト(): グラフの上部を制御します。 つまり対角線上
- 連続 = Wrap(“cor”, サイズ = 3)): 相関係数を計算します。 グラフの美しさを制御するために、引数Continuousをwrap()関数内にラップします(すなわち、size = 3)。 - lower = list(): グラフの下部分を制御します。 つまり、対角線より下です。
- 連続 = ラップ(「スムーズ」、アルファ = 0.3、サイズ = 0.1): 線形傾向の散布図を追加します。 グラフの美しさを制御するために、引数Continuousをwrap()関数内にラップします(すなわち、size=0.1、alpha=0.3)。
- マッピング = aes(色 = Children_fac): グラフの各部分を変数children_facで積み重ねます。これは、世帯に子供がいない場合は1、子供がいる場合は2の値を取るカテゴリ変数です。
出力:
部分グループ化を使用した ggpair による二変量解析
下のグラフは少し異なります。 上の引数内のマッピングの位置を変更します。
ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"), title = "Bivariate analysis of revenue expenditure by the British household", upper = list(continuous = wrap("cor", size = 3), mapping = aes(color = children_fac)), lower = list( continuous = wrap("smooth", alpha = 0.3, size = 0.1)) )
コードの説明
- 以下の点を除き、前の例とまったく同じコードです。
- マッピング = aes(color = Children_fac): upper = list() でリストを移動します。 計算をグラフの上部にグループごとに積み上げたいだけです。
出力:
まとめ
- 二変量関係は、R の XNUMX つの変数間の関係 (または相関) を表します。
- XNUMX つの変数間の相関関係を計算するには、主に XNUMX つの方法があります。 R Programming :ピアソン&スピアマン。
- ピアソン相関法は、通常、XNUMX つの変数間の関係の主なチェックとして使用されます。
- ランク相関では、観測値をランクごとに並べ替え、ランク間の類似性レベルを計算します。
- スピアマンの順位相関係数は常に -1 から 1 の間であり、端に近い値は強い関係を示します。
- 相関行列は、すべての変数のペア相関を表す行列です。
- 有意水準は、ピアソン法またはスピアマン法を使用する場合に、状況によっては役立ちます。
R のすべての相関関数を次の表にまとめます。
図書室へようこそ | DevOps Tools Engineer試験のObjective | 方法 | Code |
---|---|---|---|
ベース(Base) | 二変量相関 | ピアソン |
cor(dfx2, method = "pearson") |
ベース(Base) | 二変量相関 | スピアマン |
cor(dfx2, method = "spearman") |
ベース(Base) | 多変量相関 | ピアソン |
cor(df, method = "pearson") |
ベース(Base) | 多変量相関 | スピアマン |
cor(df, method = "spearman") |
ミスク | P値 |
rcorr(as.matrix(data[,1:9]))[["P"]] |
|
ガリー | ヒートマップ |
ggcorr(df) |
|
多変量プロット |
cf code below |