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@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.

______________________________________________
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 https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to