2つのデータセット(B1、B2)のどちらが別のセット(A)とより適切に相関している(ピアソンr)かを判断します。すべてのデータセットに欠落データがあります。結果の相関が大幅に異なるかどうかをどのように判断できますか?
たとえば、8426の値はAとB1の両方に存在し、r = 0.74です。8798はAとB2の両方に存在し、r = 0.72です。
この質問は役立つかもしれないと思いましたが、答えはありません:あるシステムが別のシステムよりもはるかに優れていることを知る方法は?
2つのデータセット(B1、B2)のどちらが別のセット(A)とより適切に相関している(ピアソンr)かを判断します。すべてのデータセットに欠落データがあります。結果の相関が大幅に異なるかどうかをどのように判断できますか?
たとえば、8426の値はAとB1の両方に存在し、r = 0.74です。8798はAとB2の両方に存在し、r = 0.72です。
この質問は役立つかもしれないと思いましたが、答えはありません:あるシステムが別のシステムよりもはるかに優れていることを知る方法は?
回答:
AはDV、Bはスケールでのスコア、CはB1またはB2のいずれかであることを示すダミーコードですlm(A~B+C+B*C)
。交互作用項はB*C
、相関が異なるかどうかを示しますが、Cの両方のレベルでのAとBの間の単純な勾配は、相関を示します。
ただし、このフレームワークの条件間のすべてのタイプの比較に適合させることはできません。cocor
Rパッケージは非常に有用であり、それは非常に単純持つウェブ上のポイント・アンド・クリック・インターフェースを。欠落データが異なると、独立したサンプルも従属サンプルもないことに注意してください。ここではリストワイズ削除を使用して、シンプルにしています(そして、パワーは問題ではありません)。
目標は、これら2つのデータセットの相関関係が大幅に異なるかどうかを判断することです。ブートストラップサンプルを次のように取得します。
B <- 10000
cor1 <- cor2 <- rep(0, B)
for(i in 1:B){
samp <- sample(n, n, TRUE)
cor1[i] <- cor(A[samp], B1[samp])
cor2[i] <- cor(A[samp], B2[samp])
}
間隔が(かろうじて)オーバーラップしないという事実は、私たちが観察したサンプル相関の違いが確かに統計的に有意であることを示すいくつかの証拠を与えます。
コメントでアメーバが指摘しているように、ブートストラップサンプルごとに違いを得ると、より「強力な」結果が得られます。
間隔が(かろうじて)0を除外していることに注意して、以前と同様の証拠があります。
欠損データの問題を処理するには、両方のデータセットに含まれているペアからブートストラップサンプルを選択するだけです。
次に、フィッシャー変換された変数が正規分布になり、正規分布の確率変数の合計が正規分布になっているため、
-
@Joshによるコメントの後に、サンプル間の相互依存の可能性をある程度組み込むことができます(両方の相関関係がAの分布に依存することに注意してください)。独立したサンプルを仮定せず、コーシーシュワルツの不等式を使用せずに、次の上限を得ることができます(参照:2つの平均値の差の標準偏差を見つける方法は?):
Mark Whiteからの有益なフィードバックを受けて編集(ありがとう!)
1つのオプションは、1つのモデルで両方の関係(B1とA、およびB2とA)を計算して、それらの間の差異も推定することです。これは、重回帰で簡単に実行できます。Aを従属変数としてモデルを実行し、次に、B1とB2のすべてのスコアを含む1つの連続変数、それがどの変数(B1またはB2)かを示すカテゴリー変数、およびそれらの間の相互作用を実行します。R:
> set.seed(24601)
>
> library(tidyverse)
> library(mvtnorm)
> cov <- matrix(c(1, .4, .16,.4, 1, .4, .16, .4, 1), ncol=3, byrow=TRUE)
> mydata <- rmvnorm(n=100, sigma = cov)
> colnames(mydata) = c("A", "B1", "B2")
> head(mydata)
A B1 B2
[1,] -0.1046382 0.6031253 0.5641158
[2,] -1.9303293 -0.7663828 -0.7921836
[3,] 0.1244192 -0.4413581 -1.2376256
[4,] -3.2822601 -1.2512055 -0.5586773
[5,] -0.9543368 -0.1743740 1.1884185
[6,] -0.4843183 -0.2612668 -0.7161938
ここに私が生成したデータからの相関があります:
> cor(mydata)
A B1 B2
A 1.0000000 0.4726093 0.3043496
B1 0.4726093 1.0000000 0.3779376
B2 0.3043496 0.3779376 1.0000000
>
モデルのニーズに合わせてデータのフォーマットを変更する(「ロング」に再フォーマット):
> mydata <- as.data.frame(mydata) %>%
+ gather("var", "value", B1, B2)
>
これがモデルです:
summary(lm(A〜value * var、data = mydata))
Call:
lm(formula = A ~ value * var, data = mydata)
Residuals:
Min 1Q Median 3Q Max
-2.89310 -0.52638 0.02998 0.64424 2.85747
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.09699 0.09014 -1.076 0.283
value 0.47445 0.09305 5.099 8.03e-07 ***
varB2 -0.10117 0.12711 -0.796 0.427
value:varB2 -0.13256 0.13965 -0.949 0.344
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.891 on 196 degrees of freedom
Multiple R-squared: 0.158, Adjusted R-squared: 0.1451
F-statistic: 12.26 on 3 and 196 DF, p-value: 2.194e-07
ここでの結果(私の作成したデータから)は、B1とA(「値」係数の検定、B1は「var」係数の参照グループであるため)の間に有意な関係があることを示唆していますが、その差はAとのB1関係とAとのB2関係の間には意味がありません( "value:varB2"係数の検定)。
回帰係数ではなく相関関係について考えるのが好きな場合は、モデルを実行する前にすべての変数(A、B1、B2)を標準化すると、得られる回帰係数が標準化されます(ゼロ次相関、ただし解釈の点ではるかに近い)。
また、これにより分析がB1とB2の両方を持つケースのみに制限されることにも注意してください(リストごとの削除)。十分なデータが不足してパワー不足にならない限り、および欠落データがランダムに欠落している限り(または、データが無作為に欠落していても問題にならないように、合計データの割合が十分に小さい場合)、それで問題ありません。
B1とB2の両方の効果を推定するために分析を同じデータセットに制限しているという事実(欠落の異なるパターンに基づいて、わずかに異なるデータセットを使用するのではなく)には、相関関係の違いを少し解釈する利点がありますより簡単です。あなたがいる場合、それぞれに対して個別に相関を計算し、それらの違いをテストするには、基礎となるデータは、あなたが見るすべての差が違いな限りサンプルの違いによるものであろう---それぞれの場合に、わずかに異なっていることが問題に遭遇します変数間の実際の関係で。
lm(A~B1*B2)
相関関係B1
やスコアにA
依存するB2
かどうかをテストするのではないでしょうか?その相互作用項は、相関関係が異なるかどうかをテストしていません。2つの予測子が互いに相互作用するかどうかをテストしています。あなたは、ダミーのコードを作成することができますC
コードかどうかのスケールがあることB
ですB1
かB2
。次に、との間の相関関係がB
、A
であるB1
かB2
、であるか、つまり、相関関係が異なるかどうかに依存することがわかります。