如何确定两个相关性是否显着不同?


9

我想确定两组数据(B1,B2)中的哪一组与另一组(A)更好地相关(皮尔森r)。所有数据集中都缺少数据。如何确定所得的相关性是否显着不同?

例如,在A和B1中都存在8426值,r = 0.74。A和B2中都存在8798,r = 0.72。

我认为这个问题可能会有所帮助,但尚未得到答案:如何知道一个系统明显优于另一个系统?


我们可以假设大吗?ñ
Firebug

1
@Firebug n通常将是7000和8760之间
格林格拉斯

Answers:


6

有时候,一个也许能够在多元回归,其中A是DV做到这一点,B是分数的人有上规模,C是一个伪代码,说,这是无论是B1或B2: lm(A~B+C+B*C)。交互作用项B*C会告诉您相关性是否不同,而在C的两个水平处A和B之间的简单斜率也会告诉您相关性。

但是,不可能在此框架中进行条件之间所有类型的比较。在cocor[R包是非常有用的,它有一个非常简单的在网络上的指向和点击界面。请注意,由于缺少不同的数据,因此您既没有独立样本也没有从属样本。我将在此处使用按列表删除,以使其保持简单(并且电源对您而言不是问题)。


2
尽管这是最短的答案,但指向cocor的链接使我引向了所需的信息。非常感谢。
greenglass '17

15

引导程序的力量。让我们看一下三个向量进行说明:一个1个2,其中:

CØ[R一个1个=0.92
CØ[R一个2=0.86
在此处输入图片说明

目的是确定这两个数据集的相关性是否显着不同。通过像这样获取引导程序样本:

 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])
 }

我们可以绘制两个相关性的引导分布: 在此处输入图片说明

我们还可以获得CØ[R一个一世 95%置信区间。

95%CI为CØ[R[R一个1个

0.8970.947

95%CI为CØ[R[R一个2

0.8100.892

间隔不重叠(几乎不重叠)的事实为我们提供了一些证据,表明我们观察到的样本相关性差异确实具有统计学意义。

正如变形虫在评论中指出的那样,获得每个引导程序样本的差异会带来更“强大”的结果。 在此处输入图片说明

对于这两者之间的差A 95%CI是:

0.0190.108

注意间隔(几乎)不包括0,我们有和以前类似的证据。


要处理丢失的数据问题,只需从两个数据集中包含的对中选择引导程序样本。


7
您可以通过计算cor1-cor2的95%CI并检查它是否包含零来改进此过程。
变形虫

1
那是个很好的观点。我很快会包括在内。
knrumsey

酷,+ 1。
变形虫

1
感谢您的回答。尽管不是我最终使用的那本,但它非常有趣且内容丰富。
greenglass '17

7

假定Fisher变换:- [R ' 2 = 的tanh - 1 - [R 2 。或者,以一种等效且也许更清晰的方式(感谢@dbwilson!),r [R1个=-1个[R1个[R2=-1个[R2[R1个=1个2ln1个+[R1个1个-[R1个[R2=1个2ln1个+[R21个-[R2

然后得出的结论是,由于Fisher变量现在正态分布,而正态分布随机变量之和仍然正态分布:

ž=[R1个-[R2小号ñ01个

小号=小号1个2+小号22=1个ñ1个-3+1个ñ2-3

H0ž=0Pž0=2Pž>|ž|

ŤŤñŤ

-

@Josh发表评论后,我们可以在某种程度上纳入样本之间相互依赖的可能性(请记住,两个相关性均取决于A的分布)。如果不假设独立样本,也无需使用Cauchy-Schwarz不等式,则可以得到以下上限(请参阅:如何找到两个均值之差的标准偏差?):

小号小号1个+小号2

小号1个ñ1个-3+1个ñ2-3

2
这本来是我的建议,但Fisher变换的替代公式是z = .5 * ln((1 + r)/(1-r))。对每个r执行此操作,然后按上述步骤进行。
dbwilson

@dbwilson哦,是的(+1),它们是等效的,我将使用添加您的建议,以便更广泛的读者更加清楚。
Firebug

[R1个[R2

6

根据Mark White的有用反馈进行编辑(谢谢!)

一种选择是在单个模型中计算两个关系(B1与A,B2与A),该模型还估计它们之间的差异。使用多元回归很容易做到这一点。您将运行一个模型,其中A为因变量,然后运行一个连续变量,其中包含B1和B2的所有得分,分类变量(指示变量是哪个变量)(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
> 

更改数据格式以满足模型的需要(重新格式化为“ long”):

> mydata <- as.data.frame(mydata) %>% 
+   gather("var", "value", B1, B2)
> 

这是模型:

摘要(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的效果(而不是根据缺失的不同模式使用稍微不同的数据集)具有以下优点:可以稍微解释相关性之间的差异更直接。如果分别计算每个的相关性,然后测试它们之间的差异,则会遇到以下问题:每种情况下的基础数据都略有不同---您看到的任何差异可能是由于样本中的差异和差异所致在变量之间的实际关系。


2
是否lm(A~B1*B2)会测试B1和之间的相关性A 是否取决于一个人的B2分数?该交互作用项不是在测试相关性是否不同。它正在测试两个预测变量是否相互影响。您可以创建一个虚拟代码,C该代码用于编码Bis B1或的小数位数B2。然后,这将告诉您B和之间的相关性A取决于它是B1还是B2,即相关性是否不同。
马克·怀特

1
@MarkWhite哦,天哪,你是完全正确的!感谢您抓住这一点。kes!我将进行修改以解决此问题。
罗斯·哈特曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.