【问题标题】:Lognormal Monte Carlo simulation summary statistics vary differently from true underlying values对数正态蒙特卡罗模拟汇总统计数据与真实基础值不同
【发布时间】:2018-03-30 15:33:44
【问题描述】:

我从 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

【问题讨论】:

    标签: r montecarlo


    【解决方案1】:

    观察你的true_sd值

    > true_sd
    [1] 178471287
    

    这太大了。这里的问题是您的样本量 (1000) 与您的分布方差相比太小,因此您无法通过样本统计数据获得对总体均值/标准差的良好估计。由于分布的skewness 和kurthosis 特征,您观察到的“偏差”(即在大多数情况下低估了方差)可能会发生,但同样,随着样本量的增加,这种偏差会减少。

    提示:尝试调整您的样本量和参数(mu 和 sigma)并检查您的样本统计信息与“真实”均值和样本偏差之间的关系。

    【讨论】:

    • 即使在大约 10,000,000 处运行 sample_size 仍然始终低估标准偏差。我开始认为这是重尾分布的一个特征,在假设蒙特卡洛模拟结果适用于总体之前,我需要小心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多