이것은 후속 조치이지만 이전 질문과 다른 질문입니다 .
나는 Wikipedia에서 " 중간 편향 추정기가 Laplace가 관찰 한 절대 편차 손실 함수와 관련한 위험을 최소화 한다"고 읽었습니다 . 그러나 내 Monte Carlo 시뮬레이션 결과는이 주장을 지원하지 않습니다.
나는 로그 정규 모집단 에서 나온 샘플을 가정합니다 . . . , X N ~ LN ( μ , σ 2 ) , 여기서 μ 및 는 로그 평균 및 log-sd,β = exp ( μ ) = 50
기하 평균이 추정기 인구 중앙값 메디아 바이어스 추정량 ,
여기서 및 는 로그 평균 및 log-sd이고, 및 는 및 대한 MLE입니다 .μ σ μ σ
보정 된 기하 평균 추정기는 모집단 중앙값에 대한 평균 편향 추정량이지만,
LN 에서 크기 5의 샘플을 반복적으로 생성합니다 . 복제 번호는 10,000입니다. 내가 얻은 평균 절대 편차는 기하 평균 추정기의 경우 25.14이고 보정 기하 평균의 경우 22.92입니다. 왜?
BTW에서 추정 된 평균 절대 편차는 기하 평균의 경우 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
#```
set.seed
. 3.) 항상 위키 백과를 신뢰하지 마십시오 -이에서 "중간"기사) 다릅니다에서 인용 된 텍스트 (방법 참고 다른 위키 피 디아 기사 4) 귀하의 R의 코드는 총 엉망입니다 - 체크 아웃 구글의 R 스타일 가이드 일부 좋은 스타일 지침.