Mittelwert und Standartabweich < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 15:27 Fr 10.11.2006 | Autor: | CyberAnt |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Folgender Datensatz als Beispiel:
1 76,67
1 76,67
1 77,33
1 78
1 77,33
1 83,33
1 77,33
1 84,67
1 78
1 70,67
1 70,67
1 81,33
1 76,67
1 82,67
1 79,33
1 76
1 78,67
1 75,33
1 77,33
1 79,33
12.589 78
12.589 87,33
12.589 80,67
12.589 82
12.589 79,33
12.589 84
12.589 84
12.589 84
12.589 81,33
12.589 77,33
12.589 83,33
12.589 77,33
12.589 80
12.589 78,67
12.589 83,33
12.589 78
12.589 79,33
12.589 82,67
12.589 86
12.589 81,33
15.849 78
15.849 79,33
15.849 83,33
15.849 82,67
15.849 86,67
15.849 84
15.849 75,33
15.849 84
15.849 85,33
15.849 84
15.849 79,33
15.849 82,67
15.849 83,33
15.849 80,67
15.849 80
15.849 80,67
15.849 80,67
15.849 81,33
15.849 80
15.849 84
Ich möchte jetzt immer bei einem Wert der linken Spalte den Mittelwert und die Standartabweichung der zugehörigen rechten Seite (in dem Fall immer 20 Werte - müsste aber variabel sein) und das dann wieder in ein Array das ich es wieder zeichnen kann.
Hoffe mir hilft jemand =)
|
|
|
|
Hallo,
ich hoffe, ich meine das Richtige, aber zuerst eine Anmerkung:
Du benutzt sowohl Dezimalpunkte als auch Kommas, Matlab kennt aber nur Dezimalpunkte, was bedeutet, alle Kommas müssen vorher umgewandelt werden.
Jetzt folgendes Szenario: Die Daten liegen in der Matrix data zweispaltig vor. Wir machen Folgendes:
for i=1:size(datastat,1),
indizes=find(data(:,1)==datastat(1,1));
indizes=find(data(:,1)==datastat(i,1));
mit_wert = 1/size(indizes,1)*sum(data(indizes,2));
std_abw = sqrt(1/(size(indizes,1)-1)*sum(data(indizes,2)-mit_wert).^2);
datastat(i,2)=mit_wert;
datastat(i,3)=std_abw;
end;
Wir schauen also zuerst, wieviele verschiedene Werte in der ersten Spalte vorkommen und packen diese in die erste Spalte von datastat. Dann berechnen wir in der for-Schleife für jeden dieser Werte den Mittelwert aller Werte der zweiten Spalte von data, die rechts von diesem Wert stehen. Entsprechend die Standardabweichung. Diese beiden Ergebnisse schreiben wir in die zweite bzw. die dritte Spalte von datastat.
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 18:05 Sa 11.11.2006 | Autor: | CyberAnt |
Erst einmal DANKE für die Antwort hat mir schonmal sehr geholfen.
Aber wie du schon geschrieben hast: "Wir schauen also zuerst, wieviele verschiedene Werte in der ersten Spalte vorkommen und packen diese in die erste Spalte von datastat" - gibts da ne Funktiuon für?
Hab mal mit Hand die Werte in Datastat reingepackt und da hat das mit dem Mittelwert geklappt - aber die Standartabweichung war falsch. Ich sehe aber auch keienn Fehler in der Formel - liesst er vl. die Falsche Spalte?
|
|
|
|
|
Hallo,
> ... wieviele verschiedene Werte ...
Das ist mir wohl beim Copy&Paste'n verlorengegangen. Das ganze Procedere fängt an mit:
datastat = unique(data(:,1))
Hier wird die erste Spalte so reduziert, dass jeder Wert nur noch einmal vorkommt. Außerdem sind diese Werte aufsteigend sortiert.
Das StdAbw-Problem sehe ich mir noch an.
Gruß
Martin
|
|
|
|
|
Hier der zweite Teil der Antwort, die Standardabweichung:
In der Formel war die vorletzte Klammer falsch gesetzt. Ich hoffe, es passt so weit. Die vollständige Lösung lautet jetzt:
datastat = unique(data(:,1));
for i=1:size(datastat,1),
indizes=find(data(:,1)==datastat(i,1));
mit_wert = 1/size(indizes,1)*sum(data(indizes,2));
std_abw = sqrt(1/(size(indizes,1)-1)*sum((data(indizes,2)-mit_wert).^2));
datastat(i,2)=mit_wert;
datastat(i,3)=std_abw;
end;
Ich hoffe, jetzt ist es fehlerfrei...
20:09: Mist! Noch ein Klammerfehler! Ich hoffe, jetzt ist es fehlerfrei...
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 22:36 So 12.11.2006 | Autor: | CyberAnt |
Also Funktioniert jetzt alles einwandfrei - vielen vielen lieben Dank =)
|
|
|
|