[R] Error with constrained curve fitting through specific points

Abby Spurdle @purd|e@@ @end|ng |rom gm@||@com
Wed Jan 22 22:01:53 CET 2020


This is probably the *simplest* approach:

> f = splinefun (dat$x, dat$y)

> #simple plot
> x = seq (0, 6,, 200)
> plot (dat)
> lines (x, f (x) )

If that's not what you want, perhaps you could expand on "constraints"
or "best fitting"...

Expanding on what Bert said, spline fitting and (regression style)
curve fitting are different.
While it is possible to constrain a regression curve to pass through
one or more points, there aren't many situations where one would want
to do that (constraining yhat=0 given x=0, perhaps?), and your example
suggests that you're wanting a spline...

B.


On Thu, Jan 23, 2020 at 4:01 AM Tung Nguyen <thanhtungmilan using gmail.com> wrote:
>
> Hello R-Help,
>
> I'm trying to find the best fitting curve through a given set of points.
> The fitted curve must also pass through these points. I found an answer on
> Cross Validated which suggested to use the `cobs: Constrained B-Splines
> (Sparse Matrix Based)` package. However, I got an error while testing it
> with my sample data:
>
> Error in x %*% coefficients: NA/NaN/Inf in foreign function call (arg 2)
>
> *My question*: what caused this error and how can I fix it? Any suggestion
> is greatly appreciated. Thanks!
>
> library(cobs)
>
> dat <- data.frame(
>   x = c(1e-06,0.25,0.5,0.75,1,2,3,4,5,6),
>   y = c(1e-07,1.925,2.9625,3.469375,
>         3.875,4.5315,4.89,5.09375,5.216,5.46))
> dat
> #>          x         y#> 1  1.0e-06 0.0000001#> 2  2.5e-01
> 1.9250000#> 3  5.0e-01 2.9625000#> 4  7.5e-01 3.4693750#> 5  1.0e+00
> 3.8750000#> 6  2.0e+00 4.5315000#> 7  3.0e+00 4.8900000#> 8  4.0e+00
> 5.0937500#> 9  5.0e+00 5.2160000#> 10 6.0e+00 5.4600000
> # visual inspection
> plot(dat); lines(dat)
>
> # define constrained points
> con <- matrix(
>   cbind(c(0,0,0,0,0,0,0,0,0,0),
>         c(1e-06,0.25,0.5,0.75,1,2,3, 4,5,6),
>         c(1e-07,1.925,2.9625,3.469375,
>           3.875,4.5315,4.89,5.09375,5.216, 5.46)),
>   ncol = 3, nrow = 10)
> # curve fitting
> fit_result <- cobs(dat$x, dat$y, pointwise = con)*#> qbsks2():
> #>  Performing general knot selection ...
> #> Error in x %*% coefficients: NA/NaN/Inf in foreign function call (arg 2)*
>
>
> Best regards,
>
> -- Tung
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list