-4

これが私のコードです: Step1: 後で使用する逆関数を定義します

inverse = function (f, lower = -100, upper = 100) {
  function (y) uniroot((function (x) f(x) - y), lower = lower, upper = upper)[1]
}

Step2: これが私の関数とその逆です:

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)

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)))
}

enter code hereStep4: Step 3の関数の等高線図を作成したい:

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)

ここで問題が発生します。関数outer(x、y、copwnorm)を適用しようとすると、「ゼロイン」の関数値が無効ですというエラーが表示されます。この問題を解決する方法を尋ねてもよろしいですか?

4

1 に答える 1