[R] differing number of rows when running nls regression
Luigi Marongiu
m@rong|u@|u|g| @end|ng |rom gm@||@com
Sat Sep 20 08:02:16 CEST 2025
I have some data (y=Response, x=Dose) that is distributed roughly as a
curve. I am trying to fit a non-linear regression model on the data
using negative logistic function (even if the data show a rise in the
final part of the curve that the logistic won't accommodate for).
I used a rough graphical approach to guess the starting values then
the package `nlstools` for a better overview of the data. However, I
get the error "differing number of rows".
If I run `nls` directly, I get the error" "Error in 1 + exp :
non-numeric argument to binary operator"
Why is that happening?
How can I set the model?
Is there a better curve function to fit the 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)
abline(a=500, b=-60)
abline(v=log10(0.3e-6))
A = 0.3e-6 # plateau
B = -60 # slope
library(nlstools) # NL regression
form = as.formula(Response ~ ( (exp(a+b*Dose)) / (1+exp-(a+b*Dose)) ) )
preview(form, data = x_25_2024, start=list(a=A, b=B))
nls(Response ~ ( (exp(a+b*Dose)) / (1+exp-(a+b*Dose)) ),
data=df, start=list(a=A, b=B))
```
More information about the R-help
mailing list