[R] How to predict intersection value between regression and line in R?
Luigi Marongiu
m@rong|u@|u|g| @end|ng |rom gm@||@com
Sat Apr 12 19:56:28 CEST 2025
Thank you. Sorry for the cyc variable, I simplified in 35 in the first
call but not in the second. The actual value would be
```
df = data.frame(Cycles = 1:35, Values = val[1:35)
```
I'll try your suggestion.
Best regards
On Fri, Apr 11, 2025 at 8:05 PM Duncan Murdoch <murdoch.duncan using gmail.com> wrote:
>
> Your example doesn't run because it uses a variable `cyc` which you
> didn't include.
>
> But in general, I think you are mixing up two separate problems here.
>
> The first problem is creating a function of x (which is Cycles in your
> dataset). You used the predictions from a glm() to do this.
>
> That's a reasonable way to create a function with a range of 0 to 1, but
> you want a function with a different range. Dividing by the max is one
> way to get it, but there are others. I'd say a better approach would be
> to think about the problem from a subject matter point of view and
> determine a class of functions that match your needs. After you've done
> that, you might use glm() to find the particular version of that
> function (i.e. the unknown parameters), or maybe some other method.
>
> The second problem is finding where that function intersects a line. In
> your sample code, you were trying to intersect a horizontal line. If
> that's always the case, then it's a problem of inverting the function
> from the first problem. Just write out y = f(x) and solve for x =
> f^-1(y). If the formula isn't convenient, you can approximate the
> answer using the R function uniroot().
>
> Duncan Murdoch
>
> On 2025-04-11 11:53 a.m., Luigi Marongiu wrote:
> > I am trying to predict the intersection value between a curve and a line.
> > I can fit a logistic model to the data by converting the data to the
> > range 0-1. How can I determine the intersection with a line?
> > Also, is there a way to do the same without converting the data?
> > Here is an example:
> >
> > ```
> > val = c(120.64, 66.14, 34.87, 27.11, 8.87, -5.8,
> > 4.52, -7.16, -17.39,
> > -14.29, -20.26, -14.99, -21.05, -20.64, -8.03,
> > -21.56, -1.28, 15.01,
> > 75.26, 191.76, 455.09, 985.96, 1825.59, 2908.08,
> > 3993.18, 5059.94,
> > 6071.93, 6986.32, 7796.01, 8502.25, 9111.46,
> > 9638.01, 10077.19,
> > 10452.02, 10751.81, 11017.49, 11240.37, 11427.47,
> > 11570.07, 11684.96,
> > 11781.77, 11863.35, 11927.44, 11980.81, 12021.88,
> > 12058.35, 12100.63,
> > 12133.57, 12148.89, 12137.09)
> > df = data.frame(Cycles = 1:35, Values = val[1:cyc])
> > M = max(df$Values)
> > df$Norm = df$Values/M
> > df$Norm[df$Norm<0] = 0
> > b_model = glm(Norm ~ Cycles, data=df, family=binomial)
> > x = 0.15
> > plot(Norm ~ Cycles, df, main="Normalized view",
> > xlab=expression(bold("Amplification cycle")),
> > ylab=expression(bold("Fluorescence (normalized)")),
> > type="l", lwd=3, col="blue")
> > lines(b_model$fitted.values ~ df$Cycles, col="red", lwd=2, lty=2)
> > abline(h=x, col="green", lwd=2)
> > ```
> > Thank you
> >
> > ______________________________________________
> > 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 https://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
--
Best regards,
Luigi
More information about the R-help
mailing list