Ele*_*ena 5 statistics r integral
这是我第一次使用 stackoverflow,所以请耐心等待!我正在使用 R 包“pracma”来计算三重积分。这是我的代码:
mu1=0
mu2=0
mu3=0
mu4=0
sigma1=1
sigma2=1
sigma3=1
sigma4=1
f3=function(x,y,z){dnorm(z,mean = mu2,sd=sigma2)*dnorm(y,mean =
mu3,sd=sigma3)*(1-pnorm(z,mean= mu1,sd=sigma1))*dnorm(x,mean =
mu4,sd=sigma4)}
ymin=function(x){x}
zmin=function(x,y){y}
integral3(f3,xmin = -100,xmax = 100,ymin,ymax=100,zmin,zmax = 100)
Run Code Online (Sandbox Code Playgroud)
但实际上,我收到以下错误:
Error in if (adjerr[1] > localtol) { :
missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)
有人可以给我一个解决这个问题的提示吗?预先感谢
发生这种情况是因为您设置的最大值和最小值。在 f3() 函数中,您使用 dnorm() 进行操作,一旦超出 [-8,8] 区间,它就会很快达到 0:
dnorm(0:20)
##[1] 3.989423e-01 2.419707e-01 5.399097e-02 4.431848e-03 1.338302e-04 1.486720e-06 6.075883e-09 9.134720e-12 5.052271e-15 1.027977e-18
##[11] 7.694599e-23 2.118819e-27 2.146384e-32 7.998828e-38 1.096607e-43 5.530710e-50 1.026163e-56 7.004182e-64 1.758750e-71 1.624636e-79
##[21] 5.520948e-88
Run Code Online (Sandbox Code Playgroud)
如果您为最小和最大参数使用一些合理的值,该函数将按预期工作:
library(pracma)
mu1=0
mu2=0
mu3=0
mu4=0
sigma1=1
sigma2=1
sigma3=1
sigma4=1
f3=function(x,y,z){dnorm(z,mean = mu2,sd=sigma2)*dnorm(y,mean =
mu3,sd=sigma3)*(1-pnorm(z,mean= mu1,sd=sigma1))*dnorm(x,mean =
mu4,sd=sigma4)}
xmin <- -10
xmax <- 10
ymin=function(x){x}
ymax <- 10
zmin=function(x,y){y}
zmax <- 10
integral3(f3, xmin, xmax ,ymin, xmax, zmin, zmax)
# [1] 0.04166667
Run Code Online (Sandbox Code Playgroud)