使用中位数计算方差

机器算法验证 方差 意思是 中位数
2022-03-24 21:16:34

我有一个非常偏斜的一维随机变量。为了规范这个分布,我想使用中位数而不是平均值。我的问题是:我可以使用公式中的中位数而不是平均值来计算分布的方差吗?

即我可以更换

Var(X)=[(Ximean(X))2]/n

Var(X)=[(Ximedian(X))2]/n

我对此的推理是,由于方差是分布的集中趋势的传播量度,它不应该是一个问题,但我正在寻找验证这个逻辑。

1个回答

均值最小化平方误差(或 L2 范数,请参阅此处此处),因此自然选择方差来测量与均值的距离是使用平方误差(请参阅此处了解我们为何对其进行平方)。另一方面,中位数使绝对误差(L1 范数)最小化,即它是一个位于数据“中间”的值,因此与中位数的绝对距离(所谓的中位数绝对偏差或 MAD)似乎是更好地衡量中位数附近的变异程度。您可以在此线程中阅读有关此关系的更多信息

简而言之,方差与 MAD 的不同之处在于它们如何定义数据的中心点,这会影响我们测量其周围数据点变化的方式。平方值使得异常值对中心点(均值)的影响更大,而在中位数的情况下,所有点对其影响相同,因此绝对距离似乎更合适。

这也可以通过简单的模拟来显示。如果您比较平均值和中位数的平方距离,那么总平方距离与平均值的距离几乎总是小于与中位数的距离。另一方面,总绝对距离离中位数更小,然后离平均值更小。用于进行模拟的 R 代码发布在下面。

sqtest  <- function(x) sum((x-mean(x))^2)  < sum((x-median(x))^2)
abstest <- function(x) sum(abs(x-mean(x))) > sum(abs(x-median(x)))

mean(replicate(1000, sqtest(rnorm(1000))))
mean(replicate(1000, abstest(rnorm(1000))))

mean(replicate(1000, sqtest(rexp(1000))))
mean(replicate(1000, abstest(rexp(1000))))

mean(replicate(1000, sqtest(runif(1000))))
mean(replicate(1000, abstest(runif(1000))))

在估计这种“方差”时使用中位数而不是均值的情况下,这将导致比传统上使用均值更高的估计值。

顺便说一句,L1 和 L2 范数的关系也可以在贝叶斯上下文中考虑,就像在这个线程中一样。