Nls an eine Kurve anpassen, die durch einen bestimmten Punkt verläuft

Ich versuche einen Boltzmann Sigmoid zu montieren1/(1+exp((x-p1)/p2)) zu diesem kleinen experimentellen Datensatz:

xdata <- c(-60,-50,-40,-30,-20,-10,-0,10)
ydata <- c(0.04, 0.09, 0.38, 0.63, 0.79, 1, 0.83, 0.56)

Ich weiß, dass es ziemlich einfach ist, es zu tun. Zum Beispiel mitnls:

fit <-nls(ydata ~ 1/(1+exp((xdata-p1)/p2)),start=list(p1=mean(xdata),p2=-5))

Ich erhalte die folgenden Ergebnisse:

Formula: ydata ~ 1/(1 + exp((xdata - p1)/p2))

Parameters:
   Estimate Std. Error t value Pr(>|t|)    
p1  -33.671      4.755  -7.081 0.000398 ***
p2  -10.336      4.312  -2.397 0.053490 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1904 on 6 degrees of freedom

Number of iterations to convergence: 13 
Achieved convergence tolerance: 7.079e-06

Wie auch immer, ichbrauche (aus theoretischen Gründen) Die angepasste Kurve muss genau durch den Punkt @ verlaufe(-70, 0). Obwohl der Wert des oben gezeigten angepassten Ausdrucks bei @ nahe Null liex = -70, es ist nicht genau Null, was ich nicht will.

Also, die Frage ist: Gibt es eine Möglichkeit, @ zu sagnls (oder eine andere Funktion), um dem gleichen Ausdruck zu entsprechen, ihn jedoch zu zwingen, einen bestimmten Punkt zu passieren?

Aktualisieren

Wie in den Kommentaren erwähnt, ist es mathematisch unmöglich, die Anpassung mit der von mir bereitgestellten Funktion (dem Boltzmann-Sigmoid) zu zwingen, den Punkt (-70,0) zu durchlaufen. Auf der anderen Seite haben @Cleb und @BenBolker erklärt, wie die Anpassung erzwungen werden kann, um einen anderen Punkt (z. B. -50, 0,09) zu durchlaufen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage