对数正态 Monte Carlo 模拟汇总统计数据与真实基础值不同

Lognormal Monte Carlo simulation summary statistics vary differently from true underlying values

我从 R 中的对数正态分布中抽样。当我查看结果样本的均值和标准差时,我注意到抽样标准差始终低于真实总体标准差。方法似乎并非如此。

我忘记了模拟样本统计数据是否存在偏差?即便如此,这个偏差似乎比我预期的要大。

我在 R 中使用的内容:

library(dplyr) ## Cleaning data
library(tidyr) ## tidying data
library(stringi)  ## string manipulation

## Define simulation controls
n_sample <- 10
sample_size <- 1000
mu <- 10
sigma <- 3

## Lognormal mean and standard deviation
true_mean <- exp(mu + sigma ^ 2 / 2)
true_sd   <- sqrt((exp(sigma ^ 2) - 1) *
              exp(2 * mu + sigma ^ 2))

## For reporducibility
set.seed(42)

sample_id <- stri_rand_strings(n_sample, length = 5)

counts <- rep(sample_size, n_sample)

observations <- lapply(counts, rlnorm, meanlog = mu, sdlog = sigma)

names(observations) <- sample_id

## Summarize results of the n_sample-many simulations
obs_table <- observations %>%
              bind_rows() %>%
              gather(key = "sample",
                     value = "obs") %>%
              group_by(sample) %>%
              summarize(mean = mean(obs),
                        sd   = sd(obs)) %>%
              ## Mean departure and SD departure from true
              ## underlying distribution.
              mutate(mean_dep = mean / true_mean - 1,
                     sd_dep   = sd / true_sd - 1)

obs_table

观察您的 true_sd

> true_sd
[1] 178471287

这太大了。这里的问题是您的样本量 (1000) 与您的分布方差相比太小,因此您无法通过样本统计数据很好地估计您的人口 mean/sd。您观察到的 "bias"(即大部分时间低估方差)可能是由于分布的 skewness and kurthosis 特征而发生的,但同样,随着样本量的增加,这种情况会减少。

提示:尝试调整样本大小和参数(mu 和 sigma)并检查样本统计数据与 "real" 均值和样本偏差之间的关系。