Agreed, however this curve fits pretty well. Coronavirus R^2=.998. Much of the problem will be that the Chinese government is somewhat notorious for lying about disease spread to make things look better than they really are. This might be a case of GIGO
Fitting for the maximum value is pretty useless with data like this. You would need to be able to see the data curve down to make this prediction. (e.g. it still fits with L=1E9, Coronavirus).
To answer the question, this is how you would fit this in julia:
julia> using LsqFit
julia> d = [17,19,20,21,22,24,25,26];
julia> C = [41,62,201,291,440,830,1287,1975];
julia> model(x,p) = @. p[1]/(1+exp(p[2]*(p[3]-x)));
julia> fit = curve_fit(model,d,C,[10000,0.5,10]);
julia> coef(fit)
3-element Array{Float64,1}:
3.2851466556639015e6
0.40385634551986366
44.38662397812089
julia> confidence_interval(fit, 0.05)
3-element Array{Tuple{Float64,Float64},1}:
(-3.1459929604011664e9, 3.1525632537124944e9)
(0.27660508963623914, 0.5311076014034881)
(-2336.174503656719, 2424.947751612961)
Interestingly we get a different value for L, not sure why. However, as expected, the confidence interval is huge, showing that this parameter is not important to the fit.
Note that LsqFit currently returns symmetric confidence intervals, which is why the lower bound makes no sense here.