井出草平の研究ノート

correlationパッケージ[R]

自動で相関係数を一気に計算するパッケージの一つ。サンプルデータはmtcarsを用いる。

cran.r-project.org

easystats.github.io

data(mtcars)
head(mtcars,5)

データ。

                       mpg cyl disp  hp drat    wt  qsec vs am gear carb
    Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
    Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
    Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
    Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
    Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2

vsとamは2値であるため、この2つを取り除く。出力をpearsonだけにするため。

dat <- subset(mtcars,select = (c(-vs, -am)))
head(dat,5)

加工後データ。

                   mpg cyl disp  hp drat    wt  qsec gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02    3    2

correlation()

オプションが2つ指定されている。意味は後段を参照のこと。

library(correlation)
res <-correlation::correlation(dat,
  include_factors = TRUE, method = "auto"
)
res

表示

# Correlation Matrix (auto-method)

Parameter1 | Parameter2 |     r |         95% CI | t(30) |         p
--------------------------------------------------------------------
mpg        |        cyl | -0.85 | [-0.93, -0.72] | -8.92 | < .001***
mpg        |       disp | -0.85 | [-0.92, -0.71] | -8.75 | < .001***
mpg        |         hp | -0.78 | [-0.89, -0.59] | -6.74 | < .001***
mpg        |       drat |  0.68 | [ 0.44,  0.83] |  5.10 | < .001***
mpg        |         wt | -0.87 | [-0.93, -0.74] | -9.56 | < .001***
mpg        |       qsec |  0.42 | [ 0.08,  0.67] |  2.53 | 0.137    
mpg        |       gear |  0.48 | [ 0.16,  0.71] |  3.00 | 0.065    
mpg        |       carb | -0.55 | [-0.75, -0.25] | -3.62 | 0.016*   
cyl        |       disp |  0.90 | [ 0.81,  0.95] | 11.45 | < .001***
cyl        |         hp |  0.83 | [ 0.68,  0.92] |  8.23 | < .001***
cyl        |       drat | -0.70 | [-0.84, -0.46] | -5.37 | < .001***
cyl        |         wt |  0.78 | [ 0.60,  0.89] |  6.88 | < .001***
cyl        |       qsec | -0.59 | [-0.78, -0.31] | -4.02 | 0.007**  
cyl        |       gear | -0.49 | [-0.72, -0.17] | -3.10 | 0.054    
cyl        |       carb |  0.53 | [ 0.22,  0.74] |  3.40 | 0.027*   
disp       |         hp |  0.79 | [ 0.61,  0.89] |  7.08 | < .001***
disp       |       drat | -0.71 | [-0.85, -0.48] | -5.53 | < .001***
disp       |         wt |  0.89 | [ 0.78,  0.94] | 10.58 | < .001***
disp       |       qsec | -0.43 | [-0.68, -0.10] | -2.64 | 0.131    
disp       |       gear | -0.56 | [-0.76, -0.26] | -3.66 | 0.015*   
disp       |       carb |  0.39 | [ 0.05,  0.65] |  2.35 | 0.177    
hp         |       drat | -0.45 | [-0.69, -0.12] | -2.75 | 0.110    
hp         |         wt |  0.66 | [ 0.40,  0.82] |  4.80 | < .001***
hp         |       qsec | -0.71 | [-0.85, -0.48] | -5.49 | < .001***
hp         |       gear | -0.13 | [-0.45,  0.23] | -0.69 | > .999   
hp         |       carb |  0.75 | [ 0.54,  0.87] |  6.21 | < .001***
drat       |         wt | -0.71 | [-0.85, -0.48] | -5.56 | < .001***
drat       |       qsec |  0.09 | [-0.27,  0.43] |  0.50 | > .999   
drat       |       gear |  0.70 | [ 0.46,  0.84] |  5.36 | < .001***
drat       |       carb | -0.09 | [-0.43,  0.27] | -0.50 | > .999   
wt         |       qsec | -0.17 | [-0.49,  0.19] | -0.97 | > .999   
wt         |       gear | -0.58 | [-0.77, -0.29] | -3.93 | 0.008**  
wt         |       carb |  0.43 | [ 0.09,  0.68] |  2.59 | 0.132    
qsec       |       gear | -0.21 | [-0.52,  0.15] | -1.19 | > .999   
qsec       |       carb | -0.66 | [-0.82, -0.40] | -4.76 | < .001***
gear       |       carb |  0.27 | [-0.08,  0.57] |  1.56 | 0.774    

p-value adjustment method: Holm (1979)
Observations: 32

write.csv()でこのまま書き出せるかと思ったのだが、うまくいかなかった。
エディタで|をタブかコンマに変換して、空白をつぶせばcsvとして使えるがあまり美しくない。
今回はresに格納したが、resの中身とprint()とも表示内容が異なる。

summary()

summary()で吐くとさらに表示形式が変わる。

summary(res)

表示

# Correlation Matrix (auto-method)

Parameter |     carb |    gear |     qsec |       wt |     drat |       hp |     disp |      cyl
------------------------------------------------------------------------------------------------
mpg       |   -0.55* |    0.48 |     0.42 | -0.87*** |  0.68*** | -0.78*** | -0.85*** | -0.85***
cyl       |    0.53* |   -0.49 |  -0.59** |  0.78*** | -0.70*** |  0.83*** |  0.90*** |         
disp      |     0.39 |  -0.56* |    -0.43 |  0.89*** | -0.71*** |  0.79*** |          |         
hp        |  0.75*** |   -0.13 | -0.71*** |  0.66*** |    -0.45 |          |          |         
drat      |    -0.09 | 0.70*** |     0.09 | -0.71*** |          |          |          |         
wt        |     0.43 | -0.58** |    -0.17 |          |          |          |          |         
qsec      | -0.66*** |   -0.21 |          |          |          |          |          |         
gear      |     0.27 |         |          |          |          |          |          |         

p-value adjustment method: Holm (1979)

オプション

使い方

correlation(
  data,
  data2 = NULL, select = NULL, select2  = NULL,
  rename  = NULL, method  = "pearson", p_adjust  = "holm", ci = 0.95,
  bayesian = FALSE, bayesian_prior =  "medium", bayesian_ci_method = "hdi", 
  bayesian_test  = c("pd", "rope", "bf"), redundant = FALSE,
  include_factors = FALSE, partial = FALSE, partial_bayesian = FALSE, 
  multilevel = FALSE, ranktransform  = FALSE, winsorize  = FALSE,
  verbose = TRUE, standardize_names = getOption("easystats.standardize_names", FALSE),
  ...)

data

データフレーム。

data2

オプションのデータフレーム。指定された場合、data と data2 の変数間のすべてのペアワイズ相関が計算される。

select, select2

(data2 が指定されている場合は無視される。) 相関のために選択されるべき変数のオプションの名前。。 相関させるべきこれらの変数をデータフレームに与える代わりに、 data はデータフレーム、select と select2 は data の変数(列)の(引用)名とすることができる。correlation() は data[select] と data[select2] の間の相関を計算する。 select だけが指定された場合、select 変数間のすべてのペアワイズ相関が計算される。これは、correlation()の「パイプ・フレンドリー」な代替方法である('Examples'を参照)。

rename

出力される変数の名前を変更したい場合、これらの引数を使用して、別の名前を指定することができる。名前の数は、選択された列の数と同じでなければならないことに注意されたい。data2 が指定された場合は無視される。

method

検定に使用する相関係数を示す文字列。"pearson" (デフォルト), "kendall", "spearman" (ただし robust 引数を参照), "biserial", "polychoric", "tetrachoric", "biweight", "distance", "percentage" (パーセント曲げ相関), "blomqvist" のどれか1つが指定される。 (Blomqvist の係数のため)、"hoeffding" (Hoeffding の D )、"gamma"、"gaussian" (ガウス順位相関)、"shepherd" (シェパード円周率相関)のいずれかを選択する。auto "を設定すると、最も適切な方法(順序要因が含まれる場合はpolychoric、二項要因が含まれる場合はtetrachoric、二項と連続の場合はpoint-biserial、それ以外はpearson)を選択しようと試みる。これらの指標の説明については、以下の詳細セクションを参照。

p_adjust

頻度論的相関の補正法。"holm" (デフォルト), "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr", "somers", "none" のいずれかを指定することができる。詳細は stats::p.adjust() を参照.

ci

Confidence/Credible Interval level(信頼区間レベル).default "の場合、0.95 (95% CI)に設定される。

bayesian

TRUE の場合、ベイズの枠組みで相関を実行する。

bayesian_prior

引数の prior には、いくつかの名前がついている。"medium.narrow", "medium", "wide", "ultrawide "である。これらは、それぞれ 1/sqrt(27), 1/3, 1/sqrt(3), 1 のスケール値に対応する。BayesFactor::correlationBF 関数を参照。

bayesian_ci_method、bayesian_test

BayesFactor のテストについては model_parameters() の引数を参照。

redundant

データに冗長行(与えられた相関が2回繰り返される)が含まれているかどうか。

include_factors

TRUE の場合、因子は保持され、最終的に数値に変換されるか、ランダム効果として使用される(マルチレベルに依存)。FALSEの場合、因子は前もって取り除かれる。

partial

部分相関、半部分相関をそれぞれ TRUE または "semi" とすることができる。

partial_bayesian

ベイズの枠組みで部分相関を求める場合は、partial_bayesian を TRUEに設定し、完全なベイズ部分相関を得る必要がある。 そうでない場合は、擬似ベイズ偏相関(つまり、Frequentistの部分化に基づくベイズ偏相関)が得られる。

multilevel

TRUE の場合、因子はランダム因子として含まれる。一方、FALSE(デフォルト)の場合、それらは単回帰モデルにおける固定効果として含まれる。

ranktransform

TRUE にすると、相関を推定する前に変数を順位変換する。これは、極値(外れ値)に対してより強い分析を行う方法の1つである。例えば、ランク変換されたデータのピアソンの相関は、スピアマンの順位相関と同等であることに注意。 したがって、robust=TRUEとmethod="spearman"を使用することは冗長である。しかし、これは相関のロバスト性を高める簡単なオプションであり、ベイズ相関やマルチレベルSpearmanのような順位相関を得るための柔軟な方法でもある。

winsorize

相関をより「ロバスト」にする(つまり、極値の影響を抑える)もうひとつの方法。FALSE、または必要なしきい値に対応する0~1 (例:0.2)の数値を指定できる。 詳細は winsorize() 関数を参照してください。

verbose

警告をトグルする。

standardize_names

このオプションを TRUE に設定すると、出力に対して insight::standardize_names() を実行し、標準化されたカラム名を取得することができる。このオプションはoptions(easystats.standardize_names = TRUE)を実行することでグローバルに設定することも可能である。

他のメソッドに渡す追加の引数(例えば、代替)。詳細はstats::cor.testを参照