Làm thế nào để tôi xác định liệu hai mối tương quan là khác nhau đáng kể?


9

Tôi muốn xác định bộ nào trong hai bộ dữ liệu (B1, B2) tương quan tốt hơn (lê r) với bộ khác (A). Có dữ liệu bị thiếu trong tất cả các bộ dữ liệu. Làm thế nào tôi có thể xác định liệu mối tương quan kết quả là khác nhau đáng kể hay không?

Ví dụ: 8426 giá trị có mặt ở cả A và B1, r = 0,74. 8798 có mặt ở cả A và B2, r = 0,72.

Tôi nghĩ câu hỏi này có thể giúp nhưng nó chưa được trả lời: Làm thế nào để biết một hệ thống tốt hơn đáng kể so với hệ thống khác?


Chúng ta có thể giả sử lớn ? n
Firebug

1
@Fireorms n thường sẽ nằm trong khoảng từ 7000 đến 8760.
kính trong

Câu trả lời:


6

Đôi khi, người ta có thể thực hiện điều này trong nhiều hồi quy, trong đó A là DV, B là điểm số mà mọi người có trên thang điểm và C là một mã giả cho biết đó là B1 hoặc B2 : lm(A~B+C+B*C). Thuật ngữ tương tác B*C, sẽ cho bạn biết nếu các mối tương quan là khác nhau, trong khi độ dốc đơn giản giữa A và B ở cả hai cấp độ C sẽ cho bạn biết các mối tương quan.

Tuy nhiên, không thể phù hợp với tất cả các loại so sánh giữa các điều kiện trong khung này. Các cocorgói R là rất hữu ích, và nó có một rất đơn giản giao diện point-and-click trên web. Lưu ý rằng, với dữ liệu bị thiếu khác nhau, bạn không có mẫu độc lập hay phụ thuộc. Tôi sẽ sử dụng xóa listwise ở đây, để giữ cho nó đơn giản (và sức mạnh không phải là vấn đề với bạn).


2
Mặc dù đây là câu trả lời ngắn nhất, nhưng liên kết đến cocor là thứ hướng tôi đến thông tin tôi cần. Cảm ơn nhiều.
kính râm

15

Ôi sức mạnh của bootstrap. Hãy nhìn vào ba vectơ để minh họa: A , B1B2 trong đó:

Cor(A,B1)=0.92
Cor(A,B2)=0.86
nhập mô tả hình ảnh ở đây

Mục tiêu là để xác định xem mối tương quan của hai bộ dữ liệu này có khác nhau đáng kể hay không. Bằng cách lấy mẫu bootstrap như vậy:

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

Chúng ta có thể vẽ các bản phân phối bootstrap của hai tương quan: nhập mô tả hình ảnh ở đây

Cor(A,Bi)

Corr(A,B1)

(0.897,0.947)

Corr(A,B2)

(0.810,0.892)

Thực tế là các khoảng không trùng nhau (hầu như không) cho chúng ta một số bằng chứng cho thấy sự khác biệt trong tương quan mẫu mà chúng ta quan sát được thực sự có ý nghĩa thống kê.

Như amip đã chỉ ra trong các bình luận, một kết quả "mạnh mẽ" hơn đến từ việc nhận được sự khác biệt cho từng mẫu bootstrap. nhập mô tả hình ảnh ở đây

(0.019,0.108)

Lưu ý rằng khoảng (hầu như) không bao gồm 0, chúng tôi có bằng chứng tương tự như trước đây.


Để xử lý vấn đề dữ liệu bị thiếu, chỉ cần chọn các mẫu bootstrap của bạn từ các cặp được chứa trong cả hai bộ dữ liệu.


7
Bạn có thể cải thiện quy trình này bằng cách tính toán 95% CI của cor1-cor2 và kiểm tra xem nó có bao gồm 0 hay không.
amip

1
Đó là một điểm hay. Tôi sẽ bao gồm điều đó trong thời gian ngắn.
knrumsey

Tuyệt, +1.
amip

1
Cảm ơn bạn cho câu trả lời này. Nó rất thú vị và được viết một cách hữu ích, mặc dù đó không phải là thứ mà tôi đã sử dụng.
kính râm

7

r1=tanh1(r1)r2=tanh1(r2)r1=12ln(1+r11r1)r2=12ln(1+r21r2)

Sau đó, do thực tế, các biến được chuyển đổi Fisher hiện được phân phối Thông thường và tổng các biến ngẫu nhiên được phân phối bình thường vẫn được phân phối bình thường:

z=r1r2SN(0,1)

S=S12+S22=1n13+1n23

H0:z=0P(z0)=2P(Z>|z|)

ttnt

-

Sau nhận xét của @Josh , chúng ta có thể kết hợp phần nào khả năng phụ thuộc lẫn nhau giữa các mẫu (hãy nhớ cả hai mối tương quan phụ thuộc vào sự phân phối của A). Nếu không giả sử các mẫu độc lập và sử dụng bất đẳng thức Cauchy-Schwarz, chúng ta có thể có giới hạn trên sau (xem: Làm cách nào để tìm độ lệch chuẩn của chênh lệch giữa hai phương tiện? ):

SS1+S2

S1n13+1n23

2
Đây có thể là đề xuất của tôi nhưng một công thức thay thế cho phép biến đổi z của Fisher là z = .5 * ln ((1 + r) / (1-r)). Làm điều này cho mỗi r và tiến hành như trên.
dbwilson

@dbwilson Oh yeah (+1), chúng tương đương nhau, tôi sẽ sử dụng thêm đề xuất của bạn để nó rõ ràng hơn với đối tượng rộng hơn.
Firebug

r1r2

6

Đã chỉnh sửa sau khi phản hồi hữu ích từ Mark White (cảm ơn bạn!)

Một lựa chọn là tính toán cả hai mối quan hệ (B1 với A và B2 với A) trong một mô hình duy nhất cũng ước tính sự khác biệt giữa chúng. Điều này là dễ dàng để thực hiện với nhiều hồi quy . Bạn sẽ chạy một mô hình với A là biến phụ thuộc và sau đó là một biến liên tục với tất cả các điểm cho B1 và ​​B2, một biến phân loại cho biết đó là biến nào (B1 hoặc B2) và tương tác giữa chúng. Trong 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

Dưới đây là các mối tương quan từ dữ liệu tôi tạo ra:

> 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
> 

Thay đổi định dạng của dữ liệu để đáp ứng nhu cầu của mô hình (định dạng lại thành "dài"):

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

Đây là mô hình:

tóm tắt (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

Các kết quả ở đây (từ dữ liệu đã tạo của tôi) cho thấy có mối quan hệ đáng kể giữa B1 và ​​A (thử nghiệm hệ số "giá trị", vì B1 là nhóm tham chiếu cho hệ số "var"), nhưng sự khác biệt giữa mối quan hệ B1 với A và mối quan hệ B2 với A là không đáng kể (thử nghiệm hệ số "giá trị: varB2").

Nếu bạn thích suy nghĩ về mặt tương quan thay vì hệ số hồi quy, chỉ cần chuẩn hóa tất cả các biến của bạn (A, B1 và ​​B2) trước khi chạy mô hình và các hệ số hồi quy bạn sẽ nhận được sẽ được chuẩn hóa (không hoàn toàn giống như một tương quan không thứ tự, nhưng gần hơn nhiều về mặt giải thích).

Cũng lưu ý rằng điều này sẽ hạn chế phân tích của bạn chỉ trong các trường hợp có cả B1 và ​​B2 ( xóa theo cách liệt kê ). Miễn là điều đó khiến bạn có đủ dữ liệu để không bị thiếu năng lượng và miễn là dữ liệu bị thiếu một cách ngẫu nhiên (hoặc một tỷ lệ đủ nhỏ trong tổng số dữ liệu sẽ không còn quan trọng ngay cả khi chúng bị thiếu một cách không chính đáng), thì điều đó cũng ổn.

Thực tế là bạn đang giới hạn phân tích của mình vào cùng một bộ dữ liệu để ước tính hiệu ứng cho cả B1 và ​​B2 (thay vì sử dụng các bộ dữ liệu hơi khác nhau, dựa trên các mẫu thiếu khác nhau) có lợi thế là giải thích sự khác biệt giữa các tương quan một chút đơn giản hơn. Nếu bạn tính toán các mối tương quan riêng biệt cho từng loại và sau đó kiểm tra sự khác biệt giữa chúng , bạn sẽ gặp phải vấn đề là dữ liệu cơ bản hơi khác nhau trong mỗi trường hợp --- bất kỳ sự khác biệt nào bạn thấy có thể là do sự khác biệt trong các mẫu nhiều như sự khác biệt trong các mối quan hệ thực tế giữa các biến.


2
Đây không phải là trường hợp lm(A~B1*B2)sẽ kiểm tra nếu mối tương quan giữa B1A phụ thuộc vào B2điểm số của một người ? Thuật ngữ tương tác đó không phải là thử nghiệm nếu các mối tương quan là khác nhau; nó đang thử nghiệm nếu hai yếu tố dự đoán tương tác với nhau. Bạn có thể tạo một mã giả, Cmã đó cho dù tỷ lệ BB1hay B2. Sau đó, điều đó sẽ cho bạn biết rằng mối tương quan giữa BAphụ thuộc vào nếu nó là B1hoặc B2, nghĩa là, nếu các mối tương quan là khác nhau.
Đánh dấu trắng

1
@MarkWhite Ôi trời, bạn hoàn toàn đúng! Cảm ơn đã nắm bắt điều đó. Rất tiếc! Tôi sẽ chỉnh sửa để sửa nó.
Rose Hartman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.