可以通过对数据进行采样然后分别取样本均值和标准差的平均值来估计正态分布数据的位置和规模。对于非正态(重尾)数据,取样本中位数和 IQR/MAD 的中位数是否正确?也就是说,使用样本中位数的中位数作为类似于正常数据的样本均值平均值的稳健位置估计是否正确?
中位数的中位数作为均值的稳健均值?
机器算法验证
强大的
疯狂的
2022-04-08 03:33:43
1个回答
如果所有样本都来自相同的分布,那么是的,样本中位数的中位数是对基础分布中位数的相当稳健的估计(尽管这不必与均值相同),因为样本的中位数来自连续分布低于(或高于)总体中位数的概率为 0.5。
添加
这是一些说明性的 R 代码。它从正态分布中抽取一个样本,以及一个具有异常值的案例,其中 1% 的数据比应有的大 10,000 倍。它查看整体样本数据(50,000 个点)的各种统计数据,然后按 10,000 个样本的统计数据的中心(平均值或中位数),每个样本中有 5 个点。
library(matrixStats)
wholestats <- function(x,n) {
mea <- sum(x)/n
var <- sum((x-mea)^2)/(n-1)
sdv <- sqrt(var)
qun <- quantile(x, probs=c(0.25,0.5,0.75))
mad <- median(abs(x-qun[2]))
c(mean=mea, variance=var, st.dev=sdv,
median=qun[2], IQR=qun[3]-qun[1],
MAD=mad)
}
rowstats <- function(x,b) {
rmea <- rowSums(x)/b
rvar <- rowSums((x-rmea)^2)/(b-1)
rsdv <- sqrt(rvar)
rqun <- rowQuantiles(x, probs=c(0.25,0.5,0.75))
rmad <- rowMedians(abs(x-rqun[,2]))
c(mean=mean(rmea), variance=mean(rvar), st.dev=mean(rsdv),
median=median(rqun[,2]), IQR=median(rqun[,3]-rqun[,1]),
MAD=median(rmad))
}
a <- 10000 # number of samples
b <- 5 # samplesize
set.seed(1)
d <- array(rnorm(a*b), dim=c(a,b))
doutlier <- array(d * ifelse(runif(a*b)>0.99, 10000, 1) , dim=c(a,b))
正如预期的那样,基于中值的统计数据更加稳健,尽管它们未能表明重尾异常值变体是重尾的。
> wholestats(d,a*b)
mean variance st.dev median.50% IQR.75% MAD
-0.002440456 1.011306552 1.005637386 -0.001610677 1.357029247 0.678706371
> wholestats(doutlier,a*b)
mean variance st.dev median.50% IQR.75% MAD
-3.425664e+00 9.591583e+05 9.793663e+02 -1.610677e-03 1.373658e+00 6.871415e-01
> rowstats(d,b)
mean variance st.dev median IQR MAD
-0.002440456 1.014611308 0.947630870 0.003460172 0.917642167 0.510115277
> rowstats(doutlier,b)
mean variance st.dev median IQR MAD
-3.425664e+00 9.607212e+05 1.685929e+02 3.460172e-03 9.301795e-01 5.175084e-01
其它你可能感兴趣的问题