Hãy xem xét mã R sau đây:
example <- function(n) {
X <- 1:n
Y <- rep(1,n)
return(lm(Y~X))
}
#(2.13.0, i386-pc-mingw32)
summary(example(7)) #R^2 = .1963
summary(example(62)) #R^2 = .4529
summary(example(4540)) #R^2 = .7832
summary(example(104))) #R^2 = 0
#I did a search for n 6:10000, the result for R^2 is NaN for
#n = 2, 4, 16, 64, 256, 1024, 2085 (not a typo), 4096, 6175 (not a typo), and 8340 (not a typo)
Nhìn vào 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, vì tôi không biết Fortran. Trong một câu hỏi khác, người ta đã trả lời rằng các lỗi dung sai của dấu phẩy động là lỗi cho các hệ số của X gần với, nhưng không hoàn toàn bằng 0.
lớn hơn khi giá trị cho coef(example(n))["X"]
gần bằng 0. Nhưng ...
- Tại sao có giá trị ?
- Điều gì (cụ thể) là xác định nó?
- Tại sao sự tiến bộ dường như có trật tự
NaN
? - Tại sao vi phạm tiến trình đó?
- Hành vi 'mong đợi' này là gì?
Y <- rep(1,n)+runif(n)*ynoise
), điều đó sẽ rất thú vị :-)
apply(as.matrix(2:17), 1, function(n){example(n)$coefficients[-1]})
. (Kết quả của tôi, trên Win 7 x64 Xeon, dao động từ -8e-17 đến + 3e-16; khoảng một nửa là số không thực.) BTW, nguồn Fortran không giúp ích gì: nó chỉ là một trình bao bọc cho dqrdc; đó là mã bạn muốn xem.