我正在尝试在R中编写一个简单的迭代加权最小二乘算法。我想将一个函数作为参数来计算权重,但不幸的是R提示找不到该函数。有什么想法我做错了吗?提前致谢!
这是我的代码:
irls <- function(imodel, wfunc, tol) {
repeat {
b0 <- imodel$coef
imodel <- lm(formula(imodel), weights=wfunc(imodel), data=imodel$model)
b1 <- imodel$coef
if(abs((b1-b0)/b0)<=tol) break
}
imodel
}
还有一个愚蠢的例子来演示这个问题
x <- 1:100
y <- x + rnorm(100)
mlm <- lm(y~x-1)
irls(mlm, function(x){rep(1,length(x$fit))},0.001) # error: wfunc not found
最佳答案
问题与lm如何查找数据有关。如果您将功能更改为此,它似乎可以工作
irls <- function(imodel, wfunc, tol) {
repeat {
b0 <- imodel$coef
dat <- imodel$model
dat$wts <- wfunc(imodel)
imodel <- lm(formula(imodel), weights=wts, data=dat)
b1 <- imodel$coef
if(abs((b1-b0)/b0)<=tol) break
}
imodel
}
关于R:找不到作为参数传递的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18383187/