พิจารณารหัส 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
จะยิ่งใหญ่กว่าเมื่อค่าที่coef(example(n))["X"]
ใกล้กว่า 0 แต่ ...
- ทำไมถึงมีค่าเลย?
- อะไรคือสิ่งที่กำหนดเป็นพิเศษ?
- ทำไมความก้าวหน้าของ
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; ประมาณครึ่งหนึ่งเป็นศูนย์จริง) BTW แหล่ง Fortran ไม่มีความช่วยเหลือ: มันเป็นเพียงเสื้อคลุมสำหรับ dqrdc; นั่นคือรหัสที่คุณต้องการดู