2

結果としてNAを取得しています。私は何を間違っていますか?

data(Boston, package='MASS')

x <- Boston$dis
y <- Boston$nox
n <- length(x)
cvs <- rep(0, n)

for(i in 1:n){
 xi <- x[-i]
 yi <- y[-i]
 d <- loess(yi~xi, span=0.2, degree=2)
 cvs[i] <- (y[i] - predict(d, newdata=data.frame(xi=x[i])))^2
}

mean(cvs)
4

3 に答える 3

2
mean(cvs,na.rm=TRUE)
[1] 0.003753745

plot(y~x)
lines( d$x[order(d$x)], d$fitted[order(d$x)])
which(is.na(d$fitted[order(d$x)]) )
#integer(0)

NA が x 範囲の両端にあることがわかります。

#add as debugging code
if(is.na(cvs[i]) ) {print(i);print(x[i])}}
[1] 354
[1] 12.1265
[1] 373
[1] 1.1296

 range(x)
#[1]  1.1296 12.1265

しかし、私はまだ理由を理解していません:

(y[ which(is.na(cvs)) ]-predict(d, x[ which(is.na(cvs)) ] ))^2
[1] 3.218139e-06 3.742504e-04
于 2013-10-31T02:07:03.720 に答える
1

などの集計関数は、デフォルトでは値をmean許可しませんが、結果ベクトルにはいくつかあります。NA

which(is.na(cvs))
## [1] 354 373

それらがどこから来たのかはわかりませんが、を渡すことでmean関数が値を受け入れるようにすることができます。NAna.rm=TRUE

于 2013-10-31T00:46:13.917 に答える