Search code examples
requation-solvingnonlinear-optimization

empty argument error in rootSolve package in R


I am using rootSolve package in R to solve a system of 6 non-linear equations with 6 unknown variables. Here is my model

model <- function(x, parms) c(F1 = x[1] - parms[1] - 1 / ((-parms[7]) * (1 - x[4])),
                       F2 = x[2] - parms[2] - 1 / ((-parms[7]) * (1 - x[5])),
                       F3 = x[3] - parms[3] - 1 / ((-parms[7]) * (1 - x[6])),
                       F4 = x[4] - exp(parms[4] + parms[7] * x[1]) / (1 + exp(parms[4] + parms[7] * x[1]) + exp(parms[5] + parms[7] * x[2]) + exp(parms[6] + parms[7] * x[3])),
                       F5 = x[5] - exp(parms[5] + parms[7] * x[2]) / (1 + exp(parms[4] + parms[7] * x[1]) + exp(parms[5] + parms[7] * x[2]) + exp(parms[6] + parms[7] * x[3])),
                       F6 = x[6] - exp(parms[6] + parms[7] * x[3]) / (1 + exp(parms[4] + parms[7] * x[1]) + exp(parms[5] + parms[7] * x[2]) + exp(parms[6] + parms[7] * x[3])),
                       )

But when I call

new.equi = multiroot(model, start = initial.value, parms = parm)

where I pass value to initial.value and parm, I keep getting the error of

Error in c(F1 = x[1] - parms[1] - 1/((-parms[7]) * (1 - x[4])), F2 = x[2] -  : argument 7 is empty

Why is this happening? Why should there be argument 7?

I also tried to specify parameters in the model explicitly, like this, but still get the same error.

model <- function(x) c(F1 = x[1] - 1.265436 - 1 / (2.443700 * (1 - x[4])),
                          F2 = x[2] - 1.195844 - 1 / (2.443700 * (1 - x[5])),
                          F3 = x[3] - 1.288660 - 1 / (2.443700 * (1 - x[6])),
                          F4 = x[4] - exp(4.600528 - 2.443700 * x[1]) / (1 + exp(4.600528 - 2.443700 * x[1]) + exp(3.924360 - 2.443700 * x[2]) + exp(4.643808 - 2.443700 * x[3])),
                          F5 = x[5] - exp(3.924360 - 2.443700 * x[2]) / (1 + exp(4.600528 - 2.443700 * x[1]) + exp(3.924360 - 2.443700 * x[2]) + exp(4.643808 - 2.443700 * x[3])),
                          F6 = x[6] - exp(4.643808 - 2.443700 * x[3]) / (1 + exp(4.600528 - 2.443700 * x[1]) + exp(3.924360 - 2.443700 * x[2]) + exp(4.643808 - 2.443700 * x[3])),

)


Solution

  • You have a trailing comma. E.g.:

    > c(1,2,)
    Error in c(1, 2, ) : argument 3 is empty