【问题标题】:Summing N normal distributions对 N 个正态分布求和
【发布时间】:2021-02-10 18:02:44
【问题描述】:

我正在尝试确定 N 个单变量分布之和的分布。 你能推荐一个允许我动态输入任意 N 个分布的函数吗?

这行得通:

library(distr)
var1 <- Norm(mean=14, sd=1)
var2 <- Norm(mean=10, sd=1)
var3 <- Norm(mean=9, sd=1)
conv <- convpow(var1+var2+var3,1)

这(显然)不起作用,因为将列表粘贴在一起会创建一个混乱的字符串,但是这是我理想功能的框架:

convolution_multi <- function(mean_list = c(14,10,9,10,50)){
  distribution_list <- lapply(X = mean_list, Norm, sd=1)
  conv_out <- convpow(paste(distribution_list,collapse="+"),1)
  return(conv_out)
}

感谢您的帮助!

【问题讨论】:

  • convpow 是错误的函数调用。它对 N 个相同的单变量进行卷积。据我了解,您想要 N 个不同(尽管相似)单变量的总和
  • @SeverinPappadeux 当然,但他们也用 N=1 来调用它。他们真的没有做错任何事——他们只是根本没有做任何事情。我在回答中提到了这一点。
  • 你为什么要为此编写程序?众所周知的分析答案是法线之和是正常的。
  • @Dason 是的,你是对的,我同意,但作者认为它正在做某事。而且调用确实是错误的函数,还有其他基于FFT的卷积包
  • @pjs - 我同意。如果这确实是实际任务,那么有更直接的方法来解决问题,但也有可能这只是手头问题的简化说明。

标签: r distribution convolution


【解决方案1】:

您可以使用Reduce 将每个 RV 重复添加到另一个。之后你可以使用 convpow

new_var <- Reduce("+", distribution_list)
convpow(new_var, 1)

话虽如此,对 convpow 的调用在这里绝对没有任何作用。

> identical(convpow(new_var, 1), new_var)
[1] TRUE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2016-07-12
    相关资源
    最近更新 更多