根据数据不确定性计算线性回归斜率的不确定性

机器算法验证 回归 不确定
2022-02-26 07:28:21

如何根据数据不确定性计算线性回归斜率的不确定性(可能在 Excel/Mathematica 中)?

示例: 示例图 让我们有数据点 (0,0), (1,2), (2,4), (3,6), (4,8), ... (8, 16),但每个 y 值都有不确定性为 4。我发现的大多数函数会将不确定性计算为 0,因为这些点与函数 y=2x 完全匹配。但是,如图所示,y=x/2 也与点匹配。这是一个夸张的例子,但我希望它表明我需要什么。

编辑:如果我尝试多解释一点,虽然示例中的每个点都有特定的 y 值,但我们假装我们不知道它是否属实。例如,第一个点 (0,0) 实际上可能是 (0,6) 或 (0,-6) 或介于两者之间的任何值。我问在任何流行的问题中是否有考虑到这一点的算法。在示例中,点 (0,6), (1,6.5), (2,7), (3,7.5), (4,8), ... (8, 10) 仍然落在不确定范围内,所以它们可能是正确的点,连接这些点的线有一个方程:y = x/2 + 6,而我们不考虑不确定性得到的方程有方程:y=2x + 0。所以 k 的不确定性是 1,5,n 是 6。

TL;DR:在图片中,有一条线 y=2x 是使用最小二乘拟合计算的,它完美地拟合了数据。如果我们知道 y 值的不确定性,我试图找出 y=kx + n 中的 k 和 n 可以改变多少,但仍然适合数据。在我的示例中,k 的不确定性为 1.5,在 n 中为 6。在图像中有“最佳”拟合线和一条几乎不适合点的线。

3个回答

回应“我试图找出值的不确定性,仍然可以拟合数据。”kny=kx+ny

如果真正的关系是线性的并且中的误差是具有零均值和已知标准差的独立正态随机变量,那么 % 置信区域是其中,其中中误差的标准差,对的数量, \chi_{d ,是自由度的卡方分布的上y100(1α)(k,n)(kxi+nyi)2/σi2<χd,α2σiyid(x,y)χd,α2αd

编辑 - 将每个的标准误差设为 3 - 即,将图中的误差条分别表示每个 ) 的 95% 置信区域边界的方程yiyi(k,n)204(k2)2+72n(k2)+9n2=152.271

在此处输入图像描述

我用 Python 中的这个简单代码做了一个简单的直接采样:

import random
import numpy as np
import pylab
def uncreg(x, y, xu, yu, N=100000):
    out = np.zeros((N, 2))
    for n in xrange(N):
        tx = [s+random.uniform(-xu, xu) for s in x]
        ty = [s+random.uniform(-yu, yu) for s in y]
        a, b = np.linalg.lstsq(np.vstack([tx, np.ones(len(x))]).T, ty)[0]
        out[n, 0:2] = [a, b]
    return out
if __name__ == "__main__":
    P = uncreg(np.arange(0, 8.01), np.arange(0, 16.01, 2), 0.1, 6.)
    H, xedges, yedges = np.histogram2d(P[:, 0], P[:, 1], bins=(50, 50))
    pylab.imshow(H, interpolation='nearest', origin='low', aspect='auto',
                 extent=[xedges[0], xedges[-1], yedges[0], yedges[-1]])

得到了这个: 直接采样结果的直方图

当然,您可以挖掘P所需的数据,或更改不确定性分布。

我之前也进行过同样的狩猎,我认为可能是一个有用的起点。excel 宏函数根据表格点和两个纵坐标中每个点的不确定性给出线性拟合项及其不确定性。也许查看它所基于的论文,以决定是否要在不同的环境中实现它、修改等。(为 Mathematica 做了一些工作。)表面上似乎有很好的演练文档,但没有'没有打开宏看看它的注释有多好。