在R中进行双重积分。

3
我想问问大家是否能帮我找到如何计算给定联合分布的双重积分,例如 dnorm(x,m1,s1)*dnorm(y,m2,s2)*CopulaDensity ,其中 Ymin=-inf, Ymax=inf, Xmin= x,Xmax = inf , 我想在 R 中实现。
非常感谢。 注意!CopulaDensity 是一个数值向量。

难道不应该是 Ymin= x 而不是 Xmin= x 吗? - Rui Barradas
1个回答

2

这里提供一种解决方案,灵感来源于这篇帖子
但是没有使用 CopulaDensity

f <- function(x, m1, s1, m2, s2) {
  dnorm(x, m1, s1) * integrate(function(y, m2, s2) {
    dnorm(y, m2, s2)
  }, x, Inf, m2 = m2, s2 = s2)$value
}

(res <- integrate(Vectorize(f), -Inf, Inf, m1 = 0, s1 = 1, m2 = 0, s2 = 1)$value)
#[1] 0.5

谢谢您的回答。虽然我需要像上面提到的那样,将这两个密度乘以一个数字向量。您有什么想法可以嵌入它吗? - Giorgos
@Giorgos 你可以在 f <- function(x, m1, s1, m2, s2, vec) 的末尾添加一个额外的参数 vec,然后在函数体中任何需要的地方使用它。如果向量是 v,请将其放在第一个 dnorm 之前。 - Rui Barradas
f <- function(x, m1, s1, m2, s2,v) { v*dnorm(x, m1, s1) * integrate(function(y, m2, s2) { dnorm(y, m2, s2) }, x, Inf, m2 = m2, s2 = s2)$value } 的意思是这样的吗? - Giorgos
@Giorgos 是的,根据我对问题的理解,应该可以。你能试试用已知的输入/输出吗? - Rui Barradas
不幸的是,我得到了以下错误:Error in integrate(Vectorize(f), -Inf, Inf, m1 = mean(x), copuladensity = Frank.Density, : evaluation of function gave a result of wrong length In addition: Warning message: In mapply(FUN = function (x, m1, s1, m2, s2, copuladensity) : longer argument not a multiple of length of shorter - Giorgos
我认为固定向量值存在问题。 - Giorgos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接