这是我的代码:步骤1:定义一个我将在稍后使用的反函数
inverse = function (f, lower = -100, upper = 100) {
function (y) uniroot((function (x) f(x) - y), lower = lower, upper = upper)[1]
}
Run Code Online (Sandbox Code Playgroud)
第2步:这是我的功能和他们的反向:
F1<-function(x,m1,l,s1,s2){l*pnorm((x-m1)/s1)+(1-l)*pnorm((x+m1)/s2)}
F1_inverse = inverse(function(x) F1(x,1,0.1,2,1) , -100, 100)
F2<-function(x,m2,l,s1,s2){l*pnorm((x-m2)/s1)+(1-l)*pnorm((x+m2)/s2)}
F2_inverse = inverse(function(x) F1(x,1,0.1,2,1) , -100, 100)
Run Code Online (Sandbox Code Playgroud)
Step3:这是我的最终功能,它结合了上述功能(我确信功能是正确的):
copwnorm<-function(x,y,l,mu1,mu2,sd1,sd2) {
(l*dnorm(((F1_inverse(pnorm(x))$root-mu1)/sd1))*
dnorm(((F2_inverse(pnorm(y))$root-mu2)/sd1)))
}
Run Code Online (Sandbox Code Playgroud)
Step4:我想在步骤enter code here3中为该函数创建等高线图:
x<-seq(-2,2,0.1)
y<-seq(-2,2,0.1)
z<-outer(x,y,copwnorm)
contour(x,y,z,xlab="x",ylab="y",nlevels=15)
Run Code Online (Sandbox Code Playgroud)
这是问题所在,当我尝试应用函数outer(x,y,copwnorm)时,它给出了一个错误:'zeroin'中的函数值无效.请问如何解决这个问题?