Công thức tự động tương quan trong R so với Excel


13

Tôi đang cố gắng tìm ra cách R tính toán tự động tương quan lag-k (rõ ràng, đó là cùng một công thức được sử dụng bởi Minitab và SAS), để tôi có thể so sánh nó với việc sử dụng hàm CORREL của Excel áp dụng cho chuỗi và phiên bản k-lag của nó. R và Excel (sử dụng CORREL) cho các giá trị tự tương quan hơi khác nhau.

Tôi cũng muốn biết liệu một tính toán có đúng hơn so với cái kia không.


RCông thức của chúng tôi được phân tích và giải thích thêm tại stats.stackexchange.com/questions/81754/ .
whuber

Câu trả lời:


17

Phương trình chính xác được đưa ra trong: Venables, WN và Ripley, BD (2002) Thống kê ứng dụng hiện đại với S. Phiên bản thứ tư. Springer-Verlag. Tôi sẽ cho bạn một ví dụ:

### simulate some data with AR(1) where rho = .75
xi <- 1:50
yi <- arima.sim(model=list(ar=.75), n=50)

### get residuals
res <- resid(lm(yi ~ xi))

### acf for lags 1 and 2
cor(res[1:49], res[2:50])      ### not quite how this is calculated by R
cor(res[1:48], res[3:50])      ### not quite how this is calculated by R

### how R calculates these
acf(res, lag.max=2, plot=F)

### how this is calculated by R
### note: mean(res) = 0 for this example, so technically not needed here
c0 <- 1/50 * sum( (res[1:50] - mean(res)) * (res[1:50] - mean(res)) ) 
c1 <- 1/50 * sum( (res[1:49] - mean(res)) * (res[2:50] - mean(res)) ) 
c2 <- 1/50 * sum( (res[1:48] - mean(res)) * (res[3:50] - mean(res)) ) 
c1/c0
c2/c0

Và như vậy (ví dụ, res[1:47]res[4:50]cho độ trễ 3).


Cảm ơn Wolfgang! Điều này thật đúng với gì mà tôi đã tìm kiếm. Bây giờ tôi có thể thử và sao chép nó trong Excel (dành cho những sinh viên của tôi chỉ sử dụng Excel).
Galit Shmueli

11

Cách ngây thơ để tính toán tương quan tự động (và có thể là những gì Excel sử dụng) là tạo 2 bản sao của vectơ sau đó loại bỏ n phần tử thứ nhất khỏi bản sao đầu tiên và n phần tử cuối cùng từ bản sao thứ hai (trong đó n là độ trễ mà bạn đang tính toán từ). Sau đó chuyển 2 vectơ đó cho hàm để tính tương quan. Phương pháp này là OK và sẽ đưa ra một câu trả lời hợp lý, nhưng nó bỏ qua thực tế là 2 vectơ được so sánh thực sự là các biện pháp của cùng một điều.

Phiên bản cải tiến (như được hiển thị bởi Wolfgang) là một chức năng tương tự như tương quan thông thường, ngoại trừ việc nó sử dụng toàn bộ vectơ để tính toán giá trị trung bình và phương sai.


3
Sự khác biệt khác là hệ số 1 / n thay vì 1 / (nk) trong đó n là độ dài của chuỗi và k số lượng độ trễ. Điều này là để đảm bảo rằng ma trận tự tương quan là xác định dương.
Rob Hyndman

1
@Rob: Tôi tin rằng công thức CORREL của Excel không sử dụng n (chứ không phải nk). Ví dụ: đối với ACF lag-1, bạn nhận được kết quả tương tự (sử dụng ký hiệu của Wolfgang) nếu bạn sử dụng COVAR (res [1:49], res [2:50]) / (STDEVP (res [1:49]) * STDEVP (res [2:50])) và các hàm COVAR và STDEVP là số liệu thống kê "dân số".
Galit Shmueli

@Galit. Ngay cả khi sử dụng COVAR và STDEVP, mẫu số trong mã của bạn sẽ là 49, nhưng định nghĩa tự động ưu tiên sẽ sử dụng 50.
Rob Hyndman

1
Điểm 1 / n vs 1 / (nk) là tốt để hiểu ngoài các điểm khác ở trên. Nhưng đối với các số thực tế / được quan sát, sẽ không có vấn đề gì miễn là nó phù hợp, vì thuật ngữ đó xuất hiện trong cả tử số và mẫu số, nó sẽ hủy bỏ. Bạn có thể gặp vấn đề nếu các phân số khác nhau được sử dụng trong tử số và mẫu số.
Greg Snow
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.