我在使用似然函数中的积分函数时遇到了困难。似然函数涉及四个函数,F1R、F1L、F2R、F2L,它们由积分定义。
F1R= 积分(0,R) exp(-(alpha1 v)^tau1 - (alpha2 v)^tau2) ((tau1 (alpha1^tau1)*v^(tau1-1)))
F1L= 积分(0,L) exp(-(alpha1 v)^tau1 - (alpha2 v)^tau2) ((tau1 (alpha1^tau1)*v^(tau1-1)))
F2R= 积分(0,t) exp(-(alpha1 v)^tau1 - (alpha2 v)^tau2) ((tau2 (alpha2^tau2)*v^(tau2-1)))
F2R= 积分(0,t) exp(-(alpha1 v)^tau1 - (alpha2 v)^tau2) ((tau2 (alpha2^tau2)*v^(tau2-1)))
其中 R 和 L 在数据库中给出。
log_veros <-function(param,x){
beta01 <- exp(param[1])
beta11 <- exp(param[2])
beta12 <- exp(param[3])
beta13 <- exp(param[4])
beta02 <- exp(param[5])
beta21 <- exp(param[6])
beta22 <- exp(param[7])
beta23 <- exp(param[8])
beta1 =c(beta11,beta12,beta13)
beta2 =c(beta21,beta22,beta23)
X<- cbind(x$x1,x$x2,x$x3)
eta1 <- exp(beta01 + X%*%beta1)
eta2 <- exp(beta02 + X%*%beta2)
eta <- eta1 + eta2
Delta0 <- x$Delta0
Delta1 <- x$Delta1
Delta2 <- x$Delta2
F1L <- rep(NA,n)
F1R <- rep(NA,n)
F2L <- rep(NA,n)
F2R <- rep(NA,n)
for(i in 1: n){
myf1 <- function(v){
eta1[i]*exp(-(eta[i])*v)
}
myf2 <- function(v){
eta2[i]*exp(-(eta[i])*v)
}
F1L[i] <-integrate(myf1, lower=0,upper = dados$L[i])$value
F1R[i] <-integrate(myf1, lower=0,upper = dados$R[i])$value
F2L[i] <-integrate(myf2, lower=0,upper = dados$L[i])$value
F2R[i] <-integrate(myf2, lower=0,upper = dados$R[i])$value
}
aux<- log((F1R -F1L)^Delta1*(F2R-F2L)^Delta2*(1-(F1L+F2L))^Delta0)
return(-sum(aux))
}
关注数据库的一部分以便更好地理解:
data
L R status Delta0 Delta1 Delta2 x1 x2 x3
1 0.031678365 0.41981090 1 0 1 0 1 1 0.49043448
2 0.015044380 0.33537736 1 0 1 0 0 1 0.07733734
3 0.003636517 0.20048560 1 0 1 0 1 1 -1.78858071
4 0.014671982 0.40071384 1 0 1 0 0 1 -0.76329354
5 0.076556199 Inf 0 1 0 0 0 1 -1.43815999
6 0.000000000 0.03239601 2 0 0 1 0 1 0.84835412
7 0.046961166 Inf 0 1 0 0 1 1 -1.31396966
我认为我integrate
错误地使用了该功能,因为它在optimx
library(optimx)
p= c(log(5),log(1.5),log(4),log(1.5),log(4),log(2),log(1.5),log(2.5))
emv <- optimx(par = p, fn =log_veros, x=data,
method = c("nlm", "BFGS", "Rcgmin", "nlminb"))