我正在尝试在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/

10-12 19:25