www.mikrocontroller.net

Forum: PC-Programmierung Probleme mit Varianzberechnung


Autor: Dieter B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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


Autor: Statistiker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum?? Weil 3600/10=360. Glückwunsch!

Autor: Dieter B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du mir das bitte genau erklären? Formelmäßig?

Ich dachte, dass die Diagonalelemente die Varianz darstellen!

Autor: Thomas Wursch (xote)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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...

Autor: detlef _a (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Dieter B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.