首页 > 解决方案 > 在 R 中创建和可视化联合概率分布

问题描述

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

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 将这些向量组合成一个联合概率分布。我希望能够生成汇总统计数据(例如,实现净回报大于他们的家庭的比例所需的阈值),并可视化二维空间中的联合分布。

标签: rprobability-distribution

解决方案


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

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

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

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

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

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

推荐阅读