ทำไมค่า p เปลี่ยนแปลงอย่างมีนัยสำคัญเมื่อเปลี่ยนลำดับของ covariates ใน aov model?


10

ฉันมีชุดข้อมูลของการสังเกต 482 ชุด

data=Populationfull

ฉันจะทำการวิเคราะห์ความสัมพันธ์ของจีโนไทป์สำหรับ 3 SNP ฉันกำลังพยายามสร้างแบบจำลองสำหรับการวิเคราะห์ของฉันและฉันใช้ aov (y ~ x, data = ... ) สำหรับคุณลักษณะหนึ่งฉันมีเอฟเฟกต์คงที่และค่าแปรปรวนร่วมหลายอย่างที่ฉันได้รวมไว้ในโมเดลเช่น:

Starts <- aov(Starts~Sex+DMRT3+Birthyear+Country+Earnings+Voltsec+Autosec, data=Populationfull)

summary(Starts)
                Df Sum Sq Mean Sq F value   Pr(>F)    
Sex              3  17.90    5.97  42.844  < 2e-16 ***
DMRT3            2   1.14    0.57   4.110    0.017 *  
Birthyear        9   5.59    0.62   4.461 1.26e-05 ***
Country          1  11.28   11.28  81.005  < 2e-16 ***
Earnings         1 109.01  109.01 782.838  < 2e-16 ***
Voltsec          1  12.27   12.27  88.086  < 2e-16 ***
Autosec          1   8.97    8.97  64.443 8.27e-15 ***
Residuals      463  64.48    0.14                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

ฉันค้นพบว่าถ้าฉันเปลี่ยนลำดับของตัวแปรในโมเดลที่ฉันมีค่า p ต่างกันโปรดดูด้านล่าง

Starts2 <- aov(Starts~Voltsec+Autosec+Sex+DMRT3+Birthyear+Country+Earnings, data=Populationfull)

summary(Starts2)

                Df Sum Sq Mean Sq F value   Pr(>F)    
Voltsec   1   2.18    2.18  15.627 8.92e-05 ***
Autosec   1 100.60  100.60 722.443  < 2e-16 ***
Sex              3  10.43    3.48  24.962 5.50e-15 ***
DMRT3            2   0.82    0.41   2.957  0.05294 .  
Birthyear        9   3.25    0.36   2.591  0.00638 ** 
Country          1   2.25    2.25  16.183 6.72e-05 ***
Earnings      1  46.64   46.64 334.903  < 2e-16 ***
Residuals      463  64.48    0.14                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

ทำไมฉันถึงได้ค่า p ที่แตกต่างกันขึ้นอยู่กับว่าตัวแปร / ปัจจัย / covariates / fixedeffects (?) อยู่ในลำดับใด มีวิธีการ "แก้ไข" หรือไม่ เป็นไปได้ไหมที่ฉันจะใช้โมเดลผิด? ฉันยังค่อนข้างใหม่อยู่ที่ R ดังนั้นถ้าคุณสามารถช่วยฉันได้โปรดช่วยให้มันง่ายมากเพื่อที่ฉันจะสามารถเข้าใจคำตอบฮิฮิ ... ขอบคุณหวังว่าจะมีคนช่วยฉันเข้าใจสิ่งนี้!


3
โปรดให้ข้อมูลตัวอย่างบางส่วนPopulationfullเพื่อให้ปัญหาของคุณสามารถทำซ้ำได้ สิ่งนี้จะไม่เกิดขึ้นกับตัวอย่างจากaov()หน้าช่วยเหลือ summary(aov(yield ~ block + N + P + K, npk)); summary(aov(yield ~ K + P + block + N , npk))
MrFlick

ค่า p กำลังเปลี่ยนแปลงเนื่องจากเขตข้อมูลค่าทั้งหมดเปลี่ยนไป ครั้งแรกของคุณทำงานของคุณทำงานที่สองEarnings 1 109.01 109.01 782.838 < 2e-16 *** Earnings 1 46.64 46.64 334.903 < 2e-16 ***ผลลัพธ์ของคุณไม่เหมือนกัน เริ่มต้นด้วยการตรวจสอบเพื่อดูว่าคุณไม่ได้ทำมากกว่าการจัดลำดับตัวแปรใหม่

1
นอกจากนี้: ในรุ่นที่สองคุณใช้ Earn ไม่ใช่ Earnings ... ถ้ามีตัวแปรสองตัวที่มีชื่อต่างกันอาจเป็นปัญหาหากนั่นไม่ใช่การพิมพ์ผิดในการคัดลอกไปยังพื้นที่คำถาม SO

ใช่ค่าเปลี่ยนแปลง แต่ทำไม ฉันได้ใช้คอลัมน์เดียวกันที่แน่นอนจากกรอบข้อมูลเดียวกันที่แน่นอนในทั้งสองรุ่น (สิ่ง Earnings vs Earn ในรูปแบบที่สองเป็นเพียงที่ฉันเขียนผิดฉันได้แก้ไขมันแล้ว)
Rbeginner

1
สิ่งนี้เกิดขึ้นเพราะคุณมีการออกแบบที่ไม่สมดุล คุณจะพบความช่วยเหลือมากมายเกี่ยวกับสิ่งนี้หากคุณค้นหาฟอรัมนี้หรือเพียงแค่ Google "ANOVA in R" ที่ไม่สมดุล ฉันขอแนะนำให้ดูในcarแพ็คเกจ - มันใช้ Type II และ Type III ANOVA ซึ่งไม่ได้ขึ้นอยู่กับลำดับของตัวแปรในขณะที่aovType I ANOVA
Loris ช้า

คำตอบ:


15

ปัญหามาจากวิธีaov()การทดสอบความสำคัญเริ่มต้น มันใช้สิ่งที่เรียกว่าการวิเคราะห์ ANOVA แบบ "Type I" ซึ่งจะทำการทดสอบตามลำดับที่ระบุตัวแปรในโมเดลของคุณ ดังนั้นในตัวอย่างแรกมันกำหนดจำนวนความแปรปรวนที่อธิบายsexและทดสอบความสำคัญของมันจากนั้นส่วนใดของความแปรปรวนที่เหลือจะถูกอธิบายDMRT3และทดสอบความสำคัญของมันในแง่ของความแปรปรวนที่เหลืออยู่และอื่น ๆ ในตัวอย่างที่สองDMRT3จะถูกประเมินหลังจากVoltsecเท่านั้นAutosecและsexในลำดับนั้นจึงมีความแปรปรวนเหลืออยู่น้อยกว่าที่DMRT3จะอธิบาย

หากตัวแปรตัวทำนายสองตัวมีความสัมพันธ์กันตัวแรกที่เข้าสู่แบบจำลองจะได้รับ "เครดิต" เต็มซึ่งจะทำให้ความแปรปรวนน้อยลงที่จะ "อธิบายโดย" ตัวที่สองซึ่งจะปรากฏน้อยลง "สำคัญทางสถิติ" มากกว่าครั้งแรกแม้ว่ามันจะเป็น ไม่ทำหน้าที่ คำถามและคำตอบนี้อธิบายถึงการวิเคราะห์ประเภทต่าง ๆ ของ ANOVA

วิธีการหนึ่งที่จะได้รับรอบนี้คือการแยกตัวเองจากการตีบของคลาสสิก ANOVA และใช้รูปแบบเชิงเส้นอย่างง่ายด้วยlm()ใน R aov()มากกว่า สิ่งนี้จะวิเคราะห์ตัวทำนายทั้งหมดแบบขนานอย่างมีประสิทธิภาพ "แก้ไขสำหรับ" ตัวทำนายทั้งหมดในครั้งเดียว ในกรณีดังกล่าวตัวทำนายที่สัมพันธ์กันสองตัวอาจมีข้อผิดพลาดมาตรฐานขนาดใหญ่ของสัมประสิทธิ์การถดถอยโดยประมาณและสัมประสิทธิ์การถดถอยอาจแตกต่างกันในกลุ่มตัวอย่างที่แตกต่างกันจากประชากร แต่อย่างน้อยคำสั่งที่คุณป้อนตัวแปรลงใน

หากตัวแปรตอบกลับของคุณเป็นตัวแปรนับจำนวนหนึ่งตามชื่อของมันStartsคุณอาจไม่ควรใช้ ANOVA เพราะส่วนที่เหลือไม่น่าจะกระจายได้ตามปกติเนื่องจากการตีความค่าp-valueต้องการ การนับตัวแปรจะได้รับการจัดการที่ดีขึ้นด้วยตัวแบบเชิงเส้นแบบทั่วไป (เช่นglm()ใน R) ซึ่งสามารถคิดได้ว่าเป็นการวางหลักเกณฑ์ทั่วไปlm()สำหรับโครงสร้างข้อผิดพลาดประเภทอื่นที่เหลือ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.