เหตุใด R's lm () จึงส่งกลับค่าสัมประสิทธิ์ที่แตกต่างจากตำราของฉัน


13

พื้นหลัง

ฉันพยายามที่จะเข้าใจตัวอย่างแรกในหลักสูตรเกี่ยวกับแบบจำลองที่เหมาะสม (ดังนั้นนี่อาจดูเรียบง่ายอย่างน่าหัวเราะ) ฉันทำการคำนวณด้วยมือและพวกมันจับคู่ตัวอย่าง แต่เมื่อฉันทำซ้ำใน R สัมประสิทธิ์ของโมเดลจะดับ ฉันคิดว่าความแตกต่างอาจเกิดจากหนังสือเรียนที่ใช้ความแปรปรวนประชากร ( ) ในขณะที่ R อาจใช้ความแปรปรวนตัวอย่าง ( ) แต่ฉันไม่เห็นว่าจะใช้ที่ใดในการคำนวณ ตัวอย่างเช่นหาก ใช้บางส่วนส่วนช่วยเหลือในบันทึกย่อ:S 2σ2S2lm()var()var()

ตัวส่วน n - 1 ถูกใช้ซึ่งให้ค่าประมาณที่ไม่เอนเอียงของความแปรปรวน (ร่วม) สำหรับการสังเกต iid

ฉันดูที่รหัสสำหรับทั้งlm()และlm.fit()และไม่ใช้var()แต่lm.fit()ส่งผ่านข้อมูลนั้นเพื่อรวบรวมรหัส C ( z <- .Call(C_Cdqrls, x, y, tol, FALSE)) ซึ่งฉันไม่สามารถเข้าถึงได้

คำถาม

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

ข้อมูล

พอดีกับเส้นเพื่อทำนายขนาดรองเท้าจากเกรดในโรงเรียน

# model data
mod.dat <- read.table(
    text = 'grade shoe
                1    1
                2    5
                4    9'
    , header = T);

# mean
mod.mu  <- mean(mod.dat$shoe);
# variability 
mod.var <- sum((mod.dat$shoe - mod.mu)^2)

# model coefficients from textbook
mod.m  <- 8/3;
mod.b  <- -1;

# predicted values  ( 1.666667 4.333333 9.666667 )
mod.man.pred       <- mod.dat$grade * mod.m + mod.b;
# residuals         ( -0.6666667  0.6666667 -0.6666667 )
mod.man.resid      <- (mod.dat$shoe - mod.man.pred)
# residual variance ( 1.333333 )
mod.man.unexpl.var <- sum(mod.man.resid^2);
# r^2               ( 0.9583333 )
mod.man.expl.var   <- 1 - mod.man.unexpl.var / mod.var;

# but lm() gives different results:
summary(lm(shoe ~ grade, data = mod.dat))
Call:
lm(formula = shoe ~ grade, data = mod.dat)

Residuals:
      1       2       3 
-0.5714  0.8571 -0.2857 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  -1.0000     1.3093  -0.764    0.585
grade         2.5714     0.4949   5.196    0.121

Residual standard error: 1.069 on 1 degrees of freedom
Multiple R-squared:  0.9643,    Adjusted R-squared:  0.9286 
F-statistic:    27 on 1 and 1 DF,  p-value: 0.121

แก้ไข

ดังที่เบ็ลโบลเคอร์แสดงแล้วดูเหมือนว่าครูบางครั้งทำผิดพลาด ดูเหมือนว่าการคำนวณ R นั้นถูกต้อง คุณธรรมของเรื่องราว: อย่าเชื่ออะไรเลยเพียงเพราะครูบอกว่ามันเป็นเรื่องจริง ยืนยันด้วยตัวคุณเอง!


2
ตรวจสอบmod.m=8/3อีกครั้ง เพราะถ้าคุณตั้งค่าmod.m=2.5714แล้วพวกเขาดูเหมือนจะเหมือนกัน
สถิติ

2
สัมประสิทธิ์ mod.m = 8/3 และ mod.b = -1 จะไม่ถูกคำนวณในความคิดเห็นเท่าที่ฉันเข้าใจดังนั้นจึงไม่ชัดเจน ในฐานะที่เป็นความคิดเห็น @Stat ข้างต้นดูเหมือนว่าข้อผิดพลาดในการคำนวณ mod
Juho Kokkala

2
โปรดทราบว่าทุกคนสามารถทำผิดพลาดได้ - คุณครูคุณผู้ตอบคำถามที่นี่โปรแกรมเมอร์ R ทุกคน ดังนั้นเมื่อพยายามที่จะหาข้อผิดพลาดที่อาจเกิดขึ้นเมื่อสิ่งที่ไม่เห็นด้วยให้พิจารณาจำนวนคนอื่นที่กำลังตรวจสอบแต่ละสิ่ง ในกรณีของlmฟังก์ชันใน R ผู้คนนับหมื่นตรวจสอบผลลัพธ์โดยการเปรียบเทียบกับสิ่งอื่น ๆ และผลลัพธ์ของlmการตรวจสอบกับตัวอย่างที่รู้จักกันทุกครั้งที่มีการเปลี่ยนแปลงอะไรในรหัส ด้วยคำตอบที่นี่อย่างน้อยคนสองสามคนมีแนวโน้มที่จะตรวจสอบ (คำถามของคุณถูกมองครั้งที่ 29)
Glen_b -Reinstate Monica

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

2
ใช่มันเป็นเรื่องสำคัญที่จะต้องพยายามหาสาเหตุที่แตกต่างกัน มันสมเหตุสมผลที่จะถามที่นี่ถ้าคุณไม่สามารถทำงานได้ ฉันพยายามแนะนำว่าทำไมสถานที่สุดท้ายที่คุณพิจารณาอาจเป็นหนึ่งในสถานที่แรกที่มองหา ฉันถูกจับโดยทำการเปลี่ยนแปลงใน 'นาที' ในนาทีสุดท้ายในตัวอย่างหนึ่งหรือสองครั้งด้วยตนเอง
Glen_b -Reinstate Monica

คำตอบ:


25

ดูเหมือนว่าผู้เขียนทำผิดพลาดทางคณิตศาสตร์ที่ไหนสักแห่ง

หากคุณขยายส่วนเบี่ยงเบนผลรวมของกำลังสอง

S=((b+m)1)2+((b+2m)5)2+((b+4m)9)2
S=b2+2bm+m2+12b2m+b2+4bm+4m2+2510b20m+b2+8bm+16m2+8118b72m

32+14ม.+21ม.2+107-30-94ม.

Sม.

dS/d=6+14ม.-303+7ม.-15=0
dS/dม.=14+42ม.-947+21ม.-47=0

แก้

=(15-7ม.)/30=7(15-7ม.)/3+21ม.-4747-35=(-49/3+21)ม.ม.=(47-35)/(21-49/3)=18/7

R บอกว่านี่คือ 2.571429 แน่นอน ...

จากลิงค์นี้ดูเหมือนว่าจะมาจากหลักสูตร Coursera ... ? อาจมีการถอดความข้อมูลผิดที่หรือไม่

Σ(Y-Y¯)(x-x¯)Σ(x-x¯)2

g <- c(1,2,4)
g0 <- g - mean(g)
s <- c(1,5,9)
s0 <- s- mean(s)
sum(g0*s0)/(sum(g0^2))
## [1] 2.571429

{1,11/3,9}{1,5,9}


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

ฉันไม่คิดว่าเทอมคงที่จะตัดการคำนวณออกไป มันจะไม่ส่งผลกระทบต่อการประมาณการของความชันและการสกัดกั้น (มันจะหายไปเมื่อเราหาอนุพันธ์) เพียงแค่การประมาณค่า SSQ / ค่าเบี่ยงเบนมาตรฐาน
Ben Bolker
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.