[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