numpy.average()
hat eine Gewichtungsoption, aber numpy.std()
nicht. Hat jemand Vorschläge für eine Problemumgehung?Gewichtete Standardabweichung in NumPy?
Antwort
Wie wäre es mit der folgenden kurzen "manuellen Berechnung"?
def weighted_avg_and_std(values, weights):
"""
Return the weighted average and standard deviation.
values, weights -- Numpy ndarrays with the same shape.
"""
average = numpy.average(values, weights=weights)
# Fast and numerically precise:
variance = numpy.average((values-average)**2, weights=weights)
return (average, math.sqrt(variance))
Warum nicht 'numpy.average' noch einmal für die Varianz verwenden? – user2357112
Ich wollte nur darauf hinweisen, dass dies die verzerrte Varianz ergibt. Bei kleinen Stichprobengrößen sollten Sie die Varianz (vor sqrt) neu skalieren, um die unvoreingenommene Varianz zu erhalten. Siehe https://en.wikipedia.org/wiki/Weighted_variance#Weighted_sample_variance – Corey
Ja, der unvoreingenommene Varianzschätzer würde etwas anders sein. Diese Antwort gibt die Standardabweichung an, da die Frage nach einer gewichteten Version von 'numpy.std()' fragt. – EOL
Es scheint eine solche Funktion in numpy/scipy noch nicht zu sein, aber es gibt eine ticket, die diese zusätzliche Funktionalität vorschlägt. Dort finden Sie Statistics.py, die gewichtete Standardabweichungen implementiert.
Es gibt eine Klasse gewichtete Statistik in statsmodels
ist zu berechnen: statsmodels.stats.weightstats.DescrStatsW
:
from statsmodels.stats.weightstats import DescrStatsW
array = np.array([1,2,1,2,1,2,1,3])
weights = np.ones_like(array)
weights[3] = 100
weighted_stats = DescrStatsW(array, weights=weights, ddof=0)
weighted_stats.mean # weighted mean of data (equivalent to np.average(array, weights=weights))
# 1.97196261682243
weighted_stats.std # standard deviation with default degrees of freedom correction
# 0.21434289609681711
weighted_stats.std_mean # standard deviation of weighted mean
# 0.020818822467555047
weighted_stats.var # variance with default degrees of freedom correction
# 0.045942877107170932
Die nette Eigenschaft dieser Klasse ist, dass, wenn Sie verschiedene statistische Eigenschaften nachfolgende Anrufe sehr schnell sein wird, berechnet werden soll, weil Bereits berechnete (auch Zwischen-) Ergebnisse werden zwischengespeichert.
Es ist ein sehr gutes Beispiel vorgeschlagen von gaborous:
import pandas as pd
import numpy as np
# X is the dataset, as a Pandas' DataFrame
mean = mean = np.ma.average(X, axis=0, weights=weights) # Computing the
weighted sample mean (fast, efficient and precise)
# Convert to a Pandas' Series (it's just aesthetic and more
# ergonomic; no difference in computed values)
mean = pd.Series(mean, index=list(X.keys()))
xm = X-mean # xm = X diff to mean
xm = xm.fillna(0) # fill NaN with 0 (because anyway a variance of 0 is
just void, but at least it keeps the other covariance's values computed
correctly))
sigma2 = 1./(w.sum()-1) * xm.mul(w, axis=0).T.dot(xm); # Compute the
unbiased weighted sample covariance
Correct equation for weighted unbiased sample covariance, URL (version: 2016-06-28)
- 1. Standardabweichung in numpy
- 2. Speicherverbrauch der NumPy-Funktion für Standardabweichung
- 3. Gewichtete gleitenden Durchschnitt in Python
- 4. Unterschiedliche Standardabweichung für die gleiche Eingabe von Wolfram und numpy
- 5. Durchführen gruppierten Durchschnitt und Standardabweichung mit NumPy-Arrays
- 6. Gewichtete Durchschnittsberechnung in MySQL?
- 7. Gewichtete Zufallszahlengenerierung in R
- 8. Gewichtete Summe in VBA
- 9. Gewichtete Trendlinie
- 10. Wie berechne ich die Standardabweichung zwischen gewichteten Messungen?
- 11. Gewichtete Damerau-Levenshtein in VBA
- 12. Gewichtete Hash-Kombination
- 13. Sklearn - SVM gewichtete Funktionen
- 14. Einfache gewichtete Link-Rotation?
- 15. Python: gewichtete Violinplots
- 16. Standardabweichung in Abhängigkeit von variablen
- 17. Gewichtete kleinste Quadrate - R
- 18. Schreiben einer Standardabweichung Funktion
- 19. Java Streams - Standardabweichung
- 20. SSAS Standardabweichung Berechnung
- 21. Standardabweichung IF Excel {} Formelprobleme
- 22. Spalte Standardabweichung R
- 23. Standardabweichung für DF, Pandas
- 24. Standardabweichung einer ArrayList
- 25. Gewichtete Prozentzahl zwischen zwei Links?
- 26. Zufalls gewichtete Auswahl eines Ereignisses
- 27. Erstellen Sie angepasste gewichtete Variable in R
- 28. Zufällige gewichtete Auswahl in T-SQL
- 29. Gewichtete Verteilung von untergeordneten Elementen in ItemsControl
- 30. Fehler gewichtete fit Unsicherheiten in LMFIT
Btw, Berechnung der gewichteten std dev ist eigentlich ein ziemlich komplexes Thema - es gibt mehr als einen Weg, es zu tun. Sehen Sie hier für eine gute Diskussion: https://www.stata.com/support/faqs/statistics/weights-and-summary-statistics/ – JohnE