regresión regresion programar paso multiple logistica lineal graficar python matplotlib pandas statsmodels

python - regresion - Obtener la línea de regresión para trazar una regresión de Pandas



regresion lineal python paso a paso (1)

Compruebe qué valores tiene en sus matrices y variables.

Supongo que tu x es simplemente nans, porque usas los mínimos y máximos de Python. Al menos eso sucede con la versión de Pandas que tengo abierta actualmente.

Los métodos mínimo y máximo deberían funcionar, ya que saben cómo manejar nan o valores perdidos

>>> x = pd.Series([np.nan,2], index=[''const'',''slope'']) >>> x const NaN slope 2 dtype: float64 >>> min(x) nan >>> max(x) nan >>> x.min() 2.0 >>> x.max() 2.0

He intentado con los pd.ols (pandas) y los (modelos de estadísticas) sm.ols obtener un gráfico de dispersión de regresión con la línea de regresión , puedo obtener el diagrama de dispersión, pero parece que no puedo obtener los parámetros para obtener el línea de regresión a la gráfica Probablemente sea obvio que estoy haciendo una codificación de cortar y pegar aquí :-( (usando esto como una guía: http://nbviewer.ipython.org/github/weecology/progbio/blob/master/ipynbs/statistics.ipynb

Mis datos están en un marco de datos de pandas y la columna x está fusionada2 [: - 1] .lastqu y la columna de datos y está fusionada2 [: - 1]. Unidades Mi código ahora es el siguiente: para obtener la regresión:

def fit_line2(x, y): X = sm.add_constant(x, prepend=True) #Add a column of ones to allow the calculation of the intercept model = sm.OLS(y, X,missing=''drop'').fit() """Return slope, intercept of best fit line.""" X = sm.add_constant(x) return model model=fit_line2(merged2[:-1].lastqu,merged2[:-1].Units) print fit.summary()

^^^^ parece estar bien

intercept, slope = model.params << I don''t think this is quite right plt.plot(merged2[:-1].lastqu,merged2[:-1].Units, ''bo'') plt.hold(True)

^^^^^ esto obtiene el diagrama de dispersión hecho * * y lo siguiente no me da una línea de regresión

x = np.array([min(merged2[:-1].lastqu), max(merged2[:-1].lastqu)]) y = intercept + slope * x plt.plot(x, y, ''r-'') plt.show()

Un snippit del Dataframe: el [: -1] elimina el período actual de los datos que posteriormente serán una proyección

Units lastqu Uperchg lqperchg fcast errpercent nfcast date 2000-12-31 7177 NaN NaN NaN NaN NaN NaN 2001-12-31 10694 2195.000000 0.490038 NaN 10658.719019 1.003310 NaN 2002-12-31 11725 2469.000000

Editar:

Encontré que podía hacer:

fig = plt.figure(figsize=(12,8)) fig = sm.graphics.plot_regress_exog(model, "lastqu", fig=fig)

como se describe aquí en el documento de Statsmodels, que parece ser lo principal que quería (y más) ¡aún me gustaría saber dónde me equivoqué en el código anterior!