AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Standardabweichung berechnen?

Ein Thema von mat72 · begonnen am 31. Mär 2012 · letzter Beitrag vom 1. Apr 2012
Antwort Antwort
mat72

Registriert seit: 15. Mär 2012
35 Beiträge
 
#1

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 18:48
Hallo,
ich lese jede Zahl via Textfeld ein und wandele sie mit StrToFloat in eine Zahl um.
Im Anhang mein Programm.
Delphi-Quellcode:
unit globallevelingacc;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, jpeg, ExtCtrls, shellapi, math;

type
  TForm11 = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    MainMenu1: TMainMenu;
    MainMenu2: TMenuItem;
    Help1: TMenuItem;
    Exit1: TMenuItem;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    Button1: TButton;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    Label33: TLabel;
    Button5: TButton;
    Label34: TLabel;
    procedure Exit1Click(Sender: TObject);
    procedure Help1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Edit1Exit(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2Exit(Sender: TObject);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Edit3Exit(Sender: TObject);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Edit4Exit(Sender: TObject);
    procedure Edit4KeyPress(Sender: TObject; var Key: Char);
    procedure Edit5Exit(Sender: TObject);
    procedure Edit5KeyPress(Sender: TObject; var Key: Char);
    procedure Edit6Exit(Sender: TObject);
    procedure Edit6KeyPress(Sender: TObject; var Key: Char);
    procedure Edit7Exit(Sender: TObject);
    procedure Edit7KeyPress(Sender: TObject; var Key: Char);
    procedure Edit8Exit(Sender: TObject);
    procedure Edit8KeyPress(Sender: TObject; var Key: Char);
    procedure Edit9Exit(Sender: TObject);
    procedure Edit9KeyPress(Sender: TObject; var Key: Char);
    procedure Edit10Exit(Sender: TObject);
    procedure Edit10KeyPress(Sender: TObject; var Key: Char);
    procedure Edit11Exit(Sender: TObject);
    procedure Edit11KeyPress(Sender: TObject; var Key: Char);
    procedure Edit12Exit(Sender: TObject);
    procedure Edit12KeyPress(Sender: TObject; var Key: Char);
    procedure Edit13Exit(Sender: TObject);
    procedure Edit13KeyPress(Sender: TObject; var Key: Char);
    procedure Edit14Exit(Sender: TObject);
    procedure Edit14KeyPress(Sender: TObject; var Key: Char);
    procedure Edit15Exit(Sender: TObject);
    procedure Edit15KeyPress(Sender: TObject; var Key: Char);
    procedure Edit16Exit(Sender: TObject);
    procedure Edit16KeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form11: TForm11;
  x1,x2,x3,x4,x5,x6,x7,x8,y1,y2,y3,y4,y5,y6,y7,y8,ave_x,ave_y,x,y :extended;
implementation

{$R *.dfm}

procedure TForm11.Exit1Click(Sender: TObject);
begin
close();
end;

procedure TForm11.Help1Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', '.\help\GlobalLevelingAccuracy.html', nil, nil, SW_SHOW); //hier wird die Hilfe aufgerufen
end;



procedure TForm11.Button5Click(Sender: TObject);
begin
close();
end;

procedure TForm11.Edit1Exit(Sender: TObject);
begin
    try
       x1:=StrToFloat(Edit1.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit1.Clear;
          Edit1.SetFocus;
    end;
end;

procedure TForm11.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit2.SetFocus;
end;

procedure TForm11.Edit2Exit(Sender: TObject);
begin
    try
       y1:=StrToFloat(Edit2.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit2.Clear;
          Edit2.SetFocus;
    end;
end;

procedure TForm11.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit3.SetFocus;
end;

procedure TForm11.Edit3Exit(Sender: TObject);
begin
    try
       x2:=StrToFloat(Edit3.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit3.Clear;
          Edit3.SetFocus;
    end;
end;

procedure TForm11.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit4.SetFocus;
end;

procedure TForm11.Edit4Exit(Sender: TObject);
begin
    try
       y2:=StrToFloat(Edit4.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit4.Clear;
          Edit4.SetFocus;
    end;
end;

procedure TForm11.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit5.SetFocus;
end;

procedure TForm11.Edit5Exit(Sender: TObject);
begin
    try
       x3:=StrToFloat(Edit5.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit5.Clear;
          Edit5.SetFocus;
    end;
end;

procedure TForm11.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit6.SetFocus;
end;

procedure TForm11.Edit6Exit(Sender: TObject);
begin
    try
       y3:=StrToFloat(Edit6.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit6.Clear;
          Edit6.SetFocus;
    end;
end;

procedure TForm11.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit7.SetFocus;
end;

procedure TForm11.Edit7Exit(Sender: TObject);
begin
    try
       x4:=StrToFloat(Edit7.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit7.Clear;
          Edit7.SetFocus;
    end;
end;

procedure TForm11.Edit7KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit8.SetFocus;
end;

procedure TForm11.Edit8Exit(Sender: TObject);
begin
    try
       y4:=StrToFloat(Edit8.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit8.Clear;
          Edit8.SetFocus;
    end;
end;

procedure TForm11.Edit8KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit9.SetFocus;
end;

procedure TForm11.Edit9Exit(Sender: TObject);
begin
    try
       x5:=StrToFloat(Edit9.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit9.Clear;
          Edit9.SetFocus;
    end;
end;

procedure TForm11.Edit9KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit10.SetFocus;
end;

procedure TForm11.Edit10Exit(Sender: TObject);
begin
    try
       y5:=StrToFloat(Edit10.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit10.Clear;
          Edit10.SetFocus;
    end;
end;

procedure TForm11.Edit10KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit11.SetFocus;
end;

procedure TForm11.Edit11Exit(Sender: TObject);
begin
    try
       x6:=StrToFloat(Edit11.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit11.Clear;
          Edit11.SetFocus;
    end;
end;

procedure TForm11.Edit11KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit12.SetFocus;
end;

procedure TForm11.Edit12Exit(Sender: TObject);
begin
    try
       y6:=StrToFloat(Edit12.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit12.Clear;
          Edit12.SetFocus;
    end;
end;

procedure TForm11.Edit12KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit13.SetFocus;
end;

procedure TForm11.Edit13Exit(Sender: TObject);
begin
    try
       x7:=StrToFloat(Edit13.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit13.Clear;
          Edit13.SetFocus;
    end;
end;

procedure TForm11.Edit13KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit14.SetFocus;
end;

procedure TForm11.Edit14Exit(Sender: TObject);
begin
    try
       y7:=StrToFloat(Edit14.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit14.Clear;
          Edit14.SetFocus;
    end;
end;

procedure TForm11.Edit14KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit15.SetFocus;
end;

procedure TForm11.Edit15Exit(Sender: TObject);
begin
    try
       x8:=StrToFloat(Edit15.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit15.Clear;
          Edit15.SetFocus;
    end;
end;

procedure TForm11.Edit15KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit16.SetFocus;
end;

procedure TForm11.Edit16Exit(Sender: TObject);
begin
    try
       y8:=StrToFloat(Edit16.Text);
    except
          ShowMessage('Please enter only Numbers!');
          Edit16.Clear;
          Edit16.SetFocus;
    end;
end;

procedure TForm11.Edit16KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key=#13)
    then
      Edit1.SetFocus;
end;

procedure TForm11.Button1Click(Sender: TObject);
begin
Label34.Caption := (' ');
//x:=stddev(x1,x2,x3,x4,x5,x6,x7,x8);
ave_x:=(x1+x2+x3+x4+x5+x6+x7+x8)/8;
ave_y:=(y1+y2+y3+y4+y5+y6+y7+y8)/8;
x:=3*(sqrt((1/8)*(((x1-ave_x)*(x1-ave_x))+((x2-ave_x)*(x2-ave_x))+((x3-ave_x)*(x3-ave_x))+((x4-ave_x)*(x4-ave_x))+((x5-ave_x)*(x5-ave_x))+((x6-ave_x)*(x6-ave_x))+((x7-ave_x)*(x7-ave_x))+((x8-ave_x)*(x8-ave_x)))));
y:=3*(sqrt((1/8)*(((y1-ave_y)*(y1-ave_y))+((y2-ave_y)*(y2-ave_y))+((y3-ave_y)*(y3-ave_y))+((y4-ave_y)*(y4-ave_y))+((y5-ave_y)*(y5-ave_y))+((y6-ave_y)*(y6-ave_y))+((y7-ave_y)*(y7-ave_y))+((y8-ave_y)*(y8-ave_y)))));
Label32.Caption := FloatToStrF(x, ffNumber, 8, 3);
Label33.Caption := FloatToStrF(y, ffNumber, 8, 3);
if (x>8) or (y>8) then
Label34.Caption := ('Out of Specification!')
end;

end.
Danke fuer eure Hilfe.
Gruss
Mat
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#2

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 18:54
Zitat:
x:=stddev(x1,x2,x3,x4,x5,x6,x7,x8);
-->
x:=stddev([x1,x2,x3,x4,x5,x6,x7,x8]); Das sind nur 2 Zeichen mehr
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mat72

Registriert seit: 15. Mär 2012
35 Beiträge
 
#3

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 18:56
Danke dir.
Jetzt verstehe ich auch die Fehlermeldung.
Problem geloest.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 22:48
@mat72:
Sorry, aber ich muss es loswerden: dein Sourcecode ist ein Paradebeispiel wie man nicht programmieren sollte.
Dir fehlen offensichtlich die Grundlagen; das solltest ändern.
In fast jeder Programmiersprache gibt es Arrays und/oder Listen mit denen viele gleiche Dinge verwalten kann anstatt alle Variablen einzeln hinzuschreiben.
Deine Benutzeroberfläche ist auch eine kleine Katastrophe - für jede Zahl ein Edit und ein Label, wo soll das enden?
Nimm doch einfach ein TMemo und lass den Benutzer so viele Zahlen hineinschreiben oder kopieren wie er mag (eine Zahl pro Zeile).
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#5

AW: Standardabweichung berechnen?

  Alt 1. Apr 2012, 02:38
Mich würde trotzdem noch interessieren, was an der oben angegebenen Formel falsch ist.
Selbst wenn 1/7 der richtige Koeffizint wäre (siehe #4), würde der errechnete Wert nur noch größer werden.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Standardabweichung berechnen?

  Alt 1. Apr 2012, 07:19
ich war zu faul den ersten Post mit Fleisch zu versehen, ich meine 1/7 müsste passen
Delphi-Quellcode:
Function TestStdDev(a: Array of Double): Double;
var
  i: Integer;
  MW: Double;
begin
  MW := 0;
  Result := 0;
  for i := 0 to High(a) do MW := MW + a[i];
  MW := MW / ( High(a) + 1);
  for i := 0 to High(a) do Result := Result + Power(a[i] - MW, 2);
  Result := SQRT(Result / High(a));
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  SetLength(a, 10);
  for i := 0 to High(a) - 1 do
    a[i] := Random(100);
  Label1.Caption := FloatToStr(StdDev(a));
  Label2.Caption := FloatToStr(TestStdDev(a));
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Standardabweichung berechnen?

  Alt 1. Apr 2012, 09:44
Mich würde trotzdem noch interessieren, was an der oben angegebenen Formel falsch ist.
Selbst wenn 1/7 der richtige Koeffizint wäre (siehe #4), würde der errechnete Wert nur noch größer werden.
Was soll denn diese äußerst merkwürdige Aussage ?

Wenn man eine statistische Auswertung erstellt, dann sollte man - auch bei bloßer Übernahme einer vorgefertigten Formel wie beispielsweise StdDev() bzw. MeanAndStdDev() aus der Unit Math - wenigstens verstehen, wie die Standardabweichung überhaupt zustande kommt, was sie beinhaltet: speziell hier eben ganz fundamental Stichwort Freiheitsgrad. Dieser aber wurde selbst nach dem entsprechenden Hinweis in #4 völlig ignoriert und wird in der grundlegenden Bedeutung offenbar gar nicht verstanden.

Berücksichtigt man korrekterweise den zutreffenden Freiheitsgrad in der in #6 verwendeten Formel, dann kommt mit deren Berechnung auch exakt der richtige Wert für die Standardabweichung heraus. Auch wenn diese selbstgebastelte Formel so etwas von unübersichtlich strukturiert ist...
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#8

AW: Standardabweichung berechnen?

  Alt 1. Apr 2012, 15:07
Was soll denn diese äußerst merkwürdige Aussage ?
  1. Ich sollte endlich mal eine Statistikvorlesung besuchen
  2. Der TE hat bemängelt, das die berechneten Werte zu groß sind. Egal was diese bedeuten, durch einen größeren Koeffizienten werden sie auf jeden Fall größer.
  Mit Zitat antworten Zitat
silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#9

AW: Standardabweichung berechnen?

  Alt 31. Mär 2012, 18:54
Hi,

probier's mal so:
std_abw = StdDev([x1,x2,x3,x4,x5,x6,x7,x8]) Denn Delphi will ein Array als parameter und keine Liste von Extended bekommen.

In XE2 kann man auch ein "Array of Extenedd" übergeben (siehe hier), in früheren Versionen ging das noch nicht (siehe hier)
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz