2015-10-13 55 views
0

我使用statsmodel为使Python中的分对数回归模型的拐点:的Python:找到使用statsmodel

import statsmodels.formula.api as smf 

我必须跟X1值和d值的数据帧。 d列是我的因变量。我绘制d比X1并获得:

enter image description here

现在,我使用statsmodel适合分对数回归模型:

logit_mod = smf.logit('d ~ x1', data = df).fit() 
print 
print(logit_mod.summary()) 
logithat = logit_mod.predict(df) 

plt.plot(df['x1'], logithat, 'o') 
plt.scatter(df['x1'], df['d'], color='orange') 

结果是这样的:

enter image description here

怎么办我获得该logit曲线的拐点的值?

谢谢!

+0

logit函数是以零为中心对称的,或者概率为0.5。我认为拐点是线性预测为0的地方0 = const + b * x_I,其中b是斜率系数,所以它应该是'x_I = -params [0]/params [1]'。 (未验证) – user333700

+0

那么你的意思是'x_I = -logit_mod.params [0]/logit_mod.params [1]'?因为那会返回0.511,这与我的预期相符。 – Steve

回答

0
import pandas as pds 
df1 = pds.DataFrame({'lgt' : logithat,'x':x1}).set_index('x') 
grid = np.linspace(df1.index.min(),df1.index.max(),df1.shape[0]+1) 
df2 = pds.DataFrame({'grid':grid}).reset_index().set_index('grid') 
df2 = pds.concat([df1,df2],join='outer',axis=1) 
df2['lgt_'] = df2['lgt'].interpolate() 


inflexion  = df2['lgt_'].diff().argmax() 

fig = plt.figure() 
ax = fig.add_subplot(111) 
df2['lgt_'].plot(ax=ax) 
ax.vlines(inflexion,df2['lgt_'].min(),df2['lgt_'].ix[inflexion]) 
+0

这很有帮助!虽然它返回0.94的值,所以我认为它给了我一些与拐点不同的东西。这个数值可能是平衡点还是曲线开始变平的地方? – Steve

+0

如果x值在均匀间隔的网格上,或者更好,则在x的等间距网格上评估预测值。否则,有限差分将基于x的不同增量。 – user333700

+0

是的,它确切@ user333700它在一个等距网格上是真实的。所以我会纠正我的答案.. –