Vẽ ma trận tương quan theo thời gian


7

Từ kinh nghiệm của bạn, bạn có gợi ý nào để biểu diễn các ma trận tương quan thay đổi theo thời gian không? Tôi đã xem /quant/1565/how-do-i-graphical-interesent-the-evolution-of-a-covariance-matrix-over-time , nhưng tôi không thể tìm thấy bất kỳ bài báo hay. Tôi đang hỏi câu hỏi này vì tôi khá mới đối với lĩnh vực phân tích dữ liệu và cuốn sách duy nhất tôi đọc cho đến nay là của Wickham ggplot2. Vì vậy, tôi nghĩ đến việc hỏi các chuyên gia về nó.

Tôi chân thành đánh giá cao bất kỳ sự giúp đỡ.


2
Sự lựa chọn của giải pháp đồ họa mạnh mẽ phụ thuộc vào các ưu tiên so sánh của bạn. Điều gì là quan trọng nhất để bạn so sánh ngay lập tức bằng cách lướt qua - phần tử với phần tử trong một ma trận hoặc phần tử tại điểm t1 với chính nó tại điểm t2.
ttnphns

Câu trả lời:


3

Có một số vấn đề ở đây (và liệu bạn có sử dụng ggplot2tôi hay không hoàn toàn trực giao với họ). Đầu tiên, nhận ra rằng các mối tương quan không nhất thiết phải mở rộng theo cách trực quan, "tuyến tính" (phần lớn vì phạm vi có thể của chúng bị giới hạn). Thật đáng suy nghĩ về cách bạn muốn đại diện cho các giá trị. Ví dụ: bạn có thể sử dụng:

  1. các mối tương quan ban đầu ( -scores)r
  2. hệ số xác định ( 's)r2
  3. z -scores dựa trên kết quả của phép biến đổi ' thành 'rz của Fisher :
    zr= =.5ln(1+r1-r)

Tôi thực sự không biết gì về tình huống của bạn, vì vậy thật khó để tôi nói, nhưng mặc định của tôi sẽ là sử dụng điểm số được chuyển đổi ( ). zr

Tiếp theo, bạn cần quyết định những gì về dữ liệu bạn muốn đưa vào (tất cả, hoặc nhiều hơn hoặc ít hơn nổi bật). Ví dụ: bạn có muốn bao gồm độ lớn tuyệt đối của các giá trị hay chỉ thay đổi của chúng (xem, mức độ so với thay đổi trong kinh tế học)? Bạn có chủ yếu quan tâm đến mức độ thay đổi (nghĩa là các giá trị tuyệt đối), cho dù chúng tăng hay giảm (các dấu hiệu, theo nghĩa tuyệt đối, hoặc hướng tới hoặc không có mối tương quan), hoặc cả hai?

Cho rằng bạn muốn hình dung một ma trận tương quan (nghĩa là một tập hợp các tương quan), điều đáng ghi nhớ là chúng sẽ không độc lập . Hãy xem xét rằng một thay đổi chỉ trong một biến sẽ có ảnh hưởng đến nhiều tương quan, ngay cả khi các biến khác không đổi theo thời gian. Vì vậy, một lần nữa, nó phụ thuộc vào việc đó có quan trọng với bạn không.

Nói cách khác, tìm ra chính xác những gì bạn thực sự quan tâm là rất quan trọng. Sẽ không có một hình dung nào sẽ nắm bắt tất cả các khía cạnh này.


Từ nhận xét của bạn , tôi tập hợp bạn sẽ chỉ có hai ma trận tương quan, trước và sau. Điều đó đơn giản hóa mọi thứ. Một lần nữa, không có bất kỳ thông tin nào về tình huống, dữ liệu hoặc mục tiêu của bạn, tôi có thể sẽ tạo một biểu đồ phân tán với trước và sau trên trục X và trên trục Y và hai điểm thể hiện cùng một mối tương quan được nối bởi một đường bộ phận. Xem xét ví dụ này, được mã hóa trong R: zr

library(MASS)   # we'll use these packages
library(psych)
set.seed(541)   # this makes the example exactly reproducible
bef = mvrnorm(100, mu=rep(0, 5), Sigma=rbind(c(1.0, 0.0, 0.0, 0.0, 0.0),
                                             c(0.0, 1.0, 0.4, 0.0, 0.5),
                                             c(0.0, 0.4, 1.0, 0.1, 0.0),
                                             c(0.0, 0.0, 0.1, 1.0, 0.8),
                                             c(0.0, 0.5, 0.0, 0.8, 1.0) ))
aft = mvrnorm(100, mu=rep(0, 5), Sigma=rbind(c(1.0, 0.0, 0.0, 0.0, 0.0),
                                             c(0.0, 1.0, 0.4, 0.0, 0.5),
                                             c(0.0, 0.4, 1.0, 0.1, 0.0),
                                             c(0.0, 0.0, 0.1, 1.0, 0.8),
                                             c(0.0, 0.5, 0.0, 0.8, 1.0) ))
aft[,5] = rnorm(100)  # above I generate data 2x from the same population, 
b.c = cor(bef)        #  here I change just 1 variable
a.c = cor(aft)        # then I make cor matrices, & extract the rs into a vector
b.v = b.c[upper.tri(b.c)]
a.v = a.c[upper.tri(a.c)]
d   = stack(list(bef=b.v, aft=a.v))
d$ind = relevel(d$ind, ref="bef")
windows(width=7, height=4)
  layout(matrix(1:2, nrow=1))
  plot(as.numeric(d$ind), fisherz(d$values), main="Fisher's z",
       axes=F, xlab="time", ylab=expression(z [r]), xlim=c(.5,2.5))
  box()
  axis(side=1, at=1:2, labels=c("before","after"))
  axis(side=2, at=seq(-.2,1.5, by=.2), cex.axis=.8, las=1)
  for(i in 1:10){ lines(1:2, matrix(fisherz(d$values), nrow=10, ncol=2)[i,]) }

  plot(as.numeric(d$ind), d$values, main="Raw rs",
       axes=F, xlab="time", ylab="r", xlim=c(.5,2.5))
  box()
  axis(side=1, at=1:2, labels=c("before","after"))
  axis(side=2, at=seq(-.2,1.0, by=.2), cex.axis=.8, las=1)
  for(i in 1:10){ lines(1:2, matrix(d$values, nrow=10, ncol=2)[i,]) }; rm(i)

fdif       = abs(fisherz(a.c)-fisherz(b.c))
diag(fdif) = 0
windows()
  image(1:5, 1:5, z=fdif, 
        xlab="", ylab="", col=gray.colors(8)[8:3])
  for(i in 1:5){ for(j in 1:5){ text(i,j,round(fdif,2)[i,j]) }}

nhập mô tả hình ảnh ở đây

Các hình trên hiển thị cả mức độ tương quan và lượng thay đổi. Bạn có thể thấy các tính năng khác nhau, chẳng hạn như sự hội tụ hướng tới . Sự khác biệt giữa việc sử dụng và là các điểm được phân phối đồng đều hơn trước. Khoảng cách giữa và giống như khoảng cách giữar= =0zrrr0.4.4.số 8, ví dụ. Mặt khác, chozr, mối tương quan gần với 0được kết lại với nhau và mối tương quan mạnh mẽ hơn nhiều so với phần còn lại. Những gì những con số không nắm bắt được là sự không độc lập của những dòng đó. Bạn có thể thấy trong bản đồ nhiệt bên dưới (sử dụng các giá trị tuyệt đối của sự khác biệt trongzr's) rằng những thay đổi lớn hơn được liên kết với biến 5.

nhập mô tả hình ảnh ở đây


Cảm ơn rất nhiều vì sự giúp đỡ của bạn. Tôi đã sử dụng câu trả lời của Irishstat dưới đây cho bài thuyết trình của tôi hai ngày trước. Nó đã đi tốt. Tuy nhiên, trong tương lai, tôi sẽ sử dụng phép biến đổi của Fisher. Tôi thích nó.
tháp canh

1

Theo tôi, tốt hơn là định lượng ảnh hưởng của các thay đổi trong tham số (proxy cho tương quan cục bộ) thay vì thử trực quan vì các nỗ lực so sánh trực quan có thể khá chủ quan Câu hỏi của bạn tương tự như "Làm cách nào để kiểm tra nếu các tham số của tôi thay đổi mô hình theo thời gian ". Những gì tôi đã làm là lập trình thử nghiệm Chow để xác định tại thời điểm nào các tham số có độ phân kỳ lớn nhất. Phát hiện điều này dẫn đến một thử nghiệm trực tiếp về tầm quan trọng có thể mang lại kết luận rằng "dữ liệu trước đó" nên được đặt sang một bên.


Câu trả lời của bạn cho câu hỏi là gì, dường như để hỏi về các cách đồ họa để hình dung các thay đổi theo thời gian?
whuber

Tôi đoán rằng tôi đã cố nói với anh ấy về một sự thay thế cho đồ họa mà theo tôi là một định nghĩa làm việc về phân tích thống kê,
IrishStat

@IrishStat - Sau khi cẩn thận thực hiện cả hai nghĩa là so sánh trực quan so với định lượng chúng, tôi đã nhận ra rằng định lượng chúng tốt hơn nhiều. Về cơ bản, tôi sẽ tạo ra hai ma trận 'trước và sau' và sau đó cho thấy những gì đang diễn ra. Cảm ơn một lần nữa vì sự giúp đỡ của bạn.
tháp canh

Vấn đề bạn có thể gặp phải là xác định cách sapecoify [vị trí
IrishStat

1
Vấn đề bạn có thể có là xác định cách xác định điểm dừng. Cách tiếp cận tôi đang đề xuất thực sự có thể xác định điểm phá vỡ quan trọng nhất. Ngoài ra, mối tương quan có thể bị giảm sút nghiêm trọng bởi sự bất thường khiến bạn kết luận rằng không có mối quan hệ nào. Đó là lý do tại sao một người cần phải đệm / chỉnh sửa / điều chỉnh / làm sạch cho các dị thường có thể xác định để đánh giá chính xác các điểm phá vỡ nhưng đó chỉ là ý kiến ​​hai xu của tôi.
IrishStat
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.