두 상관 관계가 크게 다른지 어떻게 확인합니까?


9

두 세트의 데이터 (B1, B2) 중 어느 것이 다른 세트 (A)와 더 잘 연관되는지 (피어슨 r)를 결정하고 싶습니다. 모든 데이터 세트에 누락 된 데이터가 있습니다. 결과 상관 관계가 크게 다른지 여부를 어떻게 확인할 수 있습니까?

예를 들어, 8426 값은 A와 B1 모두에 존재하며 r = 0.74입니다. 8798은 A 및 B2 둘 다에 존재하며, r = 0.72이다.

이 질문이 도움이 될 것이라고 생각했지만 답이 없습니다. 한 시스템이 다른 시스템보다 훨씬 나은지 아는 방법은 무엇입니까?


우리는 크게 생각할 수 있습니까 ?
Firebug

1
@Firebug n은 보통 7000에서 8760 사이입니다.
greenglass

답변:


6

때때로 다중 회귀 분석을 통해이를 달성 할 수 있습니다. 여기서 A는 DV이고, B는 사람들이 평가 한 점수이며, C는 더미 코드이며 B1 또는 B2 lm(A~B+C+B*C)입니다. 교호 작용 항 B*C은 상관 관계가 다른지 여부를 알려주는 반면, C의 두 수준에서 A와 B 사이의 간단한 기울기는 상관 관계를 나타냅니다.

그러나이 프레임 워크의 조건간에 모든 유형의 비교를 맞추는 것은 불가능합니다. 그만큼cocorR 패키지는 매우 유용합니다, 그것은 아주 간단한이 웹에 포인트 앤 클릭 인터페이스를. 누락 된 데이터가 다르면 독립 또는 종속 샘플이 없습니다. 간단하게 유지하기 위해 여기에서 목록 삭제를 사용합니다 (전원은 문제가되지 않습니다).


2
이것이 가장 짧은 대답이지만, cocor 로의 링크는 내가 필요한 정보로 나를 향하게했습니다. 많은 감사합니다.
greenglass

15

부트 스트랩의 힘. 설명을 위해 세 가지 벡터를 살펴 보겠습니다., 12 어디:

영형아르 자형(,1)=0.92
영형아르 자형(,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])
 }

두 상관 관계의 부트 스트랩 분포를 플로팅 할 수 있습니다. 여기에 이미지 설명을 입력하십시오

또한 95 % 신뢰 구간을 얻을 수 있습니다. 영형아르 자형(,나는).

CI 95 % 영형아르 자형아르 자형(,1):

(0.897,0.947)

CI 95 % 영형아르 자형아르 자형(,2):

(0.810,0.892)

구간이 겹치지 않는다는 사실은 우리가 관찰 한 표본 상관의 차이가 실제로 통계적으로 유의하다는 증거를 제공합니다.

의견에서 아메바가 지적한 것처럼,보다 "강력한"결과는 각 부트 스트랩 샘플의 차이를 얻는 것에서 비롯됩니다. 여기에 이미지 설명을 입력하십시오

이 둘의 차이에 대한 95 % CI는 다음과 같습니다.

(0.019,0.108)

구간이 (거의) 0을 배제한다는 점에 유의하면 이전과 비슷한 증거가 있습니다.


누락 된 데이터 문제를 처리하려면 두 데이터 세트에 포함 된 쌍에서 부트 스트랩 샘플을 선택하십시오.


7
cor1-cor2의 95 % CI를 계산하고 0이 포함되어 있는지 확인하여이 절차를 개선 할 수 있습니다.
amoeba

1
그건 좋은 지적이야. 나는 그것을 곧 포함시킬 것이다.
knrumsey

쿨, +1
amoeba

1
이 답변에 감사드립니다. 비록 내가 사용하지 않았지만 매우 흥미롭고 유익하게 쓰여졌습니다.
greenglass

7

Fisher 변환을 가정하십시오. 아르 자형1'=1(아르 자형1)아르 자형2'=1(아르 자형2). 또는 @dbwilson 덕분에 동등하고 분명한 방법으로 ,아르 자형1'=12ln(1+아르 자형11아르 자형1)아르 자형2'=12ln(1+아르 자형21아르 자형2).

그런 다음 Fisher 변환 변수가 이제 정규 분포이고 정규 분포 랜덤 변수의 합이 여전히 정규 분포되어 있다는 사실로 인해 다음과 같습니다.

=아르 자형1'아르 자형2'에스(0,1)

에스=에스12+에스22=11+12

귀무 가설을 검정합니다. H0:=0 획득함으로써 (0)=2(>||).

습관과 비교 -테스트, 우리는 사용할 수 없습니다 - 통계 그렇게 쉽게 볼 이-t-분포의 차이의 분포 무엇 때문에 계산에서 사용할 수있는 자유의 정도에 할 수있는 고려있다, 우리가 가정 정규 근사가 각각에 대해 합리적 일 수있을 정도로 충분히 큼 통계.

-

@Josh 의 주석 후에 샘플 사이의 상호 의존 가능성을 다소 통합 할 수 있습니다 (두 상관 관계는 A의 분포에 달려 있음을 기억하십시오). 독립 표본을 가정하지 않고 Cauchy-Schwarz 부등식을 사용하지 않으면 다음과 같은 상한을 얻을 수 있습니다 ( 두 평균 간의 차이의 표준 편차를 어떻게 찾을 수 있습니까? 참조 ).

에스에스1+에스2

에스11+12

2
이것이 내가 추천 한 것이지만 Fisher의 z 변환에 대한 대체 공식은 z = .5 * ln ((1 + r) / (1-r))입니다. 각 r에 대해이 작업을 수행하고 위와 같이 진행하십시오.
dbwilson

@dbwilson 오 예 (+1), 그들은 동등합니다. 나는 당신의 제안을 추가하여 더 많은 사람들에게 더 명확하게 사용할 것입니다.
Firebug

이 공식은 독립성을 가정하지 않습니다 아르 자형1아르 자형2? 나는 그들이 아닌 것 같아요 ...
조쉬

6

Mark White의 유용한 의견을 듣고 편집 함 (감사합니다!)

하나의 옵션은 단일 모델에서 두 관계 (A와 B1 및 A와 B2)를 계산하여 이들 간의 차이를 추정하는 것입니다. 여러 회귀 분석 을 통해 쉽게 수행 할 있습니다. 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 관계 사이의 관계는 중요하지 않다 ( "값 : varB2"계수의 테스트).

회귀 계수가 아닌 상관 관계 측면에서 생각하고 싶다면 모델을 실행하기 전에 모든 변수 (A, B1 및 B2)를 표준화하면 얻을 수있는 회귀 계수가 표준화됩니다. 0 차 상관 관계이지만 해석 측면에서 훨씬 더 가깝습니다).

또한 이로 인해 분석이 B1과 B2 가 모두 있는 사례로만 제한됩니다 ( 목록 삭제). )로 제한됩니다. 그것이 부족할 정도로 충분한 데이터를 남겨두고 누락 된 데이터가 무작위로 누락되지 않는 한 (또는 무작위로 누락되지 않은 경우에도 중요하지 않은 전체 데이터의 작은 비율), 괜찮습니다.

B1과 B2에 대한 효과를 추정하기 위해 분석을 동일한 데이터 세트로 제한한다는 사실은 (실패 패턴에 따라 약간 다른 데이터 세트를 사용하는 대신) 상관 관계의 차이를 약간 해석하는 이점이 있습니다. 더 간단합니다. 각각에 대해 별도로 상관 관계계산 한 다음 그 차이를 테스트 하는 경우 기본 데이터가 각 경우마다 약간 다르다는 문제가 발생합니다 .- 차이는 샘플 차이로 인해 발생할 수 있습니다 변수 사이의 실제 관계에서.


2
그것은 사실이 아니다 lm(A~B1*B2)사이의 상관 관계가있는 경우 테스트합니다 B1그리고 A 하나의에 따라 B2점수 ? 상호 작용 항이 상관 관계가 다른 경우 테스트하지 않습니다. 두 예측 변수가 서로 상호 작용하는지 테스트 중입니다. C척도 BB1또는 인지 여부를 코딩 하는 더미 코드를 만들 수 있습니다 B2. 그리고 그 사이의 상관 관계가 있음을 말할 것 B하고 A는 경우에 따라 B1또는 B2상관 관계가 다른 경우,입니다.
마크 화이트

1
@MarkWhite 오 세상에, 당신 말이 맞아요! 찾아 주셔서 감사합니다. 이케! 수정하기 위해 편집하겠습니다.
로즈 하트만
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.