[R-sig-ME] Input function when using nlme() in nlme package
Abdullah içen
@bdu||@h|cen @end|ng |rom gm@||@com
Wed Nov 11 15:35:29 CET 2020
Hi all,
I've tried nlmer() function but it couldn't converge for some reason. Now
i'm trying to use nlme() function in nlme package my function is below
Sandikkaya_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, b2 ,b3 ##
.grad[, "b1"] <- .exprN2
.grad[, "b2"] <- .exprZ2
.grad[, "b3"] <- .exprNL9*.exprNL6
.grad[, "c"] <- b3*.exprNL6*((1/(.exprNL8))*(-.exprNL7/c))
attr(.value, "gradient") <- .grad
.value
}
and i tried to run nlme() like
fm1 <- nlme(log(PSAm) ~ Sandikkaya_NLSite(PSAr, Vs30, h800, b1, b2, b3, 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 and c are my fixed effects and my random effects in lmer is
(1|EQID), EQID is earthquake ids in my data frame (data) my structure in
lmer is below
fm <-lmer(log(data$PSAm)~ 0 + data$VN + data$Z1 + data$VN03 + data$VN19 +
data$VN21 + data$VN28 + (1|data$EQID) , data, REML=FALSE)
thank you for your attention.
[[alternative HTML version deleted]]
More information about the R-sig-mixed-models
mailing list