【问题标题】:Creating and visualizing a joint probability distribution in R在 R 中创建和可视化联合概率分布
【发布时间】:2021-11-04 04:48:34
【问题描述】:

我想通过组合两个数据框来创建联合概率分布。每个数据框都包含从同一人群中提取的数据,但数据不匹配。为了提供可行的代码,假设数据如下:

v1 <- data.frame(rnorm(100, 0, 3))

v2 <- data.frame(rnorm(30, 10, 20))

实际上,我有不遵循预设概率分布的调查数据和模拟数据。我正在寻找一种可以结合两个不同长度的向量来创建联合概率分布的解决方案。

数据集 v1 表示安装太阳能电池板可以获得的财务回报分布。

数据集 v2 代表有兴趣安装太阳能的家庭的财务回报门槛。只有居住在符合他们设定的财务回报门槛的家庭中,家庭才会安装太阳能。

鉴于这两个数据集,我想使用联合概率分布来估计将采用和安装太阳能电池板的家庭的可能比例。

我考虑过进行蒙特卡罗练习,我将从 v1 中随机抽取并将其与 v2 中的抽取相匹配。我会重复这个过程 1000 次,看看有多少房屋的回报率超过了他们的门槛。

library(tidyverse)
set.seed(1234)

monte = NULL

for (i in 1:1000)
{dat = data.frame()
  draw1 <- sample_n(v1, 1) 
  draw2 <- sample_n(v2, 1) 
  dat = data.frame(draw1,draw2)
  monte = rbind(monte, dat)
}

colnames(monte) <- c("return","threshold")

adoption <- monte %>%
  mutate(total = n()) %>%
  filter(return > threshold) %>%
  summarize(count = n(),
            total=mean(total)) %>%
  mutate(adoption = count/total)

这可行,但我想知道是否有另一种方法可以使用 R 将这些向量组合成联合概率分布。我希望能够生成汇总统计数据(例如,将实现净回报的家庭比例大于他们所需的阈值),并在二维空间中可视化联合分布。

【问题讨论】:

  • 我不确定我是否遵循。你有两个不匹配的边际分布,你想找到联合分布?除非你先验地知道它们的联合分布,或者你有一个包含匹配数据的数据集,否则你不能这样做,在这种情况下,你有一个经验联合分布。

标签: r probability-distribution


【解决方案1】:

这个问题本身就没有意义 - 如果数据不匹配,您将无法可视化采样分布。

您进行的蒙特卡洛练习类似于置换 + 引导程序,您在其中尝试针对两个变量之间没有关系的零假设进行测试。

直接计算“联合分布”是不可能的——你能做的最好的就是从零假设模拟抽取,然后进行后续推理。例如。是大于 0.5 的比例。也就是说,除非你愿意去贝叶斯。

如果您希望可视化零分布(或任何一般的联合分布),通常可以使用散点图或等高线图。

monte |>
  ggplot() +
  geom_density_2d(aes(x = return, y = threshold))

monte |>
  ggplot() +
  geom_point(aes(x = return, y = threshold))

【讨论】:

  • 我很想知道当你说“除非你愿意去贝叶斯”时你在想什么?你能详细说明一下吗?
  • 贝叶斯方法将为您提供后联合分布 - 您可以从中计算汇总统计信息等。但是,在这种情况下不建议这样做,因为您需要指定 如何这两个边际分布彼此​​相关,更不用说先验了 - 这正是你不知道的。 即,指定回报的条件分布 |阈值,以及阈值的条件分布 |返回,然后依次迭代地从每个样本中采样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2018-05-25
  • 2013-11-13
  • 2022-01-10
  • 1970-01-01
相关资源
最近更新 更多