Considera il seguente codice 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)
Guardare http://svn.r-project.org/R/trunk/src/appl/dqrls.f ) non mi ha aiutato a capire cosa sta succedendo, perché non conosco Fortran. In un'altra domanda è stato risposto che gli errori di tolleranza della macchina in virgola mobile sono la causa dei coefficienti per X che sono vicini, ma non del tutto 0.
è maggiore quando il valore per coef(example(n))["X"]è più vicino a 0. Ma ...
- Perché esiste un valore ?
- Cosa (specificamente) lo sta determinando?
- Perché la progressione apparentemente ordinata dei
NaNrisultati? - Perché le violazioni di tale progressione?
- Che cosa è questo comportamento "previsto"?
Y <- rep(1,n)+runif(n)*ynoise), sarebbe interessante :-)
apply(as.matrix(2:17), 1, function(n){example(n)$coefficients[-1]}). (I miei risultati, su Win 7 x64 Xeon, vanno da -8e-17 a + 3e-16; circa la metà sono veri zeri.) A proposito, la fonte Fortran non è di alcun aiuto: è solo un wrapper per dqrdc; questo è il codice che vuoi guardare.