I am trying to fit some data using this equation:y= (exp(p1x1+p2x2+p3)+p4)^p5
here is a reproducible example:
dat1 <- array(1:60, c(3,5,4));dat1=dat1*2
dat2 <- array(1:60, c(3,5,4));dat2=dat2*0.5
dat3 <- array(1:60, c(3,5,4))
#reorder dimensions
dat1 <- aperm(dat1, c(3,1,2));dat2 <- aperm(dat2, c(3,1,2))
dat3 <- aperm(dat3, c(3,1,2))
#make array a matrix
dat1a <- dat1;dim(dat1a) <- c(dim(dat1)[1],prod(dim(dat1)[2:3]))
dat2a <- dat2;dim(dat2a) <- c(dim(dat2)[1],prod(dim(dat2)[2:3]))
dat3a <- dat3;dim(dat3a) <- c(dim(dat3)[1],prod(dim(dat3)[2:3]))
#function for fitting
fun <- function(x1, x2, y) {
keep <- !(is.na(x1) | is.na(x2) | is.na(y))
if (sum(keep) > 1) {
res <- summary(nlsLM(y[keep]~(exp(p1*x1[keep]+p2*x2[keep]+p3)+p4)^p5, x1=x1,x2=x2,y=y, start=list(p1=4.5,p2=5,p3=3,p4=0,p5=1)))$coefficients[, 1]
} else {
res <- c(NA, NA, NA,NA,NA)
}
res
}
#loop for fitting
res <- mapply(fun, x1=as.data.frame(dat1a), x2=as.data.frame(dat2a), y=as.data.frame(dat3a))
but I got this error:
Error in fn(par, ...) :
unused arguments (x1 = c(2, 32, 62, 92), x2 = c(0.5, 8, 15.5, 23), y = c(1, 16, 31,
Update according to the answer of @ahmohamed:
dat2 <- array(1:60, c(3,5,4));dat2=dat2*0.5
dat3 <- array(1:60, c(3,5,4))
dat1=(exp(4*dat2+2*dat3+0.3)+0)^1
#reorder dimensions
dat1 <- aperm(dat1, c(3,1,2));dat2 <- aperm(dat2, c(3,1,2))
dat3 <- aperm(dat3, c(3,1,2))
#make array a matrix
dat1a <- dat1;dim(dat1a) <- c(dim(dat1)[1],prod(dim(dat1)[2:3]))
dat2a <- dat2;dim(dat2a) <- c(dim(dat2)[1],prod(dim(dat2)[2:3]))
dat3a <- dat3;dim(dat3a) <- c(dim(dat3)[1],prod(dim(dat3)[2:3]))
fun <- function(x1, x2, y) {
keep <- !(is.na(x1) | is.na(x2) | is.na(y))
if (sum(keep) > 1) {
res <- summary(nlsLM(y~(exp(p1*x1+p2*x2+p3)+p4)^p5, data = data.frame(x1=x1,x2=x2,y=y)[keep,], start=list(p1=4,p2=2,p3=0.3,p4=0,p5=1)))$coefficients[, 1]
} else {
res <- c(NA, NA, NA,NA,NA)
}
res
}
res <- mapply(fun, x1=as.data.frame(dat1a), x2=as.data.frame(dat2a), y=as.data.frame(dat3
error:Error in numericDeriv (form [[3L]], names (ind), env):
Missing or infinite value obtained in the calculation of the model