在 R 中创建和可视化联合概率分布

Creating and visualizing a joint probability distribution in R

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

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

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

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

数据集 v1 表示可以通过安装太阳能电池板赚取的金融 return 的分布。

数据集 v2 表示有兴趣安装太阳能的家庭的财务 return 门槛。一个家庭只有在满足他们在财务方面设定的门槛的情况下才会安装太阳能 return。

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

我考虑过 运行 一个 monte carlo 练习,我会从 v1 中随机抽取并将其与 v2 中的抽取相匹配。我会重复这个过程 1000 次,看看有多少家庭会达到 return 高于他们的阈值。

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 将这些向量组合成联合概率分布。我希望能够生成汇总统计数据(例如,将实现net return 大于他们要求的阈值),并且还在二维 space.

中可视化联合分布

这个问题本身就没有意义 - 如果数据不匹配,您就无法看到抽样分布。

您放在一起的 Monte Carlo 练习类似于排列 + bootstrap 过程,您在其中尝试检验两个变量之间没有关系的零假设.

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

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

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

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