วิธีการหนึ่งทำ Type-III SS ANOVA ใน R ด้วยรหัสความคมชัด?


26

โปรดระบุรหัส R ซึ่งอนุญาตให้บุคคลหนึ่งทำการวิเคราะห์ความแปรปรวนระหว่างอาสาสมัครที่มี -3, -1, 1, 3 ตรงกันข้าม ฉันเข้าใจว่ามีการถกเถียงกันเกี่ยวกับประเภทผลรวมของกำลังสอง (SS) ที่เหมาะสมสำหรับการวิเคราะห์ดังกล่าว อย่างไรก็ตามเนื่องจากประเภทเริ่มต้นของ SS ที่ใช้ใน SAS และ SPSS (Type III) ถือเป็นมาตรฐานในพื้นที่ของฉัน ดังนั้นฉันต้องการให้ผลลัพธ์ของการวิเคราะห์นี้ตรงกับสิ่งที่สร้างขึ้นโดยโปรแกรมสถิติเหล่านั้น หากต้องการได้รับคำตอบคำตอบจะต้องโทร aov () โดยตรง แต่คำตอบอื่น ๆ อาจได้รับการโหวต (espeically ถ้าพวกเขาเข้าใจง่าย / ใช้งาน)

sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))

แก้ไข:โปรดทราบความแตกต่างที่ฉันขอไม่ใช่ความคมชัดเชิงเส้นหรือพหุนามที่เรียบง่าย แต่เป็นความแตกต่างที่ได้จากการทำนายเชิงทฤษฎีคือประเภทของความแตกต่างที่กล่าวถึงโดย Rosenthal และ Rosnow


5
ฉันเข้าใจว่าคุณต้องการผลรวม Type III แต่บทความ ( stats.ox.ac.uk/pub/MASS3/Exegeses.pdf ) บทความนี้เป็นบทความที่อ่านได้ดี มันแสดงให้เห็นถึงจุดที่น่าสนใจ
suncoolsu

เกี่ยวกับคำถามของคุณคุณอาจสนใจในการสนทนาต่อไปนี้: stats.stackexchange.com/questions/60362/…ทางเลือกระหว่าง ANOVA type I, II และ III นั้นไม่ง่ายอย่างที่คิด
phx

ยกระดับคำถามของคุณว่ามีประโยชน์เพราะมันกระตุ้นการตอบสนองที่เรียนรู้หลายอย่าง แต่ฉันยังทราบด้วยว่าคุณเห็นด้วยกับผู้ตอบที่โดยทั่วไปกล่าวว่าหลักฐานของคำถามนั้นไม่ถูกต้อง ฉันหวังว่าฉันจะสรุปสถานะของ StaGuy ว่าคำจำกัดความที่กำหนดไว้นั้นเป็นไปตามคำจำกัดความ "ประเภทฉัน" และการอภิปรายประเภทอื่น ๆ จะมีความเกี่ยวข้องเมื่อประเมินสถิติการถดถอยบางส่วนซึ่งสำคัญที่สุดเมื่อปล่อยให้
DWIN

@Din: ฉันไม่แน่ใจว่าฉันติดตามคุณทั้งหมด เราสามารถใช้ SS ประเภทอื่นอย่างถูกกฎหมายโดยไม่ต้องให้ 'เครื่องขับรถ' (อย่างน้อยเมื่อฉันเข้าใจวลีนั้น) ฉันอาจจะสนิมเล็กน้อยที่นี่ แต่ถ้าหน่วยความจำทำหน้าที่ประเภทอื่น ๆ อาจเกี่ยวข้องเมื่อไม่ใช้การถดถอยบางส่วน ตัวอย่างเช่น Type III SS ไม่ได้เป็นผลกระทบหลักบางส่วนจากการโต้ตอบ ความแตกต่างระหว่างประเภทมีความสำคัญเนื่องจาก Type III ไม่ได้แยกจากกันในขณะที่ Type I ทำ ปัญหาตามที่ระบุไว้มีเพียงความแตกต่างเพียงครั้งเดียวดังนั้นความแตกต่างระหว่างประเภทของ SS คือ / เป็นที่สงสัย
russellpierce

ความเข้าใจของฉันคือเหตุผลที่กำหนดโดย SAS สำหรับการเลือกประเภท III SSS (และนี่เป็นเหตุผลว่าทำไมผู้คนคิดว่าประเภทที่สามนั้นเป็นที่ต้องการ) คือการสนับสนุนกระบวนการเลือกย้อนหลังและไปข้างหน้าได้ดียิ่งขึ้น
DWIN

คำตอบ:


22

ผลรวมกำลังสองของ Type III สำหรับ ANOVA พร้อมใช้งานผ่านAnova()ฟังก์ชั่นจากแพ็คเกจรถยนต์

คมชัดเข้ารหัสสามารถทำได้ในหลายวิธีที่ใช้C()ในcontr.*ครอบครัว (ตามที่ระบุโดย @nico) หรือโดยตรงcontrasts()ฟังก์ชั่น / ข้อโต้แย้ง นี่คือรายละเอียดใน§6.2 (pp. 144-151) ของสถิติประยุกต์สมัยใหม่กับ S (Springer, 2002, 4th ed.) โปรดทราบว่าaov()เป็นเพียงฟังก์ชั่น wrapper สำหรับlm()ฟังก์ชั่น เป็นสิ่งที่น่าสนใจเมื่อเราต้องการควบคุมข้อผิดพลาดของโมเดล (เช่นในการออกแบบภายในเรื่อง) แต่ไม่เช่นนั้นพวกเขาทั้งคู่จะให้ผลลัพธ์ที่เหมือนกัน (และไม่ว่าคุณจะพอดีกับโมเดลของคุณแบบใดก็ตาม) คุณยังสามารถส่งออก ANOVA หรือ LM- เหมือนบทสรุปที่มีsummary.aovหรือsummary.lm)

ฉันไม่มี SPSS เพื่อเปรียบเทียบผลลัพธ์ทั้งสอง แต่คล้าย ๆ กัน

> library(car)
> sample.data <- data.frame(IV=factor(rep(1:4,each=20)),
                            DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
> Anova(lm1 <- lm(DV ~ IV, data=sample.data, 
                  contrasts=list(IV=contr.poly)), type="III")
Anova Table (Type III tests)

Response: DV
            Sum Sq Df F value    Pr(>F)    
(Intercept)  18.08  1  21.815  1.27e-05 ***
IV          567.05  3 228.046 < 2.2e-16 ***
Residuals    62.99 76                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

คุ้มค่าที่จะลองในตัวอย่างแรก

เกี่ยวกับการเข้ารหัสปัจจัยใน R กับ SAS: R พิจารณาระดับพื้นฐานหรือระดับอ้างอิงเป็นระดับแรกตามลำดับพจนานุกรมขณะที่ SAS พิจารณาระดับสุดท้าย ดังนั้นเพื่อให้ได้ผลลัพธ์ที่เปรียบเทียบกันไม่ว่าคุณจะต้องใช้contr.SAS()หรือกับrelevel()ปัจจัย R ของคุณ


1
ฉันไม่คิดว่าคำตอบนี้ใช้ความเปรียบต่าง -3, -1,1,3 ที่ฉันระบุหรือดูเหมือนว่าจะให้การทดสอบความคมชัด 1 df
russellpierce

@drknexus ใช่คุณพูดถูก เขียนเร็วเกินไป สิ่งที่Anova(lm(DV ~ C(IV, c(-3,-1,1,3),1), data=sample.data), type="III")ควรจะดีกว่า กรุณาแจ้งให้เราทราบว่านี้ตกลงกับคุณ.
chl

ขอบคุณ! ไม่เป็นไรฉันจะตรวจสอบกับ SPSS ในวันพรุ่งนี้และกลับไปหาคุณ
russellpierce

1
BTW ดูที่แพ็คเกจ ez ( cran.r-project.org/web/packages/ez/index.html ) เพื่อห่อรหัส Anova ...
Tal Galili

2
@drknexus: หากมีเพียงหน้าคุณสมบัติการร้องขอและปัญหาการส่งสำหรับ ez ... github.com/mike-lawrence/ez/issues :)
Mike Lawrence

11

นี่อาจดูเหมือนการโปรโมตตัวเองเล็กน้อย (และฉันคิดว่ามันเป็น) แต่ฉันพัฒนาแพ็คเกจlsmeansสำหรับ R (มีให้ใน CRAN) ที่ออกแบบมาเพื่อจัดการกับสถานการณ์แบบนี้ นี่คือวิธีการทำงานสำหรับตัวอย่างของคุณ:

> sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
> sample.aov <- aov(DV ~ factor(IV), data = sample.data)

> library("lsmeans")
> (sample.lsm <- lsmeans(sample.aov, "IV"))
 IV    lsmean        SE df   lower.CL  upper.CL
  1 -3.009669 0.2237448 76 -3.4552957 -2.564043
  2 -3.046072 0.2237448 76 -3.4916980 -2.600445
  3  1.147080 0.2237448 76  0.7014539  1.592707
  4  3.049153 0.2237448 76  2.6035264  3.494779

> contrast(sample.lsm, list(mycon = c(-3,-1,1,3)))
 contrast estimate       SE df t.ratio p.value
 mycon    22.36962 1.000617 76  22.356  <.0001

คุณสามารถระบุความแตกต่างเพิ่มเติมในรายการหากคุณต้องการ สำหรับตัวอย่างนี้คุณจะได้ผลลัพธ์เดียวกันกับความคมชัดเชิงพหุนามเชิงเส้นในตัว:

> con <- contrast(sample.lsm, "poly")
> con
 contrast   estimate        SE df t.ratio p.value
 linear    22.369618 1.0006172 76  22.356  <.0001
 quadratic  1.938475 0.4474896 76   4.332  <.0001
 cubic     -6.520633 1.0006172 76  -6.517  <.0001

เพื่อยืนยันสิ่งนี้โปรดทราบว่า"poly"ข้อมูลจำเพาะนำไปสู่การโทรpoly.lsmcซึ่งจะสร้างผลลัพธ์เหล่านี้:

> poly.lsmc(1:4)
  linear quadratic cubic
1     -3         1    -1
2     -1        -1     3
3      1        -1    -3
4      3         1     1

หากคุณต้องการที่จะทำการทดสอบร่วมกันของหลายความแตกต่างให้ใช้ฟังก์ชั่นtest joint = TRUEตัวอย่างเช่น,

> test(con, joint = TRUE)

สิ่งนี้จะสร้างการทดสอบ "type III" ต่างจากcar::Anova()มันจะทำอย่างถูกต้องโดยไม่คำนึงถึงการเข้ารหัสความคมชัดที่ใช้ในขั้นตอนการปรับรุ่น นี่เป็นเพราะฟังก์ชั่นเชิงเส้นที่ถูกทดสอบถูกระบุโดยตรงมากกว่าโดยนัยผ่านการลดแบบจำลอง คุณลักษณะเพิ่มเติมคือกรณีที่ตรวจพบความแตกต่างที่ขึ้นอยู่กับการตรวจจับเชิงเส้นและสถิติการทดสอบที่ถูกต้องและองศาความเป็นอิสระถูกสร้างขึ้น


10

คุณอาจต้องการดูโพสต์บล็อกนี้:

การได้รับ ANOVA เดียวกันส่งผลให้ R เหมือนกับใน SPSS - ปัญหากับผลบวกของ Type II และ Type III ของกำลังสอง

( สปอยเลอร์:เพิ่มoptions(contrasts=c("contr.sum", "contr.poly"))ที่จุดเริ่มต้นของสคริปต์ของคุณ)


บันทึกข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบข้อต่อในคำตอบของ rvl
rvl

7

เมื่อคุณทำสิ่งที่ตรงกันข้ามคุณกำลังทำชุดค่าผสมของเซลล์แบบเส้นตรงที่ระบุไว้ภายในบริบทของคำที่ผิดพลาดที่เหมาะสม ดังนั้นแนวคิดของ "ประเภทของ SS" จึงไม่มีความหมายกับความแตกต่าง ความแตกต่างแต่ละอย่างนั้นโดยพื้นฐานแล้วจะเป็นเอฟเฟกต์แรกโดยใช้ Type I SS "ประเภทของเอสเอส" เกี่ยวข้องกับสิ่งที่แบ่งออกหรือนำไปใช้โดยข้อกำหนดอื่น ๆ สำหรับความแตกต่างไม่มีอะไรเป็นส่วนหนึ่งออกมาหรือคิดเป็น ความคมชัดยืนอยู่คนเดียว


คุณพูดถูก
russellpierce

3

ความจริงที่ว่าการทดสอบประเภท III ถูกนำมาใช้ในสถานที่ทำงานของคุณนั้นเป็นเหตุผลที่อ่อนแอที่สุดในการใช้งานต่อไป SAS ได้สร้างความเสียหายอย่างใหญ่หลวงต่อสถิติในเรื่องนี้ อรรถกถาของ Bill Venables อ้างอิงถึงข้างต้นเป็นแหล่งข้อมูลที่ดีเกี่ยวกับเรื่องนี้ เพียงแค่บอกว่าไม่ให้พิมพ์ III; มันขึ้นอยู่กับความคิดที่ผิดพลาดของความสมดุลและมีพลังงานที่ลดลงเนื่องจากการถ่วงน้ำหนักของเซลล์ในกรณีที่ไม่สมดุล

วิธีที่เป็นธรรมชาติมากขึ้นและมีข้อผิดพลาดได้ง่ายกว่าน้อยกว่าในการรับความเปรียบต่างทั่วไปและเพื่อให้สามารถอธิบายสิ่งที่คุณทำมีให้โดยฟังก์ชั่นrmsแพคเกจR contrast.rmsความแตกต่างอาจมีความซับซ้อนมาก แต่สำหรับผู้ใช้นั้นง่ายมากเพราะมีการระบุไว้ในแง่ของความแตกต่างในค่าการทำนาย รองรับการทดสอบและความเปรียบต่างพร้อมกัน สิ่งนี้จัดการกับผลกระทบการถดถอยแบบไม่เชิงเส้น, ผลกระทบแบบปฏิสัมพันธ์แบบไม่เชิงเส้น, ความแตกต่างบางส่วน, ทุกสิ่ง


นั่นคือทั้งหมดที่ดีและดีสำหรับคุณในฐานะบุคคลที่มีชื่อเสียงที่จะพูด คนอื่นไม่มีอิทธิพลที่จะไม่เห็นด้วยกับผู้ตรวจสอบ เนื่องจากการตีความสถิติแตกต่างกันคุณจะขอให้ชาวบ้านใหม่ยืนบนหลักการและมีค่าใช้จ่ายที่ไม่สมเหตุสมผล ฉันบอกว่าในฐานะคนที่เสียสละเวลาของฉันบนยอดเขา (และที่คล้ายกัน) นี้ การเปลี่ยนแปลง IMO ในหน้านี้เป็นความรับผิดชอบของผู้รักษาประตูคือบรรณาธิการและผู้ตรวจสอบ
russellpierce

ผู้ที่มีข้อมูลที่ดีจริงๆมีงานให้เลือกมากมายและอาจมีทางเลือกในการทำงานในด้านที่มีทักษะและความคิดเห็นเป็นที่เคารพนับถือ
Frank Harrell

1
... และนั่นคือสิ่งที่ฉันทำตอนนี้ แต่คนที่มาถึงคำถามนี้จะไม่อยู่ในชั้นเรียนนั้นบ่อย อย่างที่ฉันไม่ได้ 7 ปีก่อน ฉันเพียง แต่สนับสนุนให้เห็นอกเห็นใจต่อมือใหม่และสภาพแวดล้อม
russellpierce

2

ลองใช้คำสั่ง Anova ในห้องสมุดรถยนต์ ใช้อาร์กิวเมนต์ type = "III" เนื่องจากค่าเริ่มต้นคือ type II ตัวอย่างเช่น:

library(car)
mod <- lm(conformity ~ fcategory*partner.status, data=Moore, contrasts=list(fcategory=contr.sum, partner.status=contr.sum))
Anova(mod, type="III")

3
ฉันรู้ว่ามัวร์อยู่ในห้องสมุดรถยนต์ แต่เมื่อให้ข้อมูลตัวอย่างมันจะง่ายกว่าสำหรับผู้ถามคำถามที่จะเข้าใจคำตอบของคุณถ้าคุณใช้ข้อมูลตัวอย่าง
russellpierce

0

นอกจากนี้การส่งเสริมตนเองฉันเขียนฟังก์ชั่นสำหรับสิ่งนี้: https://github.com/samuelfranssens/type3anova

ติดตั้งดังนี้:

library(devtools)
install_github(samuelfranssens/type3anova)
library(type3anova)

sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))

type3anova(lm(DV ~ IV, data = sample.data))

คุณจะต้องมีcarแพ็คเกจที่ติดตั้ง


คุณจะใช้สิ่งนี้กับส่วนต่างของคำถามอย่างไร
russellpierce

1
ขอโทษฉันไม่ได้อ่านคำถามอย่างถูกต้อง ฟังก์ชั่นของฉันจะลดความซับซ้อนของการดำเนินการประเภทที่สาม Anova เท่านั้น เช่นเดียวกับ StatGuy ด้านบนฉันไม่เห็นว่า SS เข้ามาเล่นเมื่อทดสอบความแตกต่างที่เฉพาะเจาะจง
sam_f
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.