Betrachten Sie den folgenden R-Code:
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)
Ein Blick auf http://svn.r-project.org/R/trunk/src/appl/dqrls.f ) hat mir nicht geholfen zu verstehen, was los ist, da ich Fortran nicht kenne. In einer anderen Frage wurde beantwortet, dass Gleitkomma-Maschinentoleranzfehler für Koeffizienten für X verantwortlich sind, die nahe, aber nicht ganz 0 sind.
ist größer, wenn der Wert für coef(example(n))["X"]näher bei 0 liegt. Aber ...
- Warum gibt es überhaupt einen Wert?
- Was bestimmt es (konkret)?
- Warum das scheinbar geordnete Fortschreiten der
NaNErgebnisse? - Warum die Verstöße gegen diesen Fortschritt?
- Was ist das "erwartete" Verhalten?
Y <- rep(1,n)+runif(n)*ynoise), wäre das interessant :-)
apply(as.matrix(2:17), 1, function(n){example(n)$coefficients[-1]}). (Meine Ergebnisse auf einem Win 7 x64 Xeon reichen von -8e-17 bis + 3e-16; ungefähr die Hälfte sind echte Nullen.) Übrigens ist die Fortran-Quelle keine Hilfe: Es ist nur ein Wrapper für dqrdc; Das ist der Code, den Sie sich ansehen möchten.