Hallo, ich bin am Verzweifeln: Könnt ihr mal schnell nachschauen, ob ich die Varianz mit dieser Funktion richtig berechne? Die Formel für die Varianz ist laut Wikipedia: E(x^2) - (E(x))^2 http://de.wikipedia.org/wiki/Varianz Dummerweise liefert meine Funktion bei einer Messwertvektorgröße von n lediglich 1/n von dem, was die OpenCV - cvCalculateCovarianceMatrix - Funktion für das entsprechende Diagonalelement zurückgibt... Ich bin echt am verzweifeln, denn ich finde meinen Fehler nicht. Könnt ihr vielleicht mal kurz darüberschauen? Hier meine Funktion: // Funktion Variance berechnet die Varianz der Messwerte im Vektor pSample // FloatMatrix: int rows -Anzahl der Zeihlen int columns -Anzahl der Spalten float* data -Array der Größe rows*columns double Variance ( FloatMatrix* pSample){ if ( pSample->columns !=1){ printf( "Error, pSample should have only 1 column - because I need a VECTOR of samples"); return -1; } double mean_x = 0; //E(x) double xSquared = 0; //E(x^2) for ( int i = 0; i < pSample->rows; i ++){ xSquared += (pSample->data[i] * pSample->data[i]); mean_x += pSample->data[i]; } double mean_xs = xSquared / pSample->rows; mean_x = mean_x/ pSample->rows; double var = mean_xs - (mean_x * mean_x); return var; } Zahlenbeispiel: Meine Messreihe (n = 10): 5.00 33.00 15.00 35.00 21.00 24.00 29.00 21.00 31.00 27.00 43.00 16.00 49.00 18.00 51.00 10.00 61.00 4.00 65.00 12.00 Kovarianzmatrix mit OpenCV: 3600.00 -1656.00 -1656.00 900.00 Test mit meiner Varianzfunktion Vektor pSample wird mit der linken Spalte der Messreihmatrix gefüllt Varianz: 360.00 Warum??? Danke für eure Hilfe
Kannst du mir das bitte genau erklären? Formelmäßig? Ich dachte, dass die Diagonalelemente die Varianz darstellen!
>Könnt ihr mal schnell nachschauen, ob ich >die Varianz mit dieser Funktion richtig berechne? Erinne mich dunkel daran, dass die Varianz die Standardabweichung zum Quadrat ist. Aber: Suchst du jetzt die richtige Formel für die Varianz oder die Kovarianz? Das sehe ich da jetzt nicht so ganz raus...
Ich weiß nicht, was OpenCV ist und was es ausgibt. Ich weiß aber, daß die Varianz der linken Spalte der Meßwerte 360 ist, das hast Du ganz richtig berechnet. Cheers detlef
Die OpenCV ist eine Bibliothek zur Bildbearbeitung optimiert für Intel - Prozessoren. Es gibt Datenstrukturen für Bilder, Matrizen und Vektoren in verschiedenen Formaten und die entsprechenden Operationen darauf. In ihr ist auch die Berechnung der Kovarianzmatrix implementiert. Ich möchte nun die Varianzen aller Elemente eines Messvektors berechnen Die Kovarianzmatrix ( E ( sum (( X - E(X) )* (X -E(X)) ^t) (X ist in diesem Fall der Messvektor) ist folgendermaßen definiert: auf der Diagonale befinden sich die Varianzen der einzelnen Vektorelemente auf den Nichtdiagonalstellen i,j befinden sich die Kovarianzen Cov( X_i, X_j) Deswegen bin ich verunsichert. Ich traue mich auch nicht, die Kovarianzmatrix einfach noch durch n zu teilen, da ich nicht genau weiß, was ich dadurch falsch mache. @Thomas: Ja, Varianz ist die Standardabweichung ins Quadrat. Noch etwas worauf ich gestoßen bin: Wenn man die Varianz einer Messreihe berechnen will, so lautet die Formel_ 1/(n-1) sum ( x- E(x)) ^2, will man die Varianz einer Verteilung mit bekanntem Mittelwert berechnen, so lautet die Formel 1/n sum (x -E(x))^2... (die spinnen die Statistiker)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.