Tại sao R's lm () trả về các ước tính hệ số khác với sách giáo khoa của tôi?


13

Lý lịch

Tôi đang cố gắng để hiểu ví dụ đầu tiên trong một khóa học về các mô hình phù hợp (vì vậy điều này có vẻ đơn giản đến mức lố bịch). Tôi đã thực hiện các phép tính bằng tay và chúng khớp với ví dụ, nhưng khi tôi lặp lại chúng trong R, các hệ số mô hình bị tắt. Tôi nghĩ rằng sự khác biệt có thể là do sách giáo khoa sử dụng phương sai dân số ( ) trong khi R có thể sử dụng phương sai mẫu ( ), nhưng tôi không thể thấy chúng được sử dụng ở đâu trong các tính toán. Ví dụ: nếu sử dụng ở đâu đó, phần trợ giúp về ghi chú:σ2S2lm()var()var()

Mẫu số n - 1 được sử dụng để đưa ra một ước lượng không thiên vị của phương sai (đồng) cho các quan sát iid.

Tôi đã xem xét mã cho cả hai lm()lm.fit()không sử dụng var(), nhưng lm.fit()chuyển dữ liệu đó sang mã C được biên dịch ( z <- .Call(C_Cdqrls, x, y, tol, FALSE)) mà tôi không có quyền truy cập.

Câu hỏi

Bất cứ ai có thể giải thích tại sao R cho kết quả khác nhau? Ngay cả khi có sự khác biệt trong việc sử dụng mẫu so với phương sai dân số, tại sao các ước tính hệ số lại khác nhau?

Dữ liệu

Lắp một đường để dự đoán cỡ giày từ lớp trong trường.

# 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

Biên tập

Như Ben Bolker đã chỉ ra, đôi khi có vẻ như giáo viên mắc lỗi. Có vẻ như tính toán R là chính xác. Đạo đức của câu chuyện: đừng tin điều gì đó chỉ vì một giáo viên nói đó là sự thật. Xác nhận nó cho chính mình!


2
Kiểm tra lại mod.m=8/3. Bởi vì nếu bạn đặt mod.m=2.5714, thì chúng dường như giống hệt nhau.
Thống kê

2
Các hệ số mod.m = 8/3 và mod.b = -1 không được tính toán ở bất kỳ đâu trong các nhận xét theo như tôi hiểu, vì vậy nó không rõ ràng. Như @Stat bình luận ở trên, lỗi dường như là ở máy tính mod.m.
Juho Kokkala

2
Điều quan trọng cần ghi nhớ là bất kỳ ai cũng có thể mắc lỗi - giáo viên của bạn, bạn, người trả lời ở đây, lập trình viên R - bất kỳ ai. Vì vậy, khi cố gắng tìm ra lỗi lầm có thể nằm ở đâu khi mọi thứ không đồng ý, hãy xem xét có bao nhiêu người khác đang kiểm tra từng thứ. Trong trường hợp lmhàm trong R, theo nghĩa đen, hàng chục nghìn người đã kiểm tra kết quả bằng cách so sánh chúng với những thứ khác và đầu ra của lmđược kiểm tra so với các ví dụ đã biết mỗi khi có bất kỳ thay đổi nào trong mã. Với câu trả lời ở đây, ít nhất một vài người có khả năng kiểm tra (câu hỏi của bạn đã được xem xét 29 lần).
Glen_b -Reinstate Monica

1
@Glen_b Quan điểm của bạn thực sự là lý do tại sao tôi đến đây để hỏi. Tôi không thể hiểu làm thế nào R có thể sai trên một phép tính cơ bản như vậy, nhưng tôi không thể hiểu tại sao chúng lại khác nhau. Tôi sự kiện rình mò xung quanh mã nguồn. Nhưng cuối cùng, lỗi là ở nơi cuối cùng tôi nghĩ là nhìn, chủ yếu là do phần tính toán nằm ở giới hạn kiến ​​thức của tôi. Tôi đã học được rất nhiều từ câu trả lời mặc dù!
hậu hoc

2
Vâng, điều quan trọng là cố gắng tìm hiểu tại sao chúng khác nhau; hỏi ở đây là hợp lý nếu bạn không thể giải quyết nó. Tôi đã cố gắng đề xuất tại sao nơi cuối cùng bạn xem xét có thể thay vào đó là một trong những nơi đầu tiên để tìm. Tôi đã bị bắt gặp khi thực hiện các thay đổi 'đơn giản hóa' vào phút cuối cho các ví dụ trong một hoặc hai lần.
Glen_b -Reinstate Monica

Câu trả lời:


25

Có vẻ như tác giả đã mắc một lỗi toán học ở đâu đó.

Nếu bạn mở rộng độ lệch tổng bình phương

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

3b2+14bm+21m2+10730b94m

Sbm

dS/db= =6b+14m-303b+7m-15= =0
dS/dm= =14b+42m-947b+21m-47= =0

Gỡ rối

b= =(15-7m)/30= =7(15-7m)/3+21m-4747-35= =(-49/3+21)mm= =(47-35)/(21-49/3)= =18/7

R nói rằng đây thực sự là 2.571429 ...

Dựa trên liên kết này có vẻ như là từ một khóa học Coursera ...? Có lẽ đã có sự sao chép sai dữ liệu ở đâu đó?

Σ(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
Ồ Vâng, bạn đúng. Đó là từ một khóa học Coursera và nó từ video, không phải phiên âm. Vì vậy, tôi đoán anh ấy đã đơn giản hóa nó để làm cho các phép tính đơn giản hơn cho video và không mong đợi bất cứ ai thử lặp lại nó. Nó chỉ là video đầu tiên mà tôi thấy nên tôi đã cố gắng theo dõi. Rõ ràng là tôi cần phải nâng cao trình độ khi nói đến toán học. Tôi nghĩ rằng tìm thấy lỗi mặc dù. Thuật ngữ không đổi, mà bạn nói không quan trọng, có lẽ là giá trị chính xác thông qua các tính toán của anh ấy. Tôi sẽ xem qua câu trả lời của bạn một vài lần nữa để dạy bản thân mình. Tôi rất trân trọng điều này!
hậu hoc

Tôi không nghĩ rằng thuật ngữ liên tục sẽ loại bỏ các tính toán. Nó sẽ không ảnh hưởng đến các ước tính về độ dốc và đánh chặn (nó sẽ biến mất khi chúng ta lấy đạo hàm), chỉ các ước tính về SSQ / độ lệch chuẩn còn lại.
Ben Bolker
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.