2010-01-10 4 views
7

Tengo una situación extraña con scipy.stats.linregress parece estar devolviendo un error estándar incorrecto:scipy linregress function error de retorno estándar erróneo?

from scipy import stats 
x = [5.05, 6.75, 3.21, 2.66] 
y = [1.65, 26.5, -5.93, 7.96] 
gradient, intercept, r_value, p_value, std_err = stats.linregress(x,y) 
>>> gradient 
5.3935773611970186 
>>> intercept 
-16.281127993087829 
>>> r_value 
0.72443514211849758 
>>> r_value**2 
0.52480627513624778 
>>> std_err 
3.6290901222878866 

Mientras Excel devuelve el siguiente:

slope: 5.394 

intercept: -16.281 

rsq: 0.525 

steyX: 11.696 

error.TIPICO.XY es la función error estándar de Excel, volviendo 11.696 versus scipy's 3.63. ¿Alguien sabe lo que está pasando aquí? ¿Alguna forma alternativa de obtener el error estándar de una regresión en python, sin ir a Rpy?

Respuesta

4

Usted podría intentar la statsmodels paquete:

In [37]: import statsmodels.api as sm 

In [38]: x = [5.05, 6.75, 3.21, 2.66] 

In [39]: y = [1.65, 26.5, -5.93, 7.96] 

In [40]: X = sm.add_constant(x) # intercept 

In [41]: model = sm.OLS(y, X) 

In [42]: fit = model.fit() 

In [43]: fit.params 
Out[43]: array([ 5.39357736, -16.28112799]) 

In [44]: fit.rsquared 
Out[44]: 0.52480627513624789 

In [45]: np.sqrt(fit.mse_resid) 
Out[45]: 11.696414461570097 
+0

Brillante. Gracias ars. Exactamente lo que necesitaba. –

+0

Me alegra ayudar. :) – ars

8

El grupo de usuarios SciPy me acaba de informar que std_err aquí representa el error estándar de la línea de degradado, no el error estándar de las y pronosticadas, como en Excel. Sin embargo, los usuarios de esta función deben tener cuidado, ya que este no fue siempre el comportamiento de esta biblioteca: solía mostrar exactamente como Excel, y el cambio parece haber ocurrido en los últimos meses.

De todos modos sigue buscando un equivalente a STEYX en Python.

1

sí, esto es cierto - la estimación estándar del gradiente es lo linregress retornos; Sin embargo, la estimación estándar de la estimación (Y) está relacionada, y usted puede regresar al SEE al multiplicar el error estándar del gradiente (SEG) que le brinda linres: SEG = SEE/sqrt (suma de (X - promedio) X) ** 2)

Stack Exchange no maneja látex, pero la matemática es here si está interesado, en el encabezado "Analizar datos de muestra".

Cuestiones relacionadas