我正在为该函数编写对数似然曲面:
ln [Pr(Y_A = 186,Y_B = 38,Y_ {AB} = 13,Y_O = 284)]
= ln(G + 186 * ln(A ^ 2 + 2 * A * O)+ 38 * ln(B ^ 2 + 2 * B * O)+ 13 * ln(2 * A * B)+284 * ln(O ^ 2))
多亏了一个回答者,我将代码更改为以下代码,但遇到了新问题:
A = seq(0.0001, .9999,length=50)
B = A
O = A
G = 1.129675e-06
f = function(A,B,O){F = ifelse(A+B+O==1,
G+186*log(A*A+2*A*O)+38*log(B*B+2*B*O)+13*log(2*A*B)+284*log(O*O), O)}
Z <- outer(A, B, O, f)
png()
persp(A,B,Z, theta=60, phi=30 )
dev.off()
错误告诉我没有对象“ O”。
Error in get(as.character(FUN), mode = "function", envir = envir)
我的意思是在A + B + O = 1的约束下输入A,B和O,然后绘制对数似然曲面,让A:x轴,B:y轴,对数似然度:z轴。
我无法摆脱“ O”,导致指令命令该函数的参数应为三维向量:A,B,O。
那我该怎么做才能改善当前代码? 如果我需要更改功能,谁能建议使用功能? (我想也许我可以使用重心坐标,但是我认为这是我最后要做的事情。)
答案 0 :(得分:1)
最好避开可能会遇到麻烦的A和B区域。并使用Z而不是f
作为z参数:
A = seq(0.0001, .9999,length=50)
B = A
G=1 # throws an error if not foundf
f = function(A,B){O <- 1-A-B; O <- ifelse(O==0, 0.00000001, O)
G+186*log(A*A+2*A*O)+38*log(B*B+2*B*O)+13*log(2*A*B)+284*log(O*O)}
Z <- outer(A, B, f)
png(); persp(A,B,Z, theta=60, phi=30 ); dev.off()