Розглянемо наступний код R:
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)
Перегляд http://svn.r-project.org/R/trunk/src/appl/dqrls.f ) не допоміг мені зрозуміти, що відбувається, бо я не знаю Fortran. В іншому запитанні було дано відповідь, що помилки допуску машини з плаваючою комою винні в коефіцієнтах X, близьких до, але не зовсім 0.
більше, коли значення дляближче до 0. Але ...coef(example(n))["X"]
- Чому взагалі існує значення ?
- Що (конкретно) це визначає?
- Чому, здавалося б, впорядковане прогресування
NaN
результатів? - Чому порушення цієї прогресії?
- Що з цього - "очікувана" поведінка?
Y <- rep(1,n)+runif(n)*ynoise
), це було б цікаво :-)
apply(as.matrix(2:17), 1, function(n){example(n)$coefficients[-1]})
. (Мої результати на Win 7 x64 Xeon, коливаються від -8e-17 до + 3e-16; приблизно половина - справжні нулі.) До речі, джерело Fortran не допомагає: це просто обгортка для dqrdc; це код, який ви хочете подивитися.