lm 权重和标准误

机器算法验证 回归
2022-04-07 16:39:32

我对 R 相当陌生,但在其他语言以及物理科学的数据分析方面经验丰富。我有一个问题,将使用直线拟合来说明lm()

在物理科学中,如果因变量 (y) 具有明确的不确定性(也称为误差)并且这些不确定性都具有相同的值,那么如果我们拟合为一条直线,则斜率和截距的值不变,但不确定性如果数据没有明确的不确定性,斜率和截距将有所不同。我找不到正确的 R 拟合例程。我已经编写了在 C、Mathematica、Maple 和 LabView 中做正确事情的钳工,但希望避免在 R 中这样做。

这是一个例子:

d.f = data.frame( x = c(1, 2, 3, 4), y = c(2, 3.9, 6.1, 7.9), u = c(.1, .1, .1, .1))

变量u是 的值的不确定性y做一个忽略不确定性的直线拟合:

fit1 <- lm(y ~ x, data = d.f)

这正是我认为正确的拟合,包括斜率和截距中的“标准误差”。

重量是常规的1/(uncertainty2),所以我把它给lm()

fit2 <- lm(y ~ x, data = d.f, weights = 1/u^2)

这 2 种拟合的残差标准误差应该不同,但 Std。拟合参数中的误差不是。

例如,两个拟合的截距是1.99,这是正确的,而标准。fit1 的截距错误是0.05196,这也是正确的。但是,对于 fit2,这些值完全相同。fit2 截距不确定性的正确值实际上是0.04472.

我已经搜索了相当多的内容,但未能在 R 中找到正确执行此操作的最小二乘回归拟合器。事实上,理想的这种拟合器也将接受xy坐标中的不确定性,并使用“有效方差”技术进行拟合。或者我只是不明白如何使用lm()或解释它的结果。

3个回答

我认为您正在寻找:

fit2 = lm(y ~ x, data = d.f, weights = 1/u^2)
parameter.covariance.matrix = vcov(fit2)/summary(fit2)$sigma^2

可能有更好的方法从 fit2 对象获取此信息。即使它不优雅,这也有效。

这些值似乎u代表了这些值的已知标准误差y然而,正如 Glen_b 所指出的,在 的情况下lm(y ~ x, data = d.f, weights = 1/u^2),方差 ( u^2) 被视为仅在比例常数范围内已知。如果您想拟合具有已知标准误差的模型,您可以从元分析的角度来解决这个问题(在这种情况下,我们处于已知效应大小估计的标准误差的相同情况)。因此:

library(metafor)
rma(y ~ x, u^2, method="FE", data=d.f, digits=5)

将产生斜率的估计(不是截距!)等于1.9标准误等于0.04472,这是 OP 所期望的。

报告的 fit2 标准误差确实不正确。原因是逆方差加权回归的残差标准误差应为 1。因此,要获得 fit2 斜率不确定性的正确值,您必须将报告的标准误差除以报告的残差标准误差.

       fit2 <- lm(y ~ x, data = d.f, weights = 1/u^2)
       SE <- summary(fit2)$coef[2,2]/summary(fit2)$sigma

SE = 0.04472136 - 斜率的正确 SE。