Jeff Newmiller
2021-Jan-26 09:20 UTC
[R] How to predict/interpolate new Y given knwon Xs and Ys?
model2 <- lm( x~y ) predict(model2, data.frame(y=26)) model2 is however not the inverse of model... if you need that then you need to handle that some other way than using predict, such as an invertible monotonic spline (or in this case a little algebra). On January 26, 2021 1:11:39 AM PST, Luigi Marongiu <marongiu.luigi at gmail.com> wrote:>Hello, >I have a series of x/y and a model. I can interpolate a new value of x >using this model, but I get funny results if I give the y and look for >the correspondent x: >``` >> x = 1:10 >> y = 2*x+15 >> model <- lm(y~x) >> predict(model, data.frame(x=7.5)) > 1 >30 >> predict(model, data.frame(y=26)) > 1 2 3 4 5 6 7 8 9 10 >17 19 21 23 25 27 29 31 33 35 >Warning message: >'newdata' had 1 row but variables found have 10 rows >> data.frame(x=7.5) > x >1 7.5 >> data.frame(y=26) > y >1 26 >``` >what is the correct syntax? >Thank you >Luigi > >______________________________________________ >R-help at 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.-- Sent from my phone. Please excuse my brevity.
Luigi Marongiu
2021-Jan-26 09:47 UTC
[R] How to predict/interpolate new Y given knwon Xs and Ys?
I see, so predict is mono-directional: only gives x with a know y but not the other way round. Thank you On Tue, Jan 26, 2021 at 10:20 AM Jeff Newmiller <jdnewmil at dcn.davis.ca.us> wrote:> > model2 <- lm( x~y ) > predict(model2, data.frame(y=26)) > > model2 is however not the inverse of model... if you need that then you need to handle that some other way than using predict, such as an invertible monotonic spline (or in this case a little algebra). > > On January 26, 2021 1:11:39 AM PST, Luigi Marongiu <marongiu.luigi at gmail.com> wrote: > >Hello, > >I have a series of x/y and a model. I can interpolate a new value of x > >using this model, but I get funny results if I give the y and look for > >the correspondent x: > >``` > >> x = 1:10 > >> y = 2*x+15 > >> model <- lm(y~x) > >> predict(model, data.frame(x=7.5)) > > 1 > >30 > >> predict(model, data.frame(y=26)) > > 1 2 3 4 5 6 7 8 9 10 > >17 19 21 23 25 27 29 31 33 35 > >Warning message: > >'newdata' had 1 row but variables found have 10 rows > >> data.frame(x=7.5) > > x > >1 7.5 > >> data.frame(y=26) > > y > >1 26 > >``` > >what is the correct syntax? > >Thank you > >Luigi > > > >______________________________________________ > >R-help at 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. > > -- > Sent from my phone. Please excuse my brevity.-- Best regards, Luigi
Luigi Marongiu
2021-Jan-27 09:30 UTC
[R] How to predict/interpolate new Y given knwon Xs and Ys?
Dear Jeff, I am not sure if I understood the procedure properly but it looks like it works: ``` Y <-c(1.301030, 1.602060, 1.903090, 2.204120, 2.505150, 2.806180, 3.107210, 3.408240, 3.709270, 4.010300, 4.311330, 4.612360, 4.913390, 5.214420, 5.515450, 5.816480, 6.117510, 6.418540, 6.719570, 7.020599, 7.321629, 7.622658, 7.923686, 8.224713, 8.525735, 8.826751, 9.127752, 9.428723, 9.729637, 10.030434, 10.330998, 10.631096, 10.930265, 11.227580, 11.521213, 11.807577, 12.079787, 12.325217, 12.523074, 12.647915, 12.693594, 12.698904, 12.698970, 12.698970, 12.698970) X <- 1:45 plot(Y~X) raw_value <- predict(lm(X[1:39]~Y[1:39]), newdata = data.frame(Y=6)) x <- unname(raw_value[!is.na(raw_value)]) # x= 16.62995 points(x, 6, pch = 16) ``` Here I used the points 1:39 because afterward there is a bend. But I am not clear why I need to use `lm(X~Y),` instead of `lm(Y~X)`. Thank you On Tue, Jan 26, 2021 at 10:20 AM Jeff Newmiller <jdnewmil at dcn.davis.ca.us> wrote:> > model2 <- lm( x~y ) > predict(model2, data.frame(y=26)) > > model2 is however not the inverse of model... if you need that then you need to handle that some other way than using predict, such as an invertible monotonic spline (or in this case a little algebra). > > On January 26, 2021 1:11:39 AM PST, Luigi Marongiu <marongiu.luigi at gmail.com> wrote: > >Hello, > >I have a series of x/y and a model. I can interpolate a new value of x > >using this model, but I get funny results if I give the y and look for > >the correspondent x: > >``` > >> x = 1:10 > >> y = 2*x+15 > >> model <- lm(y~x) > >> predict(model, data.frame(x=7.5)) > > 1 > >30 > >> predict(model, data.frame(y=26)) > > 1 2 3 4 5 6 7 8 9 10 > >17 19 21 23 25 27 29 31 33 35 > >Warning message: > >'newdata' had 1 row but variables found have 10 rows > >> data.frame(x=7.5) > > x > >1 7.5 > >> data.frame(y=26) > > y > >1 26 > >``` > >what is the correct syntax? > >Thank you > >Luigi > > > >______________________________________________ > >R-help at 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. > > -- > Sent from my phone. Please excuse my brevity.-- Best regards, Luigi