对于lm
或glm
类型的对象,甚至是lmer
类型的对象,可以使用R函数hatvalues()
从模型中提取帽子值。但是,显然这不适用于nls
对象。我已经用谷歌搜索了所有的方法,但我找不到一种方法来获得这些值。难道nls
根本没有创建一个帽子矩阵,或者从非线性最小二乘模型中产生的帽子值只是不可靠吗?
可重复的示例:
xs = rep(1:10, times = 10)
ys = 3 + 2*exp(-0.5*xs)
for (i in 1:100) {
xs[i] = rnorm(1, xs[i], 2)
}
df1 = data.frame(xs, ys)
nls1 = nls(ys ~ a + b*exp(d*xs), data=df1, start=c(a=3, b=2, d=-0.5))
1条答案
按热度按时间dohp0rv51#
有一个很好的article(On the outlier Detection in Nonlinear Regression),其中帽子矩阵近似于在估计点计算的梯度矩阵。
在您的案例中:
如果你遵循这个article,你可以更快地计算
H
:由于
H
可能很大,如果你只想要帽子值,你可以跳过矩阵乘法。我们只需要H
矩阵的对角线。