如何解决在nlme包中使用nlme时的输入函数
我已经尝试过nlmer()函数,但是由于某种原因它无法收敛。现在我正在尝试在nlme包中使用nlme()函数,我的功能在下面
NLSite <- function(PSAr,Vs30,h800,b1,b2,b3,c){
#Linear term
.exprN1 <- ifelse(Vs30>1000,1000/760,Vs30/760)
.exprN2 <- log(.exprN1)
.valueN <- b1*.exprN2
# Depth-to-rock term (in log) #!!!!!!!!!!!!!!!!!! z<1 = 1 i deleted it dont forget to change!!!!!!!!!!!!!!
# in SD18 they are estimated from CY08 equation for Z1
h800[h800<1]<-1
.exprZ1 <- ifelse(Vs30>=760,1,h800)
.exprZ2 <- log(.exprZ1)
.valueZ <- b2*.exprZ2
#Nonlinear term
.exprNL1 <- ifelse(Vs30>760,760-360,Vs30-360)
.exprNL2 <- -0.00701*.exprNL1
.exprNL3 <- exp(.exprNL2)
.exprNL4 <- -0.00701*400
.exprNL5 <- exp(.exprNL4)
.exprNL6 <- .exprNL3 - .exprNL5
.exprNL7 <- PSAr/c
.exprNL8 <- 1+.exprNL7 #log(1+PSAr/c)
.exprNL9 <- log(.exprNL8)
.valueNL <- b3*.exprNL9*.exprNL6
.value <- 0 + .valueN + .valueZ + .valueNL
.grad <- array(0,c(length(.value),4L),list(NULL,c("b1","b2","b3","c")))
## e1 ##
## b1,b3 ##
.grad[,"b1"] <- .exprN2
.grad[,"b2"] <- .exprZ2
.grad[,"b3"] <- .exprNL9*.exprNL6
.grad[,"c"] <- b3*.exprNL6*((1/(.exprNL8))*(-.exprNL7/c))
attr(.value,"gradient") <- .grad
.value
}
我试图像这样运行nlme()
fm1 <- nlme(log(PSAm) ~ NLSite(PSAr,c),data = data,fixed = b1+ b2+ b3~1,random = EQID~1,start = c(b1 = 1,b2 = 1,b3 = 1,c=0.1))
b1,b2,b3和c是我的固定效应,我在lmer中的随机效应是(1 | EQID),EQID是我的数据框(数据)中的地震ID,我在lmer中的结构在下面
fm <-lmer(log(data$PSAm)~ 0 + data$VN + data$Z1 + data$VN03 + data$VN19 + data$VN21 + data$VN28 + (1|data$EQID),data,REML=FALSE)
感谢您的关注。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。