[R] argument "x" is missing in minpack.lm
Ivan Krylov
kry|ov@r00t @end|ng |rom gm@||@com
Tue Jun 30 15:41:00 CEST 2020
(Adding R-help back to Cc:)
On Tue, 30 Jun 2020 14:44:29 +0200
Luigi Marongiu <marongiu.luigi using gmail.com> wrote:
> Ok, I tried with:
> ```
> holly <- function(p) {
> y = (p$a * p$x^2) / (p$b^2 + p$x^2)
> return(y)
> }
> X = 1:60
> A = 3261
> B = 10
> X = c(8, 24, 39, 63, 89, 115, 153, 196, 242, 287, 344,
> 408, 473, 546, 619, 705, 794, 891, 999, 1096, 1242, 1363, 1506,
> 1648, 1753, 1851, 1987, 2101, 2219, 2328, 2425, 2575, 2646, 2698,
> 2727, 2771, 2818, 2853, 2895, 2926, 2964, 2995, 3025, 3053, 3080,
> 3102, 3119, 3141, 3152, 3159, 3172, 3182, 3196, 3209, 3220, 3231,
> 3239, 3246, 3252, 3261)
You are correct in returning a vector of residuals to minimise a sum of
squares of, but X seems to be an independent variable, not a parameter
to optimize, so it shouldn't be passed as such. Instead you can either
close over X:
X <- c(...)
holly <- function(p) (p$a * X^2) / (p:b^2 + X^2)
# function holly now "contains" the vector X
or pass X as an argument that nls.lm will pass to your function:
holly <- function(p, X) (p$a * X^2) / (p$b^2 + X^2)
# nls.lm will pass the X argument to function holly
O <- nls.lm(par = list(a = 3261, b = 10), fn = holly, X = X)
summary(O)
# Parameters:
# Estimate Std. Error t value Pr(>|t|)
# a 3.090e-16 4.102e-17 7.533e+00 3.72e-10 ***
# b 1.000e+01 1.525e-08 6.558e+08 < 2e-16 ***
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 3.107e-16 on 58 degrees of freedom
# Number of iterations to termination: 2
# Reason for termination: Relative error between `par' and the solution
# is at most `ptol'.
--
Best regards,
Ivan
More information about the R-help
mailing list