Considérez le code R suivant:
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)
Regarder http://svn.r-project.org/R/trunk/src/appl/dqrls.f ) ne m'a pas aidé à comprendre ce qui se passe, car je ne connais pas Fortran. Dans une autre question, il a été répondu que les erreurs de tolérance de la machine à virgule flottante étaient à blâmer pour les coefficients pour X qui sont proches, mais pas tout à fait de 0.
est supérieur lorsque la valeur de coef(example(n))["X"]est plus proche de 0. Mais ...
- Pourquoi y a-t-il une valeur ?
- Qu'est-ce (spécifiquement) qui le détermine?
- Pourquoi la progression apparemment ordonnée des
NaNrésultats? - Pourquoi les violations de cette progression?
- Qu'en est-il du comportement «attendu»?
Y <- rep(1,n)+runif(n)*ynoise), ce serait intéressant :-)
apply(as.matrix(2:17), 1, function(n){example(n)$coefficients[-1]}). (Mes résultats, sur un Win 7 x64 Xeon, vont de -8e-17 à + 3e-16; environ la moitié sont de vrais zéros.) BTW, la source Fortran ne sert à rien: c'est juste un wrapper pour dqrdc; c'est le code que vous voulez regarder.