R功能无输出黄土跨度

时间:2014-07-25 16:12:52

标签: r function output loess

所以我写了一个函数,它应该找到loess函数的范围,该函数对应于等式的自由度:

m <- function(x) x+4*cos(7*x)
x<-seq(-1,1,length=101)

找到我使用单位矩阵的自由度

y<-diag(101)
slp<-matrix(0,nrow=101,ncol=101)
snw<- is the hat matrix

这里是我的函数,我希望它输出的范围大约等于帽子矩阵snw中的相同自由度(对角线的总和)

y<-diag(101)
dflp<-function(span,value)
       {
        for(q in 1:301)
          {          
          for(i in 1:101)
            {
            slp[,i]<-predict(loess(y[,i]~x,span=span[q]),newdata=x)
            }
          if(sum(diag(slp))-value==0)
            {
             cat("span:",format(span[q]),"\n")
             break
            }
          }
        }

它似乎没有输出任何东西,q的值总是7。

谢谢。

注意:这不是作业。

1 个答案:

答案 0 :(得分:1)

您的逻辑似乎没有任何问题。您正在对多个候选span执行网格搜索。当结果自由度与snw给出的自由度匹配时,您将停止搜索。

您的函数dflp没有返回值,因为您的函数末尾没有return(span[q])

我会给出的另一个建议,类似于上面的评论。 “收敛”永远不会被精确的0判断,而是达到一定的容差。通常我们使用相对容差:

abs(diag(slp)-value) / value < 1e-6  ## tol = 1e-6