tsa ols coefficients python scipy statsmodels

python - ols - statsmodels time series



¿Dónde puedo encontrar loco(desviación media absoluta) en scipy? (9)

Estoy usando:

from math import fabs a = [1, 1, 2, 2, 4, 6, 9] median = sorted(a)[len(a)//2] for b in a: mad = fabs(b - median) print b,mad

Parece ser que una vez se proporcionó una función para calcular la desviación absoluta media para un conjunto de números:

http://projects.scipy.org/scipy/browser/trunk/scipy/stats/models/utils.py?rev=3473

Sin embargo, no puedo encontrarlo en ninguna parte en las versiones actuales de scipy. Por supuesto, es posible simplemente copiar el código antiguo del repositorio, pero prefiero usar la versión de scipy. ¿Dónde puedo encontrarlo, o ha sido reemplazado o eliminado?


La versión actual de statsmodels tiene mad en statsmodels.robust :

>>> import numpy as np >>> from statsmodels import robust >>> a = np.matrix( [ ... [ 80, 76, 77, 78, 79, 81, 76, 77, 79, 84, 75, 79, 76, 78 ], ... [ 66, 69, 76, 72, 79, 77, 74, 77, 71, 79, 74, 66, 67, 73 ] ... ], dtype=float ) >>> robust.mad(a, axis=1) array([ 2.22390333, 5.18910776])

Tenga en cuenta que, de forma predeterminada, esto calcula la estimación robusta de la desviación estándar suponiendo una distribución normal al escalar el resultado como un factor de escala; de help

Signature: robust.mad(a, c=0.67448975019608171, axis=0, center=<function median at 0x10ba6e5f0>)

La versión en R hace una normalización similar. Si no quieres esto, obviamente simplemente establece c=1 .

(Un comentario anterior mencionó que se statsmodels.robust.scale de statsmodels.robust.scale . La implementación está en statsmodels/robust/scale.py (ver github ) pero el paquete robust no exporta scale , sino que exporta las funciones públicas en scale.py explícitamente. )



Parece que scipy.stats.models se removed en agosto de 2008 debido a una cocción insuficiente. El desarrollo ha migrado a statsmodels .


Por lo que vale, lo uso para MAD:

def mad(arr): """ Median Absolute Deviation: a "Robust" version of standard deviation. Indices variabililty of the sample. https://en.wikipedia.org/wiki/Median_absolute_deviation """ arr = np.ma.array(arr).compressed() # should be faster to not use masked arrays. med = np.median(arr) return np.median(np.abs(arr - med))



Solo estoy aprendiendo Python y Numpy, pero aquí está el código que escribí para revisar la tarea de matemáticas de mi estudiante de séptimo grado que quería el M (ean) AD de 2 conjuntos de números:

Datos en filas de matriz de Numpy:

import numpy as np >>> a = np.matrix( [ [ 80, 76, 77, 78, 79, 81, 76, 77, 79, 84, 75, 79, 76, 78 ], // ... [ 66, 69, 76, 72, 79, 77, 74, 77, 71, 79, 74, 66, 67, 73 ] ], dtype=float ) >>> matMad = np.mean( np.abs( np.tile( np.mean( a, axis=1 ), ( 1, a.shape[1] ) ) - a ), axis=1 ) >>> matMad matrix([[ 1.81632653], [ 3.73469388]])

Datos en matrices Numpy 1D:

>>> a1 = np.array( [ 80, 76, 77, 78, 79, 81, 76, 77, 79, 84, 75, 79, 76, 78 ], dtype=float ) >>> a2 = np.array( [ 66, 69, 76, 72, 79, 77, 74, 77, 71, 79, 74, 66, 67, 73 ], dtype=float ) >>> madA1 = np.mean( np.abs( np.tile( np.mean( a1 ), ( 1, len( a1 ) ) ) - a1 ) ) >>> madA2 = np.mean( np.abs( np.tile( np.mean( a2 ), ( 1, len( a2 ) ) ) - a2 ) ) >>> madA1, madA2 (1.816326530612244, 3.7346938775510199)


Usando solo numpy :

def meanDeviation(numpyArray): mean = np.mean(numpyArray) f = lambda x: abs(x - mean) vf = np.vectorize(f) return (np.add.reduce(vf(numpyArray))) / len(numpyArray)


[EDITAR] Ya que esto sigue siendo abatido: sé que la desviación absoluta media es una estadística más comúnmente utilizada, pero el interrogador preguntó por la desviación media absoluta, y aquí hay cómo hacerlo:

from numpy import mean, absolute def mad(data, axis=None): return mean(absolute(data - mean(data, axis)), axis)