中值无偏估计量是否最小化平均绝对偏差?

机器算法验证 r 无偏估计器 中位数 对数正态分布 疯狂的
2022-03-27 23:26:15

这是一个后续问题,但也是我之前的一个不同的问题。

我在 Wikipedia 上读到“中值无偏估计器将绝对偏差损失函数的风险降至最低,正如 Laplace 所观察到的那样。” 然而,我的蒙特卡洛模拟结果并不支持这个论点。

我假设来自对数正态总体的样本,X1,X2,...,XNLN(μ,σ2),在哪里,μσ是对数均值和对数标准差,β=exp(μ)=50

几何平均估计量是总体中位数的中位数无偏估计量exp(μ),

β^GM=exp(μ^)=exp(log(Xi)N)LN(μ,σ2/N) 在哪里,μσ是对数均值和对数标准差,μ^σ^是 MLEμσ.

而校正的几何平均估计量是人口中位数的平均无偏估计量。

β^CG=exp(μ^σ^2/2N)

我从 LN 反复生成大小为 5 的样本(log(50),log(1+22)). 复制数为 10,000。我得到的平均绝对偏差是几何平均估计的 25.14 和校正几何平均的 22.92。为什么?

顺便说一句,几何平均值的估计中值绝对偏差为 18.18,校正几何平均值估计量的绝对偏差为 18.58。

我使用的 R 脚本在这里:

#```{r stackexchange}
#' Calculate the geomean to estimate the lognormal median.
#'
#' This function Calculate the geomean to estimate the lognormal
#' median.
#'
#' @param x a vector.
require(plyr)
GM <- function(x){
    exp(mean(log(x)))
}
#' Calculate the bias corrected geomean to estimate the lognormal
#' median.
#'
#' This function Calculate the bias corrected geomean using the
#' variance of the log of the samples, i.e., $\hat\sigma^2=1/(n-1)
# \Sigma_i(\Log(X_i)-\hat\mu)^2$
#'
#' @param x a vector.
BCGM <- function(x){
y <- log(x)
exp(mean(y)-var(y)/(2*length(y)))
}
#' Calculate the bias corrected geomean to estimate the lognormal
#' median.
#'
#' This function Calculate the bias corrected geomean using
#' $\hat\sigma^2=1/(n)\Sigma_i(\Log(X_i)-\hat\mu)^2$
#'
#' @param x a vector.
CG <- function(x){
y <- log(x)
exp(mean(y)-var(y)/(2*length(y))*(length(y)-1)/length(y))
}

############################

simln <- function(n,mu,sigma,CI=FALSE)
{
    X <- rlnorm(n,mu,sigma)
    Y <- 1/X
    gm <- GM(X)
    cg <- CG(X)
    ##gmk <- log(2)/GM(log(2)*Y) #the same as GM(X)
    ##cgk <- log(2)/CG(log(2)*Y)
    cgk <- 1/CG(Y)
    sm <- median(X)
    if(CI==TRUE) ci <- calCI(X)
    ##bcgm <- BCGM(X)
    ##return(c(gm,cg,bcgm))
    if(CI==FALSE) return(c(GM=gm,CG=cg,CGK=cgk,SM=sm)) else return(c(GM=gm,CG=cg,CGK=cgk,CI=ci[3],SM=sm))
}
cv <-2
mcN <-10000
res <- sapply(1:mcN,function(i){simln(n=5,mu=log(50),sigma=sqrt(log(1+cv^2)), CI=FALSE)})
sumres.mad <- apply(res,1,function(x) mean(abs(x-50)))
sumres.medad <- apply(res,1,function(x) median(abs(x-50)))
sumres.mse <- apply(res,1,function(x) mean((x-50)^2))
#```

#```{r eval=FALSE}
#> sumres.mad
      GM       CG      CGK       SM 
#25.14202 22.91564 29.65724 31.49275 
#> sumres.mse
      GM       CG      CGK       SM 
#1368.209 1031.478 2051.540 2407.218 
#```
1个回答

如果我们选择一个估计器α+通过它最小化与真实值的预期绝对误差的标准α

E=<|α+α|>=α+(α+α)f(α)dα+α+(αα+)f(α)dα

我们需要

dEdα+=α+f(α)dαα+f(α)dα=0

这相当于P(α>α+)=1/2. 所以α+显示为 1774 年拉普拉斯之后的中位数。

如果您在使用 R 时遇到问题,请在 Stack Overflow 上的另一个问题中提问