2012-02-11 44 views
6

xem xét mã R sau (trong đó, tôi nghĩ, cuối cùng gọi một số Fortran):Tại sao lm trả lại giá trị khi không có sự sai khác trong giá trị được dự đoán?

X <- 1:1000 
Y <- rep(1,1000) 
summary(lm(Y~X)) 

Tại sao các giá trị được trả về bởi tóm tắt? Mô hình này không phù hợp vì không có sự khác biệt trong Y? Quan trọng hơn, tại sao mô hình R^2 ~ = .5?

Sửa

tôi theo dõi các mã từ lm để lm.fit và có thể nhìn thấy cuộc gọi này:

z <- .Fortran("dqrls", qr = x, n = n, p = p, y = y, ny = ny, 
    tol = as.double(tol), coefficients = mat.or.vec(p, ny), residuals = y, 
    effects = y, rank = integer(1L), pivot = 1L:p, qraux = double(p), 
    work = double(2 * p), PACKAGE = "base") 

Đó là nơi phù hợp với thực tế dường như xảy ra. Nhìn vào số http://svn.r-project.org/R/trunk/src/appl/dqrls.f) không giúp tôi hiểu chuyện gì đang xảy ra, bởi vì tôi không biết fortran.

+1

Ah, R^2 trong tổng số 0,5 là một câu hỏi khá thú vị. – Iterator

+0

Tôi nghĩ tôi sẽ vứt nó thành một câu hỏi riêng ... – russellpierce

Trả lời

5

Nói theo thống kê, chúng tôi nên dự đoán điều gì (Tôi muốn nói "mong đợi", nhưng đó là một thuật ngữ rất cụ thể ;-))? Các hệ số phải là (0,1), thay vì "không phù hợp". Hiệp phương sai của (X, Y) được giả định tỷ lệ thuận với phương sai của X, không phải theo cách khác. Vì X có phương sai khác không, không có vấn đề gì. Khi hiệp phương sai là 0, hệ số ước tính cho X phải bằng 0. Vì vậy, trong dung sai máy, đây là câu trả lời bạn nhận được.

Không có bất thường thống kê nào ở đây. Có thể có một sự hiểu lầm thống kê. Ngoài ra còn có vấn đề về dung sai máy, nhưng một hệ số theo thứ tự của 1E-19 là khá không đáng kể, với quy mô của giá trị dự báo và đáp ứng.

Cập nhật 1: Có thể tìm thấy đánh giá nhanh về hồi quy tuyến tính đơn giản trên this Wikipedia page. Điều quan trọng cần lưu ý là Var(x) là mẫu số, Cov(x,y) trong tử số. Trong trường hợp này, tử số là 0, mẫu số không khác, vì vậy không có lý do gì để mong đợi một số NaN hoặc NA. Tuy nhiên, người ta có thể hỏi tại sao không phải là hệ số kết quả cho x một 0 và điều đó phải thực hiện với các vấn đề về độ chính xác số của quá trình phân hủy QR.

+0

Tôi thấy (các) điểm của bạn. Dung sai máy gần với 1E-17 đối với các vấn đề N nhỏ hơn, nhưng vẫn 'không đáng kể'. Tôi đoán tôi mong đợi các chức năng chỉ đơn giản là thất bại như nó khi N = 4 (nhưng một lần nữa, (với tôi) kỳ quặc không thất bại cho N = 3). – russellpierce

2

Tôi tin rằng điều này đơn giản chỉ vì phân tách QR được thực hiện với số học dấu chấm động.

Thông số singular.ok thực sự đề cập đến ma trận thiết kế (nghĩa là chỉ X). Hãy thử

lm.fit(cbind(X, X), Y) 

vs

lm.fit(cbind(X, X), Y, singular.ok=F) 
2

Tôi đồng ý rằng vấn đề có thể là điểm nổi. nhưng tôi không nghĩ là kỳ dị.

nếu bạn kiểm tra sử dụng solve(t(x1)%*%x1)%*%(t(x1)%*%Y) thay vì QR, (t(x1)%*%x1) không phải là số ít

sử dụng x1 = cbind(rep(1,1000,X)lm(Y~X) bao gồm đánh chặn.

Các vấn đề liên quan