La fonction NumPy np.std
prend un paramètre optionnel ddof
: "Delta Degrees of Freedom". Par défaut, c'est 0
. Réglez-le sur 1
pour obtenir le résultat MATLAB:
>>> np.std([1,3,4,6], ddof=1)
2.0816659994661326
Pour ajouter un peu plus de contexte, dans le calcul de la variance (dont l'écart type est la racine carrée), nous divisons généralement par le nombre de valeurs que nous avons.
Mais si nous sélectionnons un échantillon aléatoire d' N
éléments à partir d'une distribution plus large et calculons la variance, la division par N
peut conduire à une sous-estimation de la variance réelle. Pour résoudre ce problème, nous pouvons réduire le nombre par lequel nous divisons ( les degrés de liberté ) à un nombre inférieur à N
(généralement N-1
). Le ddof
paramètre nous permet de changer le diviseur du montant que nous spécifions.
Sauf indication contraire, NumPy calculera l' estimateur biaisé de la variance ( ddof=0
, en divisant par N
). C'est ce que vous voulez si vous travaillez avec la distribution entière (et non un sous-ensemble de valeurs qui ont été choisies au hasard dans une distribution plus large). Si le ddof
paramètre est donné, NumPy se divise par à la N - ddof
place.
Le comportement par défaut de MATLAB std
est de corriger le biais de la variance de l'échantillon en divisant par N-1
. Cela élimine une partie (mais probablement pas la totalité) du biais de l'écart type. C'est probablement ce que vous souhaitez si vous utilisez la fonction sur un échantillon aléatoire d'une distribution plus large.
La belle réponse de @hbaderts donne d'autres détails mathématiques.
std([1 3 4 6],1)
équivaut à la valeur par défaut de NumPynp.std([1,3,4,6])
. Tout cela est assez clairement expliqué dans la documentation de Matlab et NumPy, donc je recommande fortement que l'OP soit sûr de les lire à l'avenir.L'écart type est la racine carrée de la variance. La variance d'une variable aléatoire
X
est définie commeUn estimateur de la variance serait donc
où désigne la moyenne de l'échantillon. Pour une sélection aléatoire , on peut montrer que cet estimateur ne converge pas vers la variance réelle, mais vers
Si vous sélectionnez au hasard des échantillons et estimez la moyenne et la variance de l'échantillon, vous devrez utiliser un estimateur corrigé (sans biais)
qui convergera vers . Le terme de correction est également appelé correction de Bessel.
Désormais, par défaut, MATLABs
std
calcule l' estimateur sans biais avec le terme de correctionn-1
. Cependant, NumPy (comme @ajcr l'a expliqué) calcule l' estimateur biaisé sans terme de correction par défaut. Le paramètreddof
permet de définir n'importe quel terme de correctionn-ddof
. En le mettant à 1, vous obtenez le même résultat que dans MATLAB.De même, MATLAB permet d'ajouter un deuxième paramètre
w
, qui spécifie le "schéma de pesée". La valeur par défaut,,w=0
donne le terme de correctionn-1
(estimateur sans biais), tandis que pourw=1
, seul n est utilisé comme terme de correction (estimateur biaisé).la source
n
aller en haut de la notation de sommation, il est entré dans la somme.Pour les personnes qui ne sont pas douées pour les statistiques, un guide simpliste est:
Inclure
ddof=1
si vous calculeznp.std()
pour un échantillon prélevé sur votre ensemble de données complet.Assurez
ddof=0
-vous que vous calculeznp.std()
pour la population complèteLe DDOF est inclus pour les échantillons afin de contrebalancer le biais qui peut se produire dans les nombres.
la source