所以我写了一个函数,它应该找到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。
谢谢。
注意:这不是作业。
答案 0 :(得分:1)
您的逻辑似乎没有任何问题。您正在对多个候选span
执行网格搜索。当结果自由度与snw
给出的自由度匹配时,您将停止搜索。
您的函数dflp
没有返回值,因为您的函数末尾没有return(span[q])
。
我会给出的另一个建议,类似于上面的评论。 “收敛”永远不会被精确的0判断,而是达到一定的容差。通常我们使用相对容差:
abs(diag(slp)-value) / value < 1e-6 ## tol = 1e-6