สูตรสำหรับความสัมพันธ์อัตโนมัติใน R กับ Excel


13

ฉันพยายามหาวิธีที่ R คำนวณความสัมพันธ์ระหว่าง lag-k (เห็นได้ชัดว่าเป็นสูตรเดียวกับที่ใช้โดย Minitab และ SAS) เพื่อให้ฉันสามารถเปรียบเทียบกับการใช้ฟังก์ชัน CORREL ของ Excel ที่ใช้กับซีรี่ส์และรุ่น k-lagged R และ Excel (ใช้ CORREL) ให้ค่าความสัมพันธ์อัตโนมัติที่แตกต่างกันเล็กน้อย

ฉันสนใจที่จะทราบด้วยว่าการคำนวณหนึ่งนั้นถูกต้องมากกว่าอีกไหม


Rสูตรของการวิเคราะห์เพิ่มเติมและอธิบายที่stats.stackexchange.com/questions/81754/...
whuber

คำตอบ:


17

สมการที่แน่นอนได้รับใน: Venables, WN และ Ripley, BD (2002) สถิติประยุกต์สมัยใหม่พร้อมด้วย S. Fourth Edition Springer-Verlag ฉันจะให้ตัวอย่าง:

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

และอื่น ๆ (เช่นres[1:47]และres[4:50]สำหรับความล่าช้า 3)


ขอบคุณ Wolfgang! นี่คือสิ่งที่ฉันกำลังมองหา ตอนนี้ฉันสามารถลองและทำซ้ำใน Excel (สำหรับนักเรียนของฉันที่ใช้ Excel เท่านั้น)
Galit Shmueli

11

วิธีที่ไร้เดียงสาในการคำนวณความสัมพันธ์แบบอัตโนมัติ (และอาจเป็นสิ่งที่ Excel ใช้) คือการสร้างเวกเตอร์ 2 ชุดจากนั้นลบองค์ประกอบที่ 1 จากสำเนาแรกและองค์ประกอบสุดท้าย n จากสำเนาที่สอง (โดยที่ n คือความล่าช้าที่คุณ กำลังคำนวณจาก) จากนั้นส่งเวกเตอร์ 2 ตัวนั้นไปยังฟังก์ชันเพื่อคำนวณสหสัมพันธ์ วิธีนี้ใช้ได้และจะให้คำตอบที่สมเหตุสมผล แต่มันก็ไม่สนใจความจริงที่ว่าเวกเตอร์ 2 ตัวที่ถูกเปรียบเทียบนั้นเป็นตัวชี้วัดในสิ่งเดียวกัน

รุ่นปรับปรุง (แสดงโดย Wolfgang) เป็นฟังก์ชั่นที่คล้ายกับความสัมพันธ์ปกติยกเว้นว่ามันใช้เวกเตอร์ทั้งหมดเพื่อคำนวณค่าเฉลี่ยและความแปรปรวน


3
ข้อแตกต่างอื่น ๆ คือตัวประกอบ 1 / n แทน 1 / (nk) โดยที่ n คือความยาวของอนุกรมและ k จำนวนความล่าช้า นี่คือเพื่อให้แน่ใจว่าเมทริกซ์ autocorrelation เป็นค่าบวกแน่นอน
Rob Hyndman

1
@Rob: ฉันเชื่อว่าสูตร CORREL ของ Excel ใช้ n (แทน nk) ตัวอย่างเช่นสำหรับ lag-1 ACF คุณจะได้รับผลลัพธ์เดียวกัน (โดยใช้สัญลักษณ์ของ Wolfgang) หากคุณใช้ COVAR (res [1:49], res [2:50]) / (STDEVP (res [1:49]) * STDEVP (res [2:50])) และฟังก์ชัน COVAR และ STDEVP คือสถิติ "ประชากร"
Galit Shmueli

@Galit แม้จะใช้ COVAR และ STDEVP ตัวหารในรหัสของคุณจะเป็น 49 แต่นิยามของ autocorrelation ที่ต้องการจะใช้ 50
Rob Hyndman

1
จุด 1 / n เทียบกับ 1 / (nk) นั้นดีสำหรับการทำความเข้าใจนอกเหนือจากจุดอื่น ๆ ด้านบน แต่สำหรับตัวเลขที่ใช้งานจริง / ที่สังเกตได้มันจะไม่สำคัญตราบใดที่มันมีความสอดคล้องกันเนื่องจากเทอมนั้นจะปรากฏทั้งในตัวเศษและส่วนที่มันจะยกเลิก คุณอาจได้รับปัญหาหากมีการใช้เศษส่วนที่แตกต่างกันในตัวเศษและส่วน
Greg Snow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.