2015-10-13 32 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它在一個等距網格上是真實的。所以我會糾正我的答案.. –