พื้นหลัง
ฉันพยายามที่จะเข้าใจตัวอย่างแรกในหลักสูตรเกี่ยวกับแบบจำลองที่เหมาะสม (ดังนั้นนี่อาจดูเรียบง่ายอย่างน่าหัวเราะ) ฉันทำการคำนวณด้วยมือและพวกมันจับคู่ตัวอย่าง แต่เมื่อฉันทำซ้ำใน R สัมประสิทธิ์ของโมเดลจะดับ ฉันคิดว่าความแตกต่างอาจเกิดจากหนังสือเรียนที่ใช้ความแปรปรวนประชากร ( ) ในขณะที่ R อาจใช้ความแปรปรวนตัวอย่าง ( ) แต่ฉันไม่เห็นว่าจะใช้ที่ใดในการคำนวณ ตัวอย่างเช่นหาก
ใช้บางส่วนส่วนช่วยเหลือในบันทึกย่อ:S 2lm()
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 นั้นถูกต้อง คุณธรรมของเรื่องราว: อย่าเชื่ออะไรเลยเพียงเพราะครูบอกว่ามันเป็นเรื่องจริง ยืนยันด้วยตัวคุณเอง!
lm
ฟังก์ชันใน R ผู้คนนับหมื่นตรวจสอบผลลัพธ์โดยการเปรียบเทียบกับสิ่งอื่น ๆ และผลลัพธ์ของlm
การตรวจสอบกับตัวอย่างที่รู้จักกันทุกครั้งที่มีการเปลี่ยนแปลงอะไรในรหัส ด้วยคำตอบที่นี่อย่างน้อยคนสองสามคนมีแนวโน้มที่จะตรวจสอบ (คำถามของคุณถูกมองครั้งที่ 29)
mod.m=8/3
อีกครั้ง เพราะถ้าคุณตั้งค่าmod.m=2.5714
แล้วพวกเขาดูเหมือนจะเหมือนกัน