[R] How to fit a Hill model using braidrm package?

varin sacha v@r|n@@ch@ @end|ng |rom y@hoo@|r
Thu Sep 25 16:54:01 CEST 2025


Sorry I mistaken …

My previous script won’t work because drc does not have a function called hill().
That line 

fct = hill(names = c("Top", "Bottom", "Kd", "nH"))

Here is the correct way in drc with LL.4

library(drc)

hill_mod <- drm(
  Response ~ Dose,
  data = df,
  fct = LL.4(names = c("Bottom", "Top", "Kd", "nH"))
)

Best 
SV


> Le 25 sept. 2025 à 16:21, varin sacha <varinsacha using yahoo.fr> a écrit :
> 
> Hi,
> 
> 
> the drc package provides a Hill function. You could try this :
> 
> 
> 
> library(drc)
> 
> # Fit Hill function
> 
> hill_mod <- drm(
> 
>  Response ~ Dose,
> 
>  data = df,
> 
>  fct = hill(names = c("Top", "Bottom", "Kd", "nH"))
> 
> )
> 
> summary(hill_mod)
> 
> # Plot (log-scale on x-axis)
> 
> plot(hill_mod, log = "x")
> 
> 
> 
> 
> 
> The 4 parameters are:
> 
> Top : max response at low dose
> Bottom : min response at high dose
> Kd : inflection point
> nH : Hill slope
> Your data has Response ≈ 895 at low Dose and goes down to ≈ 850 at high Dose, so the Hill curve must be decreasing.
> 
> That means:
> 
> Top ≈ 895
> Bottom ≈ 850
> Kd ≈ midpoint dose (where Response ≈ halfway between 895 and 850 : ~872). Looking at your doses, this is around 10^{-6}.
> nH ≈ slope (start with 1, adjust later)
> 
> 
> Using your data
> 
> library(drc)
> 
> # Your data
> df = data.frame(
>  Response = c(890.72, 890.94, 880.16, 895.46, 890.8, 884.15,
>               895.63, 887.22, 879.57, 894.72, 888.91, 878.89,
>               895.49, 890.83, 882.27, 893.59, 889.92, 881.59,
>               892.53, 891.76, 880.98, 895.06, 890.32, 881.45,
>               897.21, 886.35, 876.19, 889.27, 878.11, 868.32,
>               876.05, 866.57, 859.16, 850.53, 857.96, 859.34,
>               862.02, 859.04, 859.73, 858.36, 863.64, 861.19),
>  Dose = c(0.0000000015, 0.0000000015, 0.0000000015, 0.000000003,
>           0.000000003, 0.000000003, 0.000000006, 0.000000006,
>           0.000000006, 0.000000012, 0.000000012, 0.000000012,
>           0.000000024, 0.000000024, 0.000000024, 0.000000048,
>           0.000000048, 0.000000048, 0.000000095, 0.000000095,
>           0.000000095, 0.00000018, 0.00000018, 0.00000018,
>           0.00000038, 0.00000038, 0.00000038, 0.00000078,
>           0.00000078, 0.00000078, 0.0000015, 0.0000015,
>           0.0000015, 0.000007, 0.000007, 0.000007,
>           0.000025, 0.000025, 0.000025, 0.00005, 0.00005, 0.00005)
> )
> 
> # Fit Hill function with starting values
> hill_mod <- drm(
>  Response ~ Dose,
>  data = df,
>  fct = hill(names = c("Top", "Bottom", "Kd", "nH")),
>  start = c(Top = 895, Bottom = 850, Kd = 1e-6, nH = 1)
> )
> 
> summary(hill_mod)
> 
> # Plot fit on log-scale x-axis
> plot(hill_mod, log = "x", ylim = c(840, 900))
> 
> 
> 
> Then, you can extract the fitted parameters (including Kd and nH) directly.
> 
> 
> 
> # Coefficients (parameter estimates)
> 
> coef(hill_mod)
> 
> 
> 
> # More detailed summary with SEs and p-values
> 
> summary(hill_mod)
> 
> 
> 
> # Confidence intervals for parameters
> 
> confint(hill_mod)
> 
> 
> 
> # Extract just the estimated Kd (dissociation constant)
> 
> Kd_est <- coef(hill_mod)["Kd:(Intercept)"]
> 
> 
> 
> # Extract Hill slope (nH)
> 
> nH_est <- coef(hill_mod)["nH:(Intercept)"]
> 
> Kd_est
> 
> nH_est
> 
> 
> 
> Best,
> 
> 
> 
> 
> 
> 
>> Le 25 sept. 2025 à 13:41, Luigi Marongiu <marongiu.luigi using gmail.com> a écrit :
>> 
>> Hello,
>> it was an assembler problem of the machine. I now managed to install
>> the package, I tried to fit a 4 or 5 parameters model but the fitting
>> is not good:
>> 
>> ```
>> df = data.frame(Response =    c(890.72,    890.94,    880.16,
>> 895.46,    890.8,    884.15,
>>                            895.63,    887.22,    879.57,    894.72,
>> 888.91,    878.89,
>>                            895.49,    890.83,    882.27,    893.59,
>> 889.92,    881.59,
>>                            892.53,    891.76,    880.98,    895.06,
>> 890.32,    881.45,
>>                            897.21,    886.35,    876.19,    889.27,
>> 878.11,    868.32,
>>                            876.05,    866.57,    859.16,    850.53,
>> 857.96,    859.34,
>>                            862.02,    859.04,    859.73,    858.36,
>> 863.64,    861.19),
>>               Dose =    c(0.0000000015,    0.0000000015,
>> 0.0000000015,    0.000000003,
>>                        0.000000003,    0.000000003,    0.000000006,
>> 0.000000006,
>>                        0.000000006,    0.000000012,    0.000000012,
>> 0.000000012,
>>                        0.000000024,    0.000000024,    0.000000024,
>> 0.000000048,
>>                        0.000000048,    0.000000048,    0.000000095,
>> 0.000000095,
>>                        0.000000095,    0.00000018,    0.00000018,
>> 0.00000018,    0.00000038,
>>                        0.00000038,    0.00000038,    0.00000078,
>> 0.00000078,    0.00000078,
>>                        0.0000015,    0.0000015,    0.0000015,
>> 0.000007,    0.000007,
>>                        0.000007,    0.000025,    0.000025,
>> 0.000025,    0.00005,    0.00005,    0.00005)
>> )
>> plot(Response~log10(Dose), df)
>> library(drc)
>> mod = drm(Response~Dose, data = df, fct=L.4())
>> plot(mod)
>> ```
>> How can I set a Hill function with `drm`?
>> Thank you
>> 
>>>> On Thu, Sep 25, 2025 at 1:01 PM varin sacha <varinsacha using yahoo.fr> wrote:
>>> 
>>> Hi,
>>> 
>>> What about directly calling the model function with basicdrm library ?
>>> 
>>> library(basicdrm)
>>> 
>>> # Fit Hill model
>>> m <- drm(Response ~ Dose, data = df, fct = hillfct())
>>> 
>>> summary(m)
>>> 
>>> # Predict & plot
>>> plot(m, log = "x")
>>> 
>>> Best,
>>> SV
>>> 
>>>>> Le 25 sept. 2025 à 10:12, varin sacha via R-help <r-help using r-project.org> a écrit :
>>>> 
>>>> 
>>>> Hi,
>>>> Could you paste me the exact error message you’re getting when trying install.packages("drc")
>>>> 
>>>> 
>>>>> Le 25 sept. 2025 à 09:02, Luigi Marongiu <marongiu.luigi using gmail.com> a écrit :
>>>>> 
>>>>> I got the same errors:
>>>>> ```
>>>>>> library(basicdrm)
>>>>>> findBestHill(Response~Dose, df)
>>>>> Error in findBestHill(Response ~ Dose, df) :
>>>>> could not find function "findBestHill"
>>>>>> evalHillEqn(Response~Dose, df)
>>>>> Error in evalHillEqn(Response ~ Dose, df) :
>>>>> could not find function "evalHillEqn"
>>>>> ```
>>>>> 
>>>>>>> On Wed, Sep 24, 2025 at 1:47 PM peter dalgaard <pdalgd using gmail.com> wrote:
>>>>>> 
>>>>>> They're in basicdrm, not braidrm...
>>>>>> 
>>>>>> -pd
>>>>>> 
>>>>>>>> On 24 Sep 2025, at 11:52 , Luigi Marongiu <marongiu.luigi using gmail.com> wrote:
>>>>>>> 
>>>>>>> Hello,
>>>>>>> I have a set of data coming from a dissociation experiment
>>>>>>> (protein/ligand). Since the data is required to calculate the constant
>>>>>>> of dissociation (Kd) of this pair, I am looking for a way of fitting a
>>>>>>> Hill function to the data.
>>>>>>> I have seen that the package braidrm
>>>>>>> (https://cran.r-project.org/web/packages/braidrm/index.html) provides
>>>>>>> this function, but when I launch the function `evalHillEqn`,
>>>>>>> `findBestHill` and so forth I get the error of function not found.
>>>>>>> Yet, the package is given as properly installed by the system.
>>>>>>> How can I run this package?
>>>>>>> Is there an alternative way to fit a Hill function to these data?
>>>>>>> Thank you
>>>>>>> 
>>>>>>> ```
>>>>>>> df = data.frame(Response =    c(890.72,    895.46,    895.63,
>>>>>>> 894.72,    895.49,    893.59,
>>>>>>>            892.53,    895.06,    897.21,    889.27,    876.05,
>>>>>>> 857.96,    862.02,    858.36,
>>>>>>>            890.94,    890.8,    887.22,    888.91,    890.83,
>>>>>>> 889.92,    891.76,    890.32,
>>>>>>>            886.35,    878.11,    866.57,    859.04,    863.64,
>>>>>>> 880.16,    884.15,    879.57,
>>>>>>>            878.89,    882.27,    881.59,    880.98,    881.45,
>>>>>>> 876.19,    868.32,    859.16,
>>>>>>>            850.53,    853.21,    859.34,    859.73,    861.19),
>>>>>>>            Dose =    c(0.0000000015,    0.000000003,
>>>>>>> 0.000000006,    0.000000012,
>>>>>>>                   0.000000024,    0.000000048,    0.000000095,
>>>>>>> 0.00000018,
>>>>>>>                   0.00000038,    0.00000078,    0.0000015,
>>>>>>> 0.000013,    0.000025,
>>>>>>>                   0.00005,    0.0000000015,    0.000000003,
>>>>>>> 0.000000006,
>>>>>>>                   0.000000012,    0.000000024,    0.000000048,
>>>>>>> 0.000000095,
>>>>>>>                   0.00000018,    0.00000038,    0.00000078,
>>>>>>> 0.0000015,    0.000025,
>>>>>>>                   0.00005,    0.0000000015,    0.000000003,
>>>>>>> 0.000000006,
>>>>>>>                   0.000000012,    0.000000024,    0.000000048,
>>>>>>> 0.000000095,
>>>>>>>                   0.00000018,    0.00000038,    0.00000078,
>>>>>>> 0.0000015,    0.000003,
>>>>>>>                   0.000006,    0.000013,    0.000025,    0.00005)
>>>>>>> )
>>>>>>> plot(Response~log10(Dose), df)
>>>>>>> library(braidrm)
>>>>>>> evalHillEqn(Response~Dose, df)
>>>>>>> findBestHill(Response~Dose, df)
>>>>>>> ```
>>>>>>> 
>>>>>>> ______________________________________________
>>>>>>> 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.
>>>>>> 
>>>>>> --
>>>>>> Peter Dalgaard, Professor,
>>>>>> Center for Statistics, Copenhagen Business School
>>>>>> Solbjerg Plads 3, 2000 Frederiksberg, Denmark
>>>>>> Phone: (+45)38153501
>>>>>> Office: A 4.23
>>>>>> Email: pd.mes using cbs.dk  Priv: PDalgd using gmail.com
>>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Best regards,
>>>>> Luigi
>>>>> 
>>>>> ______________________________________________
>>>>> 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.
>>>> 
>>>>  [[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 https://www.R-project.org/posting-guide.html
>>>> and provide commented, minimal, self-contained, reproducible code.
>>> 
>> 
>> 
>> --
>> Best regards,
>> Luigi
> 
>    [[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 https://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list