這裏是我的代碼: 第一步:定義,我將在後面使用R中的錯誤:當我嘗試申請外部函數:
inverse = function (f, lower = -100, upper = 100) {
function (y) uniroot((function (x) f(x) - y), lower = lower, upper = upper)[1]
}
第二步一個反函數:這裏是我的功能和它的反:
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)
第三步:這裏是我的,結合上述功能的最終功能(我相信功能是正確的):
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 here
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)
這是問題所在進來,當我試圖申請功能外(X,Y,copwnorm),它給我錯誤:'零點'中的函數無效值。請問如何解決這個問題?
'l'是什麼?而'mu1','mu2','sd1'和'sd2'就是這個問題。我們無法運行您的代碼來查看錯誤。並注意我解決了一個問題,因爲它缺少一個括號,希望我在正確的位置得到了答案。 – 2013-03-24 19:16:47
Uniroot不接受帶返回非標量值的函數,所以在與「outer」一起使用時,反函數中的'(函數(x)f(x) - y)'不起作用。 – 2013-03-24 20:57:30
@Hemmo:看起來copworm會返回一個標量值,但最後4個參數沒有默認值。我希望這會成爲錯誤的根源。此外沒有'l'值。失敗。 – 2013-03-25 06:59:08