我有一些我认为最适合 sigmoid 函数的二维数据。我可以使用以下 python 代码片段进行拟合。
from scipy.optimize import curve_fit
ydata = array([0.1,0.15,0.2,0.3,0.7,0.8,0.9, 0.9, 0.95])
xdata = array(range(0,len(ydata),1))
def sigmoid(x, x0, k):
y = 1 / (1+ np.exp(-k*(x-x0)))
return y
popt, pcov = curve_fit(sigmoid, xdata, ydata)
但是,我想使用最大似然方法,以便我可以报告可能性。我认为使用statsmodels包可以做到这一点,但我无法弄清楚。任何帮助,将不胜感激。
更新:
我认为该方法可能是重新定义似然函数,如此处所述:
http://statsmodels.sourceforge.net/devel/examples/generated/example_gmle.html
上述代码片段的绘图如下所示:
更新 2:
以下是如何在 R 中执行此操作:
require(bbmle)
# this sigmoid function is used to make some fake data
rsigmoid <- function(y1,y2,xi,xmid,w){
y1+(y2-y1)/(1+exp((xmid-xi)/w))
}
counts <- round(rsigmoid(0, 1, 1:100+rnorm(100,0,3), 50, 10)*20,0)
# NOTE THAT THE SIGMOID FUNCTION IS REDEFINED AS AN R FORMULA
fit_sigmoid <- mle2(P1 ~ dbinom(prob=y1+(y2-y1)/(1+exp((xmid-xi)/w)), size=N),
start = list(xmid=50, w=10),
data=list(y1=0, y2=1, N=20, P1=counts, xi=1:100),
method="L-BFGS-B", lower=c(xmid=1,w=1e-5), upper=c(xmid=100,w=100))