Sprawozdanie: Estymatory wariancji Łukasz Przybyłek
Przemysław Stankiewicz
Napisać program (w języku Pascal , C lub C++), który ma obliczać wartości estymatorów wariancji dla poniższych danych.(program powinien wczytywać dane z pliku dane.txt, a wyniki swojego działania zapisywać do pliku wyniki.txt
Teoria:
Estymator średniej arytmetycznej:
w programie oznaczone jako „wartość srednia”
(procedure ObliczanieXSr;)
Estymator obciążony: Jeśli różnica pomiędzy wartością oczekiwaną rozkładu estymatora a wartością szacowanego parametru jest zależna funkcyjnie od estymatora:
to estymator nazywamy obciążonym, zaś samą różnicę nazywamy obciążeniem estymatora.
W programie oznaczone jako „s2” (procedure ObliczanieS2;)
Estymator nieobciążony: estymator jest nieobciążony, jeśli wartość oczekiwana rozkładu estymatora jest równa wartości szacowanego parametru:
W programie oznaczone jako "s2*" (procedure ObliczanieS2Gw;)
Kod Programu: Plik: Dane.txt
PROGRAM LiczEstymator;
USES crt;
VAR
a : array [1..13,1..8] of real;
i,n : integer;
w,k : integer;
f,g : text;
suma : real;
x_sr : real;
s2 : real;
s2_ : real;
PROCEDURE Menu1;
BEGIN
writeln('[ Program do obliczania Estymatorow: ]');
writeln;
END;{Menu1}
PROCEDURE ObliczanieXSr;
BEGIN
suma:=0;
for w:=1 to 13 do
BEGIN
suma:=suma+a[w,k];
END;
x_sr:=suma/13;
END;{ObliczanieXSr}
PROCEDURE ObliczanieS2;
VAR
an : real;
BEGIN
Assign(g,'c:\WYNIKI.txt');
Rewrite(g);
clrscr;
Menu1;
writeln(g,'Kol. 1 : plec');
writeln(g,'Kol. 2 : wiek');
writeln(g,'Kol. 3 : cis_skur');
writeln(g,'Kol. 4 : cis_rozkur');
writeln(g,'Kol. 5 : th');
writeln(g,'Kol. 6 : hb');
writeln(g,'Kol. 7 : e');
writeln(g,'Kol. 8 : l');
FOR k:=1 to 8 do
BEGIN
ObliczanieXSr;
suma:=0;
FOR w:=1 to 13 do
BEGIN
an:=(a[w,k] - x_sr) * (a[w,k] - x_sr);
suma:=suma+an;
END;
s2:=suma/13;
writeln(g,'s2 dla Kol. ',k,' wynosi: ',s2:7:2);
END;
Writeln;
Writeln('Wypisalem do pliku... nacisnij klawisz...');
readln;
END;{ObliczanieS2}
PROCEDURE ObliczanieS2Gw;
VAR
an : real;
BEGIN
Assign(g,'c:\Wyniki.txt');
Rewrite(g);
clrscr;
Menu1;
writeln(g,'Kol. 1 - plec');
writeln(g,'Kol. 2 - wiek');
writeln(g,'Kol. 3 - cis_skur');
writeln(g,'Kol. 4 - cis_rozkur');
writeln(g,'Kol. 5 - th');
writeln(g,'Kol. 6 - hb');
writeln(g,'Kol. 7 - e');
writeln(g,'Kol. 8 - l');
FOR k:=1 to 8 do
BEGIN
ObliczanieXSr;
suma:=0;
FOR w:=1 to 13 do
BEGIN
an:=(a[w,k] - x_sr) * (a[w,k] - x_sr);
suma:=suma+an;
END;
s2_:=suma/12;
writeln(g,'s2* dla Kol. ',k,' wynosi: ',s2_:7:2);
END;
Writeln;
Writeln('Wypisalem do pliku... nacisnij klawisz...');
readln;
END;{ObliczanieS2Gw}
PROCEDURE czytaj_plik;
BEGIN
assign(f,'c:\dane.txt');
reset(f);
read(f,w,k);
FOR w:=1 to 13 do
FOR k:=1 to 8 do read(f,a[w,k]);
END;{czytaj_plik}
PROCEDURE menu;
VAR
wybor : integer;
BEGIN
repeat
clrscr;
textcolor(15);
Menu1;
writeln('[1] : Wypisanie do "Wyniki.txt" wartosci sredniej');
writeln('[2] : Wypisanie do "Wyniki.txt" wartosci s2');
writeln('[3] : Wypisanie do "Wyniki.txt" wartosci s2*');
writeln('[0] : Wyjscie z programu');
writeln;
write('Wybor: '); readln(wybor);
case wybor of
1 : BEGIN
clrscr;
assign(g,'c:\Wyniki.txt');
Rewrite(g);
Menu1;
writeln(g,'Kol. 1 - plec');
writeln(g,'Kol. 2 - wiek');
writeln(g,'Kol. 3 - cis_skur');
writeln(g,'Kol. 4 - cis_rozkur');
writeln(g,'Kol. 5 - th');
writeln(g,'Kol. 6 - hb');
writeln(g,'Kol. 7 - e');
writeln(g,'Kol. 8 - l');
FOR k:=1 to 8 do
BEGIN
ObliczanieXSr;
writeln(g,'Srednia dla Kol. ',k,' wynosi: ',x_sr:6:2,' ');
END;
Writeln;
Writeln('Wypisalem do pliku... nacisnij klawisz...');
readln;
END;
2 : ObliczanieS2;
3 : ObliczanieS2Gw;
END;
until wybor=0;
END;{menu}
BEGIN
czytaj_plik;
clrscr;
menu;
END.{Main}
Otrzymane wartości Estymatorów (Wyciąg z pliku wyniki.txt):
Kol. 1 - plec
Kol. 2 - wiek
Kol. 3 - cis_skur
Kol. 4 - cis_rozkur
Kol. 5 - th
Kol. 6 - hb
Kol. 7 - e
Kol. 8 - l
Srednia dla Kol. 1 wynosi: 1.38
Srednia dla Kol. 2 wynosi: 30.46
Srednia dla Kol. 3 wynosi: 141.46
Srednia dla Kol. 4 wynosi: 91.69
Srednia dla Kol. 5 wynosi: 44.55
Srednia dla Kol. 6 wynosi: 14.28
Srednia dla Kol. 7 wynosi: 4.73
Srednia dla Kol. 8 wynosi: 11.27
s2 dla Kol. 1 wynosi: 0.24
s2 dla Kol. 2 wynosi: 163.02
s2 dla Kol. 3 wynosi: 163.94
s2 dla Kol. 4 wynosi: 134.83
s2 dla Kol. 5 wynosi: 14.12
s2 dla Kol. 6 wynosi: 7.76
s2 dla Kol. 7 wynosi: 0.38
s2 dla Kol. 8 wynosi: 17.05
s2* dla Kol. 1 wynosi: 0.26
s2* dla Kol. 2 wynosi: 176.60
s2* dla Kol. 3 wynosi: 177.60
s2* dla Kol. 4 wynosi: 146.06
s2* dla Kol. 5 wynosi: 15.29
s2* dla Kol. 6 wynosi: 8.41
s2* dla Kol. 7 wynosi: 0.41
s2* dla Kol. 8 wynosi: 18.47
Wnioski
Estymator średniej arytmetycznej dla płci Wynosi 1.38 , obciążony wynosi 0.24, Nieobciążony 0.26. Estymator średniej arytmetycznej dla wieku. Wynosi 30.46, obciążony wynosi 163.02, Nieobciążony 176.60. Estymator średniej arytmetycznej dla ciśnienia skurczowego Wynosi 141.46, obciążony wynosi 163.94, Nieobciążony 177.60. Estymator średniej arytmetycznej dla ciśnienia rozkurczowego Wynosi 1.38, obciążony wynosi 91.69, Nieobciążony 146.06. Estymator średniej arytmetycznej dla th Wynosi 44.55, obciążony wynosi 14.12, Nieobciążony 15.29. Estymator średniej arytmetycznej dla hb Wynosi 14.28, obciążony wynosi 7.76, Nieobciążony 8.41. Estymator średniej arytmetycznej dla e Wynosi 4.73 , obciążony wynosi 0.38, Nieobciążony 0.41. Estymator średniej arytmetycznej dla l Wynosi 11.27, obciążony wynosi 17.05, Nieobciążony 18.47.
Estymator obciążony zawsze różni się od estymatora nieobciążonego ponieważ zawiera w sobie błąd próbki, co nie znaczy że musi być większy od estymatora nieobciążonego. W naszym przypadku estymator nieobciążony jest większy ponieważ mnożyliśmy przez
, a w przypadku estymatora obciążonego mnożyliśmy przez
.