R语言 从直方图中的一点计算总体概率

ds97pgxw  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(128)

我有一些数据:norm = the actual pricenorm2 = estimated price。实际价格是某人提供出售物品的价格。我运行了蒙特卡罗模拟,得出了100个估计价格。然后,我将它们绘制在下面的直方图中。

橙子线表示实际(发行)价格,中间的点划线表示模型中100个估计价格的平均值,两边的两条线是1标准差线。
我知道,将有68%的机会,该产品将出售的价格之间的2个标准差线。因此,我可以说,在这种特殊情况下,购买这种产品将有超过68%的可能性获利(因为橙子线低于1标准差线)。
我想计算这个产品盈利的总体概率(即大于橙子线的所有值)。
R代码:

library(ggplot2)
library(tidyverse)
normalDist = data.frame(
  norm = rnorm(1000, mean = 1, sd = 2),
  norm2 = rnorm(1000, mean = 0.9, sd = 2)
  )

mean = mean(normalDist$norm)
sd = sd(normalDist$norm)
norm2 = normalDist$norm2 %>% sample(1)
normalDist %>% 
  ggplot() +
  geom_histogram(aes(x = norm), bins = 20, fill = "skyblue", color = "black") +
  geom_vline(xintercept = c(norm2, mean, mean - sd, mean + sd),
             linetype = c("solid", "dotdash", "longdash", "longdash"),
             size = c(2, 1, 1, 1),
             color = c("darkorange", "darkgreen", "darkred", "darkred")) +
  theme_bw()
w41d8nur

w41d8nur1#

@GregorThomas(在评论中)显然是正确的,如果分布是正态的。然而,如果已知分布是正态分布(或任何特定的函数形式),那么进行模拟的意义何在?如果您的模拟更一般,并且生成的分布形式未知,只需计算表达式norm2 > normalDist$norm的平均值。下面是模拟中的分析概率和估计概率的示例:

library(dplyr)
set.seed(1234)
normalDist = data.frame(
  norm = rnorm(1000, mean = 1, sd = 2),
  norm2 = rnorm(1000, mean = 0.9, sd = 2)
)

mean = mean(normalDist$norm)
sd = sd(normalDist$norm)
norm2 = normalDist$norm2 %>% sample(1)

## Calculated from the normal CDF
pnorm(norm2, mean, sd, lower.tail=FALSE)
#> [1] 0.8734893

## Estimated from the Simulation
mean(normalDist$norm > norm2)
#> [1] 0.888

创建于2023-09-27带有reprex v2.0.2

相关问题