J'ai un problème de devoir dans lequel je suis supposé écrire une fonction pour le Kurtosis comme décrit ici :
Le thêta au dénominateur est l'écart type (racine carrée de la variance) et le x avec la barre au numérateur est la moyenne de x
.
J'ai implémenté la fonction comme suit :
import numpy as np
from scipy.stats import kurtosis
testdata = np.array([1, 2, 3, 4, 5])
def mean(obs):
return (1. / len(obs)) * np.sum(obs)
def variance(obs):
return (1. / len(obs)) * np.sum((obs - mean(obs)) ** 2)
def kurt(obs):
num = np.sqrt((1. / len(obs)) * np.sum((obs - mean(obs)) ** 4))
denom = variance(obs) ** 2 # avoid losing precision with np.sqrt call
return num / denom
Les deux premières fonctions, mean
y variance
ont fait l'objet d'une validation croisée avec numpy.mean
y numpy.var
respectivement.
J'ai essayé de faire une validation croisée kurt
avec la déclaration suivante :
>>> kurtosis(testdata) == kurt(testdata)
False
Voici le résultat des deux fonctions de kurtosis :
>>> kurtosis(testdata) # scipy.stats
-1.3
>>> kurt(testdata) # my crappy attempt
0.65192024052026476
Où ai-je fait fausse route ? Est-ce que scipy.stats.kurtosis
faire quelque chose de plus sophistiqué que ce qui est dans l'équation qu'on m'a donnée ?