我目前正在处理一些具有5类比例的调查数据。我以前使用ML方法进行4类比例,我正在尝试调整R中新调查的代码。
有效的原始代码是:
#Load Data
mathcomp <- read.csv("RRawComposite11.csv", header=TRUE, sep=",")
attach(mathcomp)
#Ordered Probit Liklihood
llk.oprobit4 <- function(param, x, y) {
os <- rep(1, nrow(x))
x <- cbind(os, x)
b <- param[1:ncol(x)]
t2 <- param[(ncol(x)+1)]
t3 <- param[(ncol(x)+2)]
xb <- x%*%b
p1 <- log(pnorm(-xb))
if (t2<=0) p2 <- -(abs(t2)*10000)
else p2 <- log(pnorm(t2-xb)-pnorm(-xb))
if (t3<=t2) p3 <- -((t2-t3)*10000)
else p3 <- log(pnorm(t3-xb)-pnorm(t2-xb))
p4 <- log(1-pnorm(t3-xb))
-sum(cbind(y==1,y==2,y==3,y==4) * cbind(p1,p2,p3,p4))
}
我尝试使用的修改后的代码是:
llk.oprobit5 <- function(param, x, y) {
os <- rep(1, nrow(x))
x <- cbind(os, x)
b <- param[1:ncol(x)]
t2 <- param[(ncol(x)+1)]
t3 <- param[(ncol(x)+2)]
t4 <- param[(ncol(x)+3)]
xb <- x%*%b
p1 <- log(pnorm(-xb))
if (t2<=0) p2 <- -(abs(t2)*10000)
else p2 <- log(pnorm(t2-xb)-pnorm(-xb))
if (t3<=t2) p3 <- -((t2-t3)*10000)
else p3 <- log(pnorm(t3-xb)-pnorm(t2-xb))
if (t4<=t3) p4 <- -((t3-t4)*10000)
else p4 <- log(pnorm(t4-xb)-pnorm(t3-xb))
p5 <- log(1-pnorm(t4-xb))
-sum(cbind(y==1,y==2,y==3,y==4,y==5) * cbind(p1,p2,p3,p4,p5))
}
我收到一条错误消息:
if(t4&lt; = t3)p4&lt; - - ((t3-t4)* 10000)的错误,否则p4&lt; - log(pnorm(t4 - :缺少值,其中需要TRUE / FALSE
)
有谁知道如何修复似然函数来使其工作?任何帮助,将不胜感激。感谢。