【发布时间】:2021-11-09 22:15:51
【问题描述】:
【问题讨论】:
-
你知道最低的箱子应该是什么样子吗?它们都完全为零,还是散布在垃圾箱中?
-
我们现在有三个不同的答案,所以看看 OP 对分布的了解会很有趣。我猜还没有可用于混合物的参数吗?那么问题是 (1) 经验数据是已知的 还是 (2) 任务是否只是通过反复试验来创建 类似的定性模式。
标签: r histogram simulation
【问题讨论】:
标签: r histogram simulation
这可以被视为一个经典问题,将runif 生成的均匀随机数与经验相对频率的逆变换进行转换。这是一种使用近似值的方法:
freq <- c(0.39, 0.02, 0.15, 0.18, 0.12, 0.09,0.04, 0.01)
sum(freq) # This is a check. The sum must be 1.0.
r_empirical <- function(n, freq) {
approx(c(0, cumsum(freq)), 0:(length(freq)),
runif(n), method="constant", f=0)$y
}
x <- r_empirical(1000, freq)
hist(x, breaks=0:length(freq))
下图演示了基本原理。楼梯显示了累积分布,红色箭头显示了如何转换均匀的随机数:
【讨论】:
sample(0:(length(freq)-1), n, prob=freq, TRUE) 可以用于这个例子,但没那么有趣。
【讨论】:
零膨胀对数法线? (对于 Tobit 来说,0 处的峰值看起来有点太大了,即审查了 Normal,负面的东西堆积在零上)
zero_prob <- 0.25
meanlog <- log(20)
sdlog <- 0.4 ## SD ~ 40%
n <- 500
rzilnorm <- function(n, pz, meanlog, sdlog) {
ifelse(runif(n) < pz, 0,
rlnorm(n, meanlog, sdlog))
}
set.seed(101)
hist(rzilnorm(n=500, zero_prob, meanlog, sdlog), col = "gray", breaks=25, freq=FALSE)
我的第一次尝试是使用n=100 和pz=0.2;如果我要多玩这个,我可能会增加sdlog 一点点。否则这看起来很接近?
【讨论】: