45# 可爱的河马
#标准正太核函数
kernel.normal <- function(u){ y <- ifelse(abs(u)>=1,0, (1 - abs(u)^3)^3)}
根据你的说法,把上面一行删除,程序运行出来的结果与以前一样,
结果如下: 这是为什么?希望指教,谢谢!
> y<-c(1510.2,1700.6,2026.6,2577.4,3496.2,4283,4838.9,5160.3,5425.1,5854,6280,6859.6,7702.8,8472.2,9421.6,10493,11759.5,13785.8,15780.8,17174.7)
> x<-c(1278.89,1453.81,1671.73,2110.81,2851.34,3537.57,3919.47,4185.64,4331.61,4615.91,4998,5309.01,6029.88,6510.94,7182.1,7942.88,8696.55,9997.47,11242.85,12264.55)
>
>
> #最优窗宽h,
> library("KernSmooth")
> h<-dpill(x, y)
> h
[1] 4474.243
>
> #和回归函数
> kernel.smooth1 <- function(X, Y, kernel, h, plot.it=T){
+ x <- X
+ n<-length(X)
+ fx <- numeric(n)
+ for(j in 1:n){
+
+ fx[j] <- sum(kernel((x[j]-X)/h)*Y) /sum(kernel((x[j]-X)/h))
+ }
+ if(plot.it){
+ plot(X, Y, type="p")
+ lines(x, fx)
+ }
+ fx=fx
+ }
>
> f<-kernel.smooth1(X=x, Y=y, kernel=kernel.normal, h=h)
>
> #非参数回归的拟合值
> y.hat<-f
> y.hat
[1] 3075.116 3211.858 3373.403 3671.418 4144.037 4627.864 4941.489
[8] 5185.778 5327.592 5620.397 6039.715 6379.198 7084.285 7586.481
[15] 8434.089 9680.494 11034.642 13168.157 14707.591 15632.828
>
> #均方误差
> mse<-mean((y.hat-y)^2)
> mse
[1] 794223.4