0

所以我写了一个函数,它应该找到与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。

谢谢你。

注意:这不是家庭作业。

4

1 回答 1

1

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

您没有从您的 function 获得返回值,因为您在函数末尾dflp缺少 a 。return(span[q])

我要给出的另一个建议类似于上面的评论。“收敛”从不通过精确的 0 来判断,但可以达到一定的容差。通常我们使用相对容差:

abs(diag(slp)-value) / value < 1e-6  ## tol = 1e-6
于 2016-09-02T10:59:24.270 回答