Thanks Rui and everyone for your help! Using ` constraint = "increase"` and `lambda = 0.1` did it. If we ignore the first point, `lambda = -1` option is also possible. `cobs` will automatically choose a lambda value
plot(fit_result) summary(fit_result) # COBS smoothing spline (degree = 2) from call: # cobs(x = dat$x, y = dat$y, constraint = "increase", lambda = -1, pointwise = con) # {tau=0.5}-quantile; dimensionality of fit: 29 from {29} # x$knots[1:9]: -6.0e-06, 2.5e-01, 5.0e-01, ... , 6.0e+00 # lambda = 1.4494, selected via SIC, out of 25 ones. # with 10 pointwise constraints # coef[1:11]: -6.1866e-05, 1.1065e+00, 2.7435e+00, 3.1815e+00, 3.7572e+00, ... , 1.9183e+01 # R^2 = 100% ; empirical tau (over all): 5/10 = 0.5 (target tau= 0.5) Best, -- Tung On Wed, Jan 22, 2020 at 9:39 AM Rui Barradas <ruipbarra...@sapo.pt> wrote: > Hello, > > This seems to "work". It doesn't give errors nor warnings and the fitted > line passes through the given points. > > > fit_result <- cobs(dat$x, dat$y, > constraint = "increase", > lambda = 0.1, > pointwise = con) > > plot(y~x, dat) > pred <- predict(fit_result) > lines(pred[,1], pred[,2], col = "red") > > > Hope this helps, > > Rui Barradas > > Às 15:00 de 22/01/20, Tung Nguyen escreveu: > > 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@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. > > > [[alternative HTML version deleted]] ______________________________________________ R-help@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.