<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Atartas</id>
	<title>Brain-wiki - Wkład użytkownika [pl]</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Atartas"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php/Specjalna:Wk%C5%82ad/Atartas"/>
	<updated>2026-04-05T14:23:26Z</updated>
	<subtitle>Wkład użytkownika</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9953</id>
		<title>Wnioskowanie Statystyczne - ćwiczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9953"/>
		<updated>2024-05-17T09:43:21Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zasady zaliczenia — punktacja: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!-- &amp;lt;b&amp;gt;Wnioskowanie statystyczne&amp;lt;/b&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
#[[WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych |Zmienne losowe i generatory liczb pseudolosowych ]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Przedziały ufności| Przedziały ufności]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Testowanie hipotez| Testowanie hipotez]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Regresja liniowa i test chi2| Regresja liniowa i test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
autor dr Jarosław Żygierewicz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Wnioskowanie_Statystyczne_-_wykład#zasady_zaliczenia_przedmiotu|Zasady zaliczenia przedmiotu]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zasady zaliczenia — punktacja:==&lt;br /&gt;
*'''Kartkówki (16 pkt)''': 4 kartkówki po 4 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Prace domowe/Aktywność (4 pkt)'''&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''3.06.2024''', w godz. 10:00 – 13:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''25.06.2024''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* &amp;gt; 50% z 50 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''xxx''', godz. '''xxx''') lub w sesji jesiennej ('''xxx''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z '''wyzerowaniem punktów z całego semestru'''.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9952</id>
		<title>Wnioskowanie Statystyczne - ćwiczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9952"/>
		<updated>2024-05-17T09:43:04Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zasady zaliczenia — punktacja: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!-- &amp;lt;b&amp;gt;Wnioskowanie statystyczne&amp;lt;/b&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
#[[WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych |Zmienne losowe i generatory liczb pseudolosowych ]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Przedziały ufności| Przedziały ufności]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Testowanie hipotez| Testowanie hipotez]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Regresja liniowa i test chi2| Regresja liniowa i test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
autor dr Jarosław Żygierewicz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Wnioskowanie_Statystyczne_-_wykład#zasady_zaliczenia_przedmiotu|Zasady zaliczenia przedmiotu]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zasady zaliczenia — punktacja:==&lt;br /&gt;
*'''Kartkówki (16 pkt)''': 4 kartkówki po 4 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Prace domowe/Aktywność (4 pkt)'''&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''3.06.2024''', w godz. 10:00 – 13:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''24.06.2024''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* &amp;gt; 50% z 50 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''xxx''', godz. '''xxx''') lub w sesji jesiennej ('''xxx''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z '''wyzerowaniem punktów z całego semestru'''.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9951</id>
		<title>Wnioskowanie Statystyczne - ćwiczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9951"/>
		<updated>2024-05-17T09:41:57Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zasady zaliczenia — punktacja: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!-- &amp;lt;b&amp;gt;Wnioskowanie statystyczne&amp;lt;/b&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
#[[WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych |Zmienne losowe i generatory liczb pseudolosowych ]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Przedziały ufności| Przedziały ufności]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Testowanie hipotez| Testowanie hipotez]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Regresja liniowa i test chi2| Regresja liniowa i test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
autor dr Jarosław Żygierewicz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Wnioskowanie_Statystyczne_-_wykład#zasady_zaliczenia_przedmiotu|Zasady zaliczenia przedmiotu]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zasady zaliczenia — punktacja:==&lt;br /&gt;
*'''Kartkówki (16 pkt)''': 4 kartkówki po 4 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Prace domowe/Aktywność (4 pkt)'''&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''3.06.2024''', w godz. 10:00 – 13:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''25.06.2024''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* &amp;gt; 50% z 50 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''xxx''', godz. '''xxx''') lub w sesji jesiennej ('''xxx''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z '''wyzerowaniem punktów z całego semestru'''.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9739</id>
		<title>Wnioskowanie Statystyczne - ćwiczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9739"/>
		<updated>2024-02-21T13:17:26Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zasady zaliczenia — punktacja: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!-- &amp;lt;b&amp;gt;Wnioskowanie statystyczne&amp;lt;/b&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
#[[WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych |Zmienne losowe i generatory liczb pseudolosowych ]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Przedziały ufności| Przedziały ufności]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Testowanie hipotez| Testowanie hipotez]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Regresja liniowa i test chi2| Regresja liniowa i test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
autor dr Jarosław Żygierewicz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Wnioskowanie_Statystyczne_-_wykład#zasady_zaliczenia_przedmiotu|Zasady zaliczenia przedmiotu]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zasady zaliczenia — punktacja:==&lt;br /&gt;
*'''Kartkówki (16 pkt)''': 4 kartkówki po 4 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Prace domowe/Aktywność (4 pkt)'''&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''3.06.2024''', w godz. 10:00 – 13:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''xxx''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* &amp;gt; 50% z 50 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''xxx''', godz. '''xxx''') lub w sesji jesiennej ('''xxx''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z '''wyzerowaniem punktów z całego semestru'''.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9464</id>
		<title>Wnioskowanie Statystyczne - ćwiczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9464"/>
		<updated>2023-06-13T12:12:05Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zasady zaliczenia — punktacja: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!-- &amp;lt;b&amp;gt;Wnioskowanie statystyczne&amp;lt;/b&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
#[[WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych |Zmienne losowe i generatory liczb pseudolosowych ]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Przedziały ufności| Przedziały ufności]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Testowanie hipotez| Testowanie hipotez]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Regresja liniowa i test chi2| Regresja liniowa i test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
autor dr Jarosław Żygierewicz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Wnioskowanie_Statystyczne_-_wykład#zasady_zaliczenia_przedmiotu|Zasady zaliczenia przedmiotu]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zasady zaliczenia — punktacja:==&lt;br /&gt;
*'''Kartkówki (16 pkt)''': 4 kartkówki po 4 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Prace domowe/Aktywność (4 pkt)'''&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''29.05.2023''', w godz. 09:30 – 12:30&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''xxx''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* &amp;gt; 50% z 50 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''28.06.2023''', godz. '''12:30 - 16:00''') lub w sesji jesiennej ('''xxx''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z '''wyzerowaniem punktów z całego semestru'''.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9463</id>
		<title>Wnioskowanie Statystyczne - ćwiczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9463"/>
		<updated>2023-06-13T12:11:30Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zasady zaliczenia — punktacja: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!-- &amp;lt;b&amp;gt;Wnioskowanie statystyczne&amp;lt;/b&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
#[[WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych |Zmienne losowe i generatory liczb pseudolosowych ]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Przedziały ufności| Przedziały ufności]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Testowanie hipotez| Testowanie hipotez]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Regresja liniowa i test chi2| Regresja liniowa i test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
autor dr Jarosław Żygierewicz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Wnioskowanie_Statystyczne_-_wykład#zasady_zaliczenia_przedmiotu|Zasady zaliczenia przedmiotu]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zasady zaliczenia — punktacja:==&lt;br /&gt;
*'''Kartkówki (16 pkt)''': 4 kartkówki po 4 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Prace domowe/Aktywność (4 pkt)'''&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''29.05.2023''', w godz. 09:30 – 12:30&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''xxx''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* &amp;gt; 50% z 50 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''28.06.2023, godz. 12:30 - 16:00''') lub w sesji jesiennej ('''xxx''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z '''wyzerowaniem punktów z całego semestru'''.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9462</id>
		<title>Wnioskowanie Statystyczne - ćwiczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9462"/>
		<updated>2023-06-13T12:11:04Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zasady zaliczenia — punktacja: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!-- &amp;lt;b&amp;gt;Wnioskowanie statystyczne&amp;lt;/b&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
#[[WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych |Zmienne losowe i generatory liczb pseudolosowych ]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Przedziały ufności| Przedziały ufności]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Testowanie hipotez| Testowanie hipotez]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Regresja liniowa i test chi2| Regresja liniowa i test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
autor dr Jarosław Żygierewicz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Wnioskowanie_Statystyczne_-_wykład#zasady_zaliczenia_przedmiotu|Zasady zaliczenia przedmiotu]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zasady zaliczenia — punktacja:==&lt;br /&gt;
*'''Kartkówki (16 pkt)''': 4 kartkówki po 4 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Prace domowe/Aktywność (4 pkt)'''&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''29.05.2023''', w godz. 09:30 – 12:30&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''xxx''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* &amp;gt; 50% z 50 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''28.06.2023''') lub w sesji jesiennej ('''xxx''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z '''wyzerowaniem punktów z całego semestru'''.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9109</id>
		<title>Wnioskowanie Statystyczne - ćwiczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_%C4%87wiczenia&amp;diff=9109"/>
		<updated>2023-03-01T13:50:00Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zasady zaliczenia — punktacja: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!-- &amp;lt;b&amp;gt;Wnioskowanie statystyczne&amp;lt;/b&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
#[[WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych |Zmienne losowe i generatory liczb pseudolosowych ]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Przedziały ufności| Przedziały ufności]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Testowanie hipotez| Testowanie hipotez]]&lt;br /&gt;
#[[WnioskowanieStatystyczne/ Regresja liniowa i test chi2| Regresja liniowa i test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
autor dr Jarosław Żygierewicz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Wnioskowanie_Statystyczne_-_wykład#zasady_zaliczenia_przedmiotu|Zasady zaliczenia przedmiotu]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zasady zaliczenia — punktacja:==&lt;br /&gt;
*'''Kartkówki (16 pkt)''': 4 kartkówki po 4 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Prace domowe/Aktywność (4 pkt)'''&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''29.05.2023''', w godz. 09:30 – 12:30&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''xxx''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* &amp;gt; 50% z 50 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''xx''') lub w sesji jesiennej ('''xxx''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z '''wyzerowaniem punktów z całego semestru'''.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8912</id>
		<title>Wnioskowanie Statystyczne - wykład</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8912"/>
		<updated>2022-06-18T22:17:01Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* zasady zaliczenia przedmiotu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://docs.google.com/document/d/1PHoVNlKhBkOVmkJzgvm7Tu7nF-aXlhWAEXTJbv5qqQY/edit&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wnioskowanie statystyczne (wykład)=&lt;br /&gt;
&lt;br /&gt;
'''UWAGA: wymagane zaliczenie Technologii Informacyjnych i Komunikacyjnych z ćwiczeniami z programowania w Pythonie w wymiarze 45 godzin ćwiczeń'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Zajęcia zdalne w roku 2021 odbywają się pod adresem https://kampus.come.uw.edu.pl/course/view.php?id=5295&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady|Rozkłady gęstości prawdopodobieństwa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Momenty|Wariancja, mediana...]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady-przyklady|Przykładowe rozkłady]]&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/CLT|Centralne Twierdzenie Graniczne]]&lt;br /&gt;
#  &lt;br /&gt;
## [[WnioskowanieStatystyczne/wstep|Wstęp]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Klasyczna_teoria|Teoria klasyczna]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Statystyki_i_estymatory|Statystyki i estymatory]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Weryfikacja_hipotez|Weryfikacja hipotez statystycznych]] &lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_t|Test ''t'' Studenta]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_chi2|Test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
#&lt;br /&gt;
##&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Z_komputerem|Monte Carlo]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Testy_permutacyjne|Testy permutacyjne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bootstrap|Bootstrap]]&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Testy_nieprametryczne|Testy nieparametryczne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_serii|Test serii]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_Wilcoxona|Test Wilcoxona-Manna-Whitneya]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/MLF|Metoda największej wiarygodności]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Regresja_liniowa|Regresja liniowa]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Interpretacja współczynnika korelacji|Interpretacja współczynnika korelacji]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Analiza_wariancji|Analiza wariancji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bonferroni|TP/FP, ROC. Problem porównań wielokrotnych — miejskie legendy i przepowiednie]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Prawdopodobienstwo|Prawdopodobieństwo]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Twierdzenie_Bayesa|Twierdzenie Bayesa]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Elementy_statystyki_wielowymiarowej|Elementy statystyki wielowymiarowej]]&lt;br /&gt;
#&lt;br /&gt;
## [[Sztuczne sieci neuronowe (ANN )|Sztuczne sieci neuronowe]]&lt;br /&gt;
## [[Algorytmy Genetyczne|Algorytmy Genetyczne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{color|green|'''Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].'''}} [[Grafika:CC-88x31.png]]&lt;br /&gt;
Autor: [http://durka.name Piotr Durka].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1yPKnOfmO3dEp0SeslNXwSfOoPzQFSanc?usp=sharing slajdy z wykładów]&lt;br /&gt;
&lt;br /&gt;
===zasady zaliczenia przedmiotu===&lt;br /&gt;
&lt;br /&gt;
Punktacja [[Wnioskowanie_Statystyczne_-_ćwiczenia | ćwiczeń]]:&lt;br /&gt;
*'''Kartkówki (16 pkt)''': 4 kartkówki po 4 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Prace domowe/Aktywność (4 pkt)'''&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''30.05.2022''', w godz. 9:00 - 12:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''22.06.2022''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* &amp;gt; 50% z 50 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''24.06.2022''') lub w sesji jesiennej ('''x''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z '''wyzerowaniem punktów z całego semestru'''.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie wykładu:&lt;br /&gt;
* Egzamin pisemny w sali. Tematy do przemyślenia przed egzaminem == przerobiony na wykładzie program. Dla ustalenia uwagi, na przykład:&lt;br /&gt;
** Sformułuj Centralne Twierdzenie Graniczne. &lt;br /&gt;
** Wypisz i przedyskutuj definicje prawdopodobieństwa.&lt;br /&gt;
** Wypisz założenia wersji Centralnego Twierdzenia Granicznego, którą można stosunkowo prosto udowodnić (twierdzenie Lindeberga-Levy'ego). Udowodnij lub spróbuj nakreślić szkic dowodu.&lt;br /&gt;
** Oblicz wartość oczekiwaną rozkładu równomiernego, określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2  lub  ''x''&amp;lt;0.&lt;br /&gt;
** Oblicz wariancję rozkładu równomiernego określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2 lub  ''x''&amp;lt;0&lt;br /&gt;
** Co to jest &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;?&lt;br /&gt;
** Wypisz / wyprowadź wzory na wartość oczekiwaną i wariancję rozkładu Poissona.&lt;br /&gt;
** Z rozkładu dwumianowego wylicz prawdopodobieństwo, że wśród czworga dzieci będą co najmniej trzy dziewczynki — zakładając, że prawdopodobieństwa urodzenia dziecka każdej płci są równe.&lt;br /&gt;
** Testy parametryczne i nieparametryczne: wady, zalety, przykłady.&lt;br /&gt;
** Co ma wspólnego poziom istotności testu z poprawką Bonferroniego?&lt;br /&gt;
** Co to jest i jak obliczamy moc testu?&lt;br /&gt;
** Opisz w punktach (zwięźle i konkretnie) procedurę weryfikacji hipotezy o różnicy średnich dwóch grup wyników &amp;lt;math&amp;gt;\{x_{i}, i=1\dots N$\}&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\{y_{j}, j=1\dots M\}&amp;lt;/math&amp;gt; metodą repróbkowania (resampling).&lt;br /&gt;
** Wyprowadź wzór na średnią ''N'' pomiarów &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; o różnych wariancjach &amp;lt;math&amp;gt;\sigma_{i}^2&amp;lt;/math&amp;gt; z metody największej wiarygodności.&lt;br /&gt;
** Dany jest zbiór rozłącznych hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt; pokrywających całą przestrzeń zdarzeń &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\sum_{i}H_{i}=\Omega&amp;lt;/math&amp;gt; oraz prawdopodobieństwa wyniku eksperymentu W w świetle każdej z hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt;, czyli &amp;lt;math&amp;gt;P(W\mid H_{i})&amp;lt;/math&amp;gt;. Korzystając z tych oznaczeń, wypisz i wyprowadź twierdzenie Bayesa, czyli wzór na prawdopodobieństwo prawdziwości hipotezy &amp;lt;math&amp;gt;H_{j}&amp;lt;/math&amp;gt; w świetle wyników eksperymentu W.&lt;br /&gt;
&amp;lt;!-- * Jeśli będzie egzamin ustny, to będzie obejmował tematy omawiane na wykładzie, jak np. powyższe.&lt;br /&gt;
* W obu przypadkach na ocenę końcową mogą wpływać również punkty za aktywność na zajęciach.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu = średnia ocen z ćwiczeń i z wykładu, pod warunkiem zaliczenia ćwiczeń '''i''' wykładu.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8911</id>
		<title>Wnioskowanie Statystyczne - wykład</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8911"/>
		<updated>2022-06-18T22:16:30Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* zasady zaliczenia przedmiotu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://docs.google.com/document/d/1PHoVNlKhBkOVmkJzgvm7Tu7nF-aXlhWAEXTJbv5qqQY/edit&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wnioskowanie statystyczne (wykład)=&lt;br /&gt;
&lt;br /&gt;
'''UWAGA: wymagane zaliczenie Technologii Informacyjnych i Komunikacyjnych z ćwiczeniami z programowania w Pythonie w wymiarze 45 godzin ćwiczeń'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Zajęcia zdalne w roku 2021 odbywają się pod adresem https://kampus.come.uw.edu.pl/course/view.php?id=5295&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady|Rozkłady gęstości prawdopodobieństwa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Momenty|Wariancja, mediana...]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady-przyklady|Przykładowe rozkłady]]&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/CLT|Centralne Twierdzenie Graniczne]]&lt;br /&gt;
#  &lt;br /&gt;
## [[WnioskowanieStatystyczne/wstep|Wstęp]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Klasyczna_teoria|Teoria klasyczna]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Statystyki_i_estymatory|Statystyki i estymatory]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Weryfikacja_hipotez|Weryfikacja hipotez statystycznych]] &lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_t|Test ''t'' Studenta]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_chi2|Test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
#&lt;br /&gt;
##&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Z_komputerem|Monte Carlo]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Testy_permutacyjne|Testy permutacyjne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bootstrap|Bootstrap]]&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Testy_nieprametryczne|Testy nieparametryczne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_serii|Test serii]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_Wilcoxona|Test Wilcoxona-Manna-Whitneya]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/MLF|Metoda największej wiarygodności]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Regresja_liniowa|Regresja liniowa]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Interpretacja współczynnika korelacji|Interpretacja współczynnika korelacji]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Analiza_wariancji|Analiza wariancji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bonferroni|TP/FP, ROC. Problem porównań wielokrotnych — miejskie legendy i przepowiednie]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Prawdopodobienstwo|Prawdopodobieństwo]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Twierdzenie_Bayesa|Twierdzenie Bayesa]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Elementy_statystyki_wielowymiarowej|Elementy statystyki wielowymiarowej]]&lt;br /&gt;
#&lt;br /&gt;
## [[Sztuczne sieci neuronowe (ANN )|Sztuczne sieci neuronowe]]&lt;br /&gt;
## [[Algorytmy Genetyczne|Algorytmy Genetyczne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{color|green|'''Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].'''}} [[Grafika:CC-88x31.png]]&lt;br /&gt;
Autor: [http://durka.name Piotr Durka].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1yPKnOfmO3dEp0SeslNXwSfOoPzQFSanc?usp=sharing slajdy z wykładów]&lt;br /&gt;
&lt;br /&gt;
===zasady zaliczenia przedmiotu===&lt;br /&gt;
&lt;br /&gt;
Punktacja [[Wnioskowanie_Statystyczne_-_ćwiczenia | ćwiczeń]]:&lt;br /&gt;
*'''Kartkówki (16 pkt)''': 4 kartkówki po 4 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Prace domowe/Aktywność (4 pkt)'''&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''30.05.2022''', w godz. 9:00 - 12:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''22.06.2022''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* Ponad 50% z 50 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''24.06.2022''') lub w sesji jesiennej ('''x''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z '''wyzerowaniem punktów z całego semestru'''.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie wykładu:&lt;br /&gt;
* Egzamin pisemny w sali. Tematy do przemyślenia przed egzaminem == przerobiony na wykładzie program. Dla ustalenia uwagi, na przykład:&lt;br /&gt;
** Sformułuj Centralne Twierdzenie Graniczne. &lt;br /&gt;
** Wypisz i przedyskutuj definicje prawdopodobieństwa.&lt;br /&gt;
** Wypisz założenia wersji Centralnego Twierdzenia Granicznego, którą można stosunkowo prosto udowodnić (twierdzenie Lindeberga-Levy'ego). Udowodnij lub spróbuj nakreślić szkic dowodu.&lt;br /&gt;
** Oblicz wartość oczekiwaną rozkładu równomiernego, określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2  lub  ''x''&amp;lt;0.&lt;br /&gt;
** Oblicz wariancję rozkładu równomiernego określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2 lub  ''x''&amp;lt;0&lt;br /&gt;
** Co to jest &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;?&lt;br /&gt;
** Wypisz / wyprowadź wzory na wartość oczekiwaną i wariancję rozkładu Poissona.&lt;br /&gt;
** Z rozkładu dwumianowego wylicz prawdopodobieństwo, że wśród czworga dzieci będą co najmniej trzy dziewczynki — zakładając, że prawdopodobieństwa urodzenia dziecka każdej płci są równe.&lt;br /&gt;
** Testy parametryczne i nieparametryczne: wady, zalety, przykłady.&lt;br /&gt;
** Co ma wspólnego poziom istotności testu z poprawką Bonferroniego?&lt;br /&gt;
** Co to jest i jak obliczamy moc testu?&lt;br /&gt;
** Opisz w punktach (zwięźle i konkretnie) procedurę weryfikacji hipotezy o różnicy średnich dwóch grup wyników &amp;lt;math&amp;gt;\{x_{i}, i=1\dots N$\}&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\{y_{j}, j=1\dots M\}&amp;lt;/math&amp;gt; metodą repróbkowania (resampling).&lt;br /&gt;
** Wyprowadź wzór na średnią ''N'' pomiarów &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; o różnych wariancjach &amp;lt;math&amp;gt;\sigma_{i}^2&amp;lt;/math&amp;gt; z metody największej wiarygodności.&lt;br /&gt;
** Dany jest zbiór rozłącznych hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt; pokrywających całą przestrzeń zdarzeń &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\sum_{i}H_{i}=\Omega&amp;lt;/math&amp;gt; oraz prawdopodobieństwa wyniku eksperymentu W w świetle każdej z hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt;, czyli &amp;lt;math&amp;gt;P(W\mid H_{i})&amp;lt;/math&amp;gt;. Korzystając z tych oznaczeń, wypisz i wyprowadź twierdzenie Bayesa, czyli wzór na prawdopodobieństwo prawdziwości hipotezy &amp;lt;math&amp;gt;H_{j}&amp;lt;/math&amp;gt; w świetle wyników eksperymentu W.&lt;br /&gt;
&amp;lt;!-- * Jeśli będzie egzamin ustny, to będzie obejmował tematy omawiane na wykładzie, jak np. powyższe.&lt;br /&gt;
* W obu przypadkach na ocenę końcową mogą wpływać również punkty za aktywność na zajęciach.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu = średnia ocen z ćwiczeń i z wykładu, pod warunkiem zaliczenia ćwiczeń '''i''' wykładu.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8797</id>
		<title>Wnioskowanie Statystyczne - wykład</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8797"/>
		<updated>2022-02-28T10:54:14Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* zasady zaliczenia przedmiotu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://docs.google.com/document/d/1PHoVNlKhBkOVmkJzgvm7Tu7nF-aXlhWAEXTJbv5qqQY/edit&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wnioskowanie statystyczne (wykład)=&lt;br /&gt;
&lt;br /&gt;
'''UWAGA: wymagane zaliczenie Technologii Informacyjnych i Komunikacyjnych z ćwiczeniami z programowania w Pythonie w wymiarze 45 godzin ćwiczeń'''&lt;br /&gt;
&lt;br /&gt;
Zajęcia zdalne w roku 2021 odbywają się pod adresem https://kampus.come.uw.edu.pl/course/view.php?id=5295&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady|Rozkłady gęstości prawdopodobieństwa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Momenty|Wariancja, mediana...]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady-przyklady|Przykładowe rozkłady]]&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/CLT|Centralne Twierdzenie Graniczne]]&lt;br /&gt;
#  &lt;br /&gt;
## [[WnioskowanieStatystyczne/wstep|Wstęp]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Klasyczna_teoria|Teoria klasyczna]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Statystyki_i_estymatory|Statystyki i estymatory]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Weryfikacja_hipotez|Weryfikacja hipotez statystycznych]] &lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_t|Test ''t'' Studenta]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_chi2|Test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
#&lt;br /&gt;
##&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Z_komputerem|Monte Carlo]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Testy_permutacyjne|Testy permutacyjne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bootstrap|Bootstrap]]&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Testy_nieprametryczne|Testy nieparametryczne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_serii|Test serii]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_Wilcoxona|Test Wilcoxona-Manna-Whitneya]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/MLF|Metoda największej wiarygodności]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Regresja_liniowa|Regresja liniowa]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Interpretacja współczynnika korelacji|Interpretacja współczynnika korelacji]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Analiza_wariancji|Analiza wariancji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bonferroni|Problem porównań wielokrotnych  -- miejskie legendy i przepowiednie]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Twierdzenie_Bayesa|Twierdzenie Bayesa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Prawdopodobienstwo|Prawdopodobieństwo]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Elementy_statystyki_wielowymiarowej|Elementy statystyki wielowymiarowej]]&lt;br /&gt;
#&lt;br /&gt;
## [[Sztuczne sieci neuronowe (ANN )|Sztuczne sieci neuronowe]]&lt;br /&gt;
## [[Algorytmy Genetyczne|Algorytmy Genetyczne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{color|green|'''Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].'''}} [[Grafika:CC-88x31.png]]&lt;br /&gt;
Autor: [http://durka.name Piotr Durka].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1yPKnOfmO3dEp0SeslNXwSfOoPzQFSanc?usp=sharing slajdy z wykładów]&lt;br /&gt;
&lt;br /&gt;
===zasady zaliczenia przedmiotu===&lt;br /&gt;
&lt;br /&gt;
Punktacja [[Wnioskowanie_Statystyczne_-_ćwiczenia | ćwiczeń]]:&lt;br /&gt;
*'''Kartkówki (16 pkt)''': 4 kartkówki po 4 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Prace domowe/Aktywność (4 pkt)'''&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''30.05.2022''', w godz. 9:00 - 12:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''22.06.2022''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* Minimum 26 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''24.06.2022''') lub w sesji jesiennej ('''x''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z '''wyzerowaniem punktów z całego semestru'''.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie wykładu:&lt;br /&gt;
Egzamin pisemny i ustny — szczegóły w zależności od stanu pandemii. Tematy do przemyślenia przed egzaminem == przerobony program. Dla ustalenia uwagi, na przykład:&lt;br /&gt;
** Sformułuj Centralne Twierdzenie Graniczne. &lt;br /&gt;
** Wypisz i przedyskutuj definicje prawdopodobieństwa.&lt;br /&gt;
** Wypisz założenia wersji Centralnego Twierdzenia Granicznego, którą można stosunkowo prosto udowodnić (twierdzenie Lindeberga-Levy'ego). Udowodnij lub spróbuj nakreślić szkic dowodu.&lt;br /&gt;
** Oblicz wartość oczekiwaną rozkładu równomiernego, określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2  lub  ''x''&amp;lt;0.&lt;br /&gt;
** Oblicz wariancję rozkładu równomiernego określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2 lub  ''x''&amp;lt;0&lt;br /&gt;
** Co to jest &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;?&lt;br /&gt;
** Wypisz / wyprowadź wzory na wartość oczekiwaną i wariancję rozkładu Poissona.&lt;br /&gt;
** Z rozkładu dwumianowego wylicz prawdopodobieństwo, że wśród czworga dzieci będą co najmniej trzy dziewczynki — zakładając, że prawdopodobieństwa urodzenia dziecka każdej płci są równe.&lt;br /&gt;
** Testy parametryczne i nieparametryczne: wady, zalety, przykłady.&lt;br /&gt;
** Co ma wspólnego poziom istotności testu z poprawką Bonferroniego?&lt;br /&gt;
** Co to jest i jak obliczamy moc testu?&lt;br /&gt;
** Opisz w punktach (zwięźle i konkretnie) procedurę weryfikacji hipotezy o różnicy średnich dwóch grup wyników &amp;lt;math&amp;gt;\{x_{i}, i=1\dots N$\}&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\{y_{j}, j=1\dots M\}&amp;lt;/math&amp;gt; metodą repróbkowania (resampling).&lt;br /&gt;
** Wyprowadź wzór na średnią ''N'' pomiarów &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; o różnych wariancjach &amp;lt;math&amp;gt;\sigma_{i}^2&amp;lt;/math&amp;gt; z metody największej wiarygodności.&lt;br /&gt;
** Dany jest zbiór rozłącznych hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt; pokrywających całą przestrzeń zdarzeń &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\sum_{i}H_{i}=\Omega&amp;lt;/math&amp;gt; oraz prawdopodobieństwa wyniku eksperymentu W w świetle każdej z hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt;, czyli &amp;lt;math&amp;gt;P(W\mid H_{i})&amp;lt;/math&amp;gt;. Korzystając z tych oznaczeń, wypisz i wyprowadź twierdzenie Bayesa, czyli wzór na prawdopodobieństwo prawdziwości hipotezy &amp;lt;math&amp;gt;H_{j}&amp;lt;/math&amp;gt; w świetle wyników eksperymentu W.&lt;br /&gt;
* Jeśli będzie egzamin ustny, to będzie obejmował tematy omawiane na wykładzie, jak np. powyższe.&lt;br /&gt;
* W obu przypadkach na ocenę końcową mogą wpływać również punkty za aktywność na zajęciach.&lt;br /&gt;
&lt;br /&gt;
W ocenie końcowej będą brane pod uwagę aktywność na zajęciach oraz prace domowe, dostępne na platformie Kampus.&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu = średnia ocen z ćwiczeń i z wykładu, pod warunkiem zaliczenia ćwiczeń '''i''' wykładu.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8689</id>
		<title>Wnioskowanie Statystyczne - wykład</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8689"/>
		<updated>2021-08-22T16:16:28Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* zasady zaliczenia przedmiotu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://docs.google.com/document/d/1PHoVNlKhBkOVmkJzgvm7Tu7nF-aXlhWAEXTJbv5qqQY/edit&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wnioskowanie statystyczne (wykład)=&lt;br /&gt;
&lt;br /&gt;
'''UWAGA: wymagane zaliczenie Technologii Informacyjnych i Komunikacyjnych z ćwiczeniami z programowania w Pythonie w wymiarze 45 godzin ćwiczeń'''&lt;br /&gt;
&lt;br /&gt;
Zajęcia zdalne w roku 2021 odbywają się pod adresem https://kampus.come.uw.edu.pl/course/view.php?id=5295&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady|Rozkłady gęstości prawdopodobieństwa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Momenty|Wariancja, mediana...]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady-przyklady|Przykładowe rozkłady]]&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/CLT|Centralne Twierdzenie Graniczne]]&lt;br /&gt;
#  &lt;br /&gt;
## [[WnioskowanieStatystyczne/wstep|Wstęp]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Klasyczna_teoria|Teoria klasyczna]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Statystyki_i_estymatory|Statystyki i estymatory]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Weryfikacja_hipotez|Weryfikacja hipotez statystycznych]] &lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_t|Test ''t'' Studenta]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_chi2|Test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
#&lt;br /&gt;
##&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Z_komputerem|Monte Carlo]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Testy_permutacyjne|Testy permutacyjne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bootstrap|Bootstrap]]&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Testy_nieprametryczne|Testy nieparametryczne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_serii|Test serii]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_Wilcoxona|Test Wilcoxona-Manna-Whitneya]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/MLF|Metoda największej wiarygodności]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Regresja_liniowa|Regresja liniowa]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Interpretacja współczynnika korelacji|Interpretacja współczynnika korelacji]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Analiza_wariancji|Analiza wariancji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bonferroni|Problem porównań wielokrotnych  -- miejskie legendy i przepowiednie]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Twierdzenie_Bayesa|Twierdzenie Bayesa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Prawdopodobienstwo|Prawdopodobieństwo]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Elementy_statystyki_wielowymiarowej|Elementy statystyki wielowymiarowej]]&lt;br /&gt;
#&lt;br /&gt;
## [[Sztuczne sieci neuronowe (ANN )|Sztuczne sieci neuronowe]]&lt;br /&gt;
## [[Algorytmy Genetyczne|Algorytmy Genetyczne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{color|green|'''Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].'''}} [[Grafika:CC-88x31.png]]&lt;br /&gt;
Autor: [http://durka.name Piotr Durka].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1yPKnOfmO3dEp0SeslNXwSfOoPzQFSanc?usp=sharing slajdy z wykładów]&lt;br /&gt;
&lt;br /&gt;
===zasady zaliczenia przedmiotu===&lt;br /&gt;
&lt;br /&gt;
Punktacja [[Wnioskowanie_Statystyczne_-_ćwiczenia | ćwiczeń]]:&lt;br /&gt;
*'''Kartkówki (20 pkt)''': 4 kartkówki po 5 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''17.05.2021''', w godz. 9:00 - 12:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''22.06.2021''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* Minimum 25 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''23.06.2021''') lub w sesji jesiennej ('''07.09.2021''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z '''wyzerowaniem punktów z całego semestru'''.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie wykładu:&lt;br /&gt;
Egzamin pisemny i ustny — szczegóły w zależności od stanu pandemii. Tematy do przemyślenia przed egzaminem == przerobony program. Dla ustalenia uwagi, na przykład:&lt;br /&gt;
** Sformułuj Centralne Twierdzenie Graniczne. &lt;br /&gt;
** Wypisz i przedyskutuj definicje prawdopodobieństwa.&lt;br /&gt;
** Wypisz założenia wersji Centralnego Twierdzenia Granicznego, którą można stosunkowo prosto udowodnić (twierdzenie Lindeberga-Levy'ego). Udowodnij lub spróbuj nakreślić szkic dowodu.&lt;br /&gt;
** Oblicz wartość oczekiwaną rozkładu równomiernego, określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2  lub  ''x''&amp;lt;0.&lt;br /&gt;
** Oblicz wariancję rozkładu równomiernego określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2 lub  ''x''&amp;lt;0&lt;br /&gt;
** Co to jest &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;?&lt;br /&gt;
** Wypisz / wyprowadź wzory na wartość oczekiwaną i wariancję rozkładu Poissona.&lt;br /&gt;
** Z rozkładu dwumianowego wylicz prawdopodobieństwo, że wśród czworga dzieci będą co najmniej trzy dziewczynki — zakładając, że prawdopodobieństwa urodzenia dziecka każdej płci są równe.&lt;br /&gt;
** Testy parametryczne i nieparametryczne: wady, zalety, przykłady.&lt;br /&gt;
** Co ma wspólnego poziom istotności testu z poprawką Bonferroniego?&lt;br /&gt;
** Co to jest i jak obliczamy moc testu?&lt;br /&gt;
** Opisz w punktach (zwięźle i konkretnie) procedurę weryfikacji hipotezy o różnicy średnich dwóch grup wyników &amp;lt;math&amp;gt;\{x_{i}, i=1\dots N$\}&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\{y_{j}, j=1\dots M\}&amp;lt;/math&amp;gt; metodą repróbkowania (resampling).&lt;br /&gt;
** Wyprowadź wzór na średnią ''N'' pomiarów &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; o różnych wariancjach &amp;lt;math&amp;gt;\sigma_{i}^2&amp;lt;/math&amp;gt; z metody największej wiarygodności.&lt;br /&gt;
** Dany jest zbiór rozłącznych hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt; pokrywających całą przestrzeń zdarzeń &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\sum_{i}H_{i}=\Omega&amp;lt;/math&amp;gt; oraz prawdopodobieństwa wyniku eksperymentu W w świetle każdej z hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt;, czyli &amp;lt;math&amp;gt;P(W\mid H_{i})&amp;lt;/math&amp;gt;. Korzystając z tych oznaczeń, wypisz i wyprowadź twierdzenie Bayesa, czyli wzór na prawdopodobieństwo prawdziwości hipotezy &amp;lt;math&amp;gt;H_{j}&amp;lt;/math&amp;gt; w świetle wyników eksperymentu W.&lt;br /&gt;
* Jeśli będzie egzamin ustny, to będzie obejmował tematy omawiane na wykładzie, jak np. powyższe.&lt;br /&gt;
* W obu przypadkach na ocenę końcową mogą wpływać również punkty za aktywność na zajęciach.&lt;br /&gt;
&lt;br /&gt;
W ocenie końcowej będą brane pod uwagę aktywność na zajęciach oraz prace domowe, dostępne na platformie Kampus.&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu = średnia ocen z ćwiczeń i z wykładu, pod warunkiem zaliczenia ćwiczeń '''i''' wykładu.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8688</id>
		<title>Wnioskowanie Statystyczne - wykład</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8688"/>
		<updated>2021-08-22T16:15:03Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* zasady zaliczenia przedmiotu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://docs.google.com/document/d/1PHoVNlKhBkOVmkJzgvm7Tu7nF-aXlhWAEXTJbv5qqQY/edit&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wnioskowanie statystyczne (wykład)=&lt;br /&gt;
&lt;br /&gt;
'''UWAGA: wymagane zaliczenie Technologii Informacyjnych i Komunikacyjnych z ćwiczeniami z programowania w Pythonie w wymiarze 45 godzin ćwiczeń'''&lt;br /&gt;
&lt;br /&gt;
Zajęcia zdalne w roku 2021 odbywają się pod adresem https://kampus.come.uw.edu.pl/course/view.php?id=5295&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady|Rozkłady gęstości prawdopodobieństwa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Momenty|Wariancja, mediana...]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady-przyklady|Przykładowe rozkłady]]&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/CLT|Centralne Twierdzenie Graniczne]]&lt;br /&gt;
#  &lt;br /&gt;
## [[WnioskowanieStatystyczne/wstep|Wstęp]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Klasyczna_teoria|Teoria klasyczna]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Statystyki_i_estymatory|Statystyki i estymatory]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Weryfikacja_hipotez|Weryfikacja hipotez statystycznych]] &lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_t|Test ''t'' Studenta]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_chi2|Test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
#&lt;br /&gt;
##&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Z_komputerem|Monte Carlo]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Testy_permutacyjne|Testy permutacyjne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bootstrap|Bootstrap]]&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Testy_nieprametryczne|Testy nieparametryczne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_serii|Test serii]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_Wilcoxona|Test Wilcoxona-Manna-Whitneya]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/MLF|Metoda największej wiarygodności]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Regresja_liniowa|Regresja liniowa]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Interpretacja współczynnika korelacji|Interpretacja współczynnika korelacji]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Analiza_wariancji|Analiza wariancji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bonferroni|Problem porównań wielokrotnych  -- miejskie legendy i przepowiednie]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Twierdzenie_Bayesa|Twierdzenie Bayesa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Prawdopodobienstwo|Prawdopodobieństwo]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Elementy_statystyki_wielowymiarowej|Elementy statystyki wielowymiarowej]]&lt;br /&gt;
#&lt;br /&gt;
## [[Sztuczne sieci neuronowe (ANN )|Sztuczne sieci neuronowe]]&lt;br /&gt;
## [[Algorytmy Genetyczne|Algorytmy Genetyczne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{color|green|'''Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].'''}} [[Grafika:CC-88x31.png]]&lt;br /&gt;
Autor: [http://durka.name Piotr Durka].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1yPKnOfmO3dEp0SeslNXwSfOoPzQFSanc?usp=sharing slajdy z wykładów]&lt;br /&gt;
&lt;br /&gt;
===zasady zaliczenia przedmiotu===&lt;br /&gt;
&lt;br /&gt;
Punktacja [[Wnioskowanie_Statystyczne_-_ćwiczenia | ćwiczeń]]:&lt;br /&gt;
*'''Kartkówki (20 pkt)''': 4 kartkówki po 5 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''17.05.2021''', w godz. 9:00 - 12:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''22.06.2021''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* Minimum 25 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''23.06.2021''') lub w sesji jesiennej ('''07.09.2021''').&lt;br /&gt;
* Do kolokwium można podejść również w sytuacji chęci poprawienia oceny z ćwiczeń. Podejście do kolokwium poprawkowego jest równoznaczne z wyzerowaniem punktów z całego semestru.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie wykładu:&lt;br /&gt;
Egzamin pisemny i ustny — szczegóły w zależności od stanu pandemii. Tematy do przemyślenia przed egzaminem == przerobony program. Dla ustalenia uwagi, na przykład:&lt;br /&gt;
** Sformułuj Centralne Twierdzenie Graniczne. &lt;br /&gt;
** Wypisz i przedyskutuj definicje prawdopodobieństwa.&lt;br /&gt;
** Wypisz założenia wersji Centralnego Twierdzenia Granicznego, którą można stosunkowo prosto udowodnić (twierdzenie Lindeberga-Levy'ego). Udowodnij lub spróbuj nakreślić szkic dowodu.&lt;br /&gt;
** Oblicz wartość oczekiwaną rozkładu równomiernego, określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2  lub  ''x''&amp;lt;0.&lt;br /&gt;
** Oblicz wariancję rozkładu równomiernego określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2 lub  ''x''&amp;lt;0&lt;br /&gt;
** Co to jest &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;?&lt;br /&gt;
** Wypisz / wyprowadź wzory na wartość oczekiwaną i wariancję rozkładu Poissona.&lt;br /&gt;
** Z rozkładu dwumianowego wylicz prawdopodobieństwo, że wśród czworga dzieci będą co najmniej trzy dziewczynki — zakładając, że prawdopodobieństwa urodzenia dziecka każdej płci są równe.&lt;br /&gt;
** Testy parametryczne i nieparametryczne: wady, zalety, przykłady.&lt;br /&gt;
** Co ma wspólnego poziom istotności testu z poprawką Bonferroniego?&lt;br /&gt;
** Co to jest i jak obliczamy moc testu?&lt;br /&gt;
** Opisz w punktach (zwięźle i konkretnie) procedurę weryfikacji hipotezy o różnicy średnich dwóch grup wyników &amp;lt;math&amp;gt;\{x_{i}, i=1\dots N$\}&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\{y_{j}, j=1\dots M\}&amp;lt;/math&amp;gt; metodą repróbkowania (resampling).&lt;br /&gt;
** Wyprowadź wzór na średnią ''N'' pomiarów &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; o różnych wariancjach &amp;lt;math&amp;gt;\sigma_{i}^2&amp;lt;/math&amp;gt; z metody największej wiarygodności.&lt;br /&gt;
** Dany jest zbiór rozłącznych hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt; pokrywających całą przestrzeń zdarzeń &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\sum_{i}H_{i}=\Omega&amp;lt;/math&amp;gt; oraz prawdopodobieństwa wyniku eksperymentu W w świetle każdej z hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt;, czyli &amp;lt;math&amp;gt;P(W\mid H_{i})&amp;lt;/math&amp;gt;. Korzystając z tych oznaczeń, wypisz i wyprowadź twierdzenie Bayesa, czyli wzór na prawdopodobieństwo prawdziwości hipotezy &amp;lt;math&amp;gt;H_{j}&amp;lt;/math&amp;gt; w świetle wyników eksperymentu W.&lt;br /&gt;
* Jeśli będzie egzamin ustny, to będzie obejmował tematy omawiane na wykładzie, jak np. powyższe.&lt;br /&gt;
* W obu przypadkach na ocenę końcową mogą wpływać również punkty za aktywność na zajęciach.&lt;br /&gt;
&lt;br /&gt;
W ocenie końcowej będą brane pod uwagę aktywność na zajęciach oraz prace domowe, dostępne na platformie Kampus.&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu = średnia ocen z ćwiczeń i z wykładu, pod warunkiem zaliczenia ćwiczeń '''i''' wykładu.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8687</id>
		<title>Wnioskowanie Statystyczne - wykład</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8687"/>
		<updated>2021-07-01T12:26:49Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* zasady zaliczenia przedmiotu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://docs.google.com/document/d/1PHoVNlKhBkOVmkJzgvm7Tu7nF-aXlhWAEXTJbv5qqQY/edit&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wnioskowanie statystyczne (wykład)=&lt;br /&gt;
&lt;br /&gt;
'''UWAGA: wymagane zaliczenie Technologii Informacyjnych i Komunikacyjnych z ćwiczeniami z programowania w Pythonie w wymiarze 45 godzin ćwiczeń'''&lt;br /&gt;
&lt;br /&gt;
Zajęcia zdalne w roku 2021 odbywają się pod adresem https://kampus.come.uw.edu.pl/course/view.php?id=5295&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady|Rozkłady gęstości prawdopodobieństwa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Momenty|Wariancja, mediana...]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady-przyklady|Przykładowe rozkłady]]&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/CLT|Centralne Twierdzenie Graniczne]]&lt;br /&gt;
#  &lt;br /&gt;
## [[WnioskowanieStatystyczne/wstep|Wstęp]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Klasyczna_teoria|Teoria klasyczna]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Statystyki_i_estymatory|Statystyki i estymatory]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Weryfikacja_hipotez|Weryfikacja hipotez statystycznych]] &lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_t|Test ''t'' Studenta]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_chi2|Test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
#&lt;br /&gt;
##&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Z_komputerem|Monte Carlo]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Testy_permutacyjne|Testy permutacyjne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bootstrap|Bootstrap]]&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Testy_nieprametryczne|Testy nieparametryczne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_serii|Test serii]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_Wilcoxona|Test Wilcoxona-Manna-Whitneya]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/MLF|Metoda największej wiarygodności]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Regresja_liniowa|Regresja liniowa]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Interpretacja współczynnika korelacji|Interpretacja współczynnika korelacji]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Analiza_wariancji|Analiza wariancji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bonferroni|Problem porównań wielokrotnych  -- miejskie legendy i przepowiednie]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Twierdzenie_Bayesa|Twierdzenie Bayesa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Prawdopodobienstwo|Prawdopodobieństwo]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Elementy_statystyki_wielowymiarowej|Elementy statystyki wielowymiarowej]]&lt;br /&gt;
#&lt;br /&gt;
## [[Sztuczne sieci neuronowe (ANN )|Sztuczne sieci neuronowe]]&lt;br /&gt;
## [[Algorytmy Genetyczne|Algorytmy Genetyczne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{color|green|'''Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].'''}} [[Grafika:CC-88x31.png]]&lt;br /&gt;
Autor: [http://durka.name Piotr Durka].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1yPKnOfmO3dEp0SeslNXwSfOoPzQFSanc?usp=sharing slajdy z wykładów]&lt;br /&gt;
&lt;br /&gt;
===zasady zaliczenia przedmiotu===&lt;br /&gt;
&lt;br /&gt;
Punktacja [[Wnioskowanie_Statystyczne_-_ćwiczenia | ćwiczeń]]:&lt;br /&gt;
*'''Kartkówki (20 pkt)''': 4 kartkówki po 5 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''17.05.2021''', w godz. 9:00 - 12:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''22.06.2021''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* Minimum 25 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''23.06.2021''') lub w sesji jesiennej ('''07.09.2021''').&lt;br /&gt;
&lt;br /&gt;
Zaliczenie wykładu:&lt;br /&gt;
Egzamin pisemny i ustny — szczegóły w zależności od stanu pandemii. Tematy do przemyślenia przed egzaminem == przerobony program. Dla ustalenia uwagi, na przykład:&lt;br /&gt;
** Sformułuj Centralne Twierdzenie Graniczne. &lt;br /&gt;
** Wypisz i przedyskutuj definicje prawdopodobieństwa.&lt;br /&gt;
** Wypisz założenia wersji Centralnego Twierdzenia Granicznego, którą można stosunkowo prosto udowodnić (twierdzenie Lindeberga-Levy'ego). Udowodnij lub spróbuj nakreślić szkic dowodu.&lt;br /&gt;
** Oblicz wartość oczekiwaną rozkładu równomiernego, określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2  lub  ''x''&amp;lt;0.&lt;br /&gt;
** Oblicz wariancję rozkładu równomiernego określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2 lub  ''x''&amp;lt;0&lt;br /&gt;
** Co to jest &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;?&lt;br /&gt;
** Wypisz / wyprowadź wzory na wartość oczekiwaną i wariancję rozkładu Poissona.&lt;br /&gt;
** Z rozkładu dwumianowego wylicz prawdopodobieństwo, że wśród czworga dzieci będą co najmniej trzy dziewczynki — zakładając, że prawdopodobieństwa urodzenia dziecka każdej płci są równe.&lt;br /&gt;
** Testy parametryczne i nieparametryczne: wady, zalety, przykłady.&lt;br /&gt;
** Co ma wspólnego poziom istotności testu z poprawką Bonferroniego?&lt;br /&gt;
** Co to jest i jak obliczamy moc testu?&lt;br /&gt;
** Opisz w punktach (zwięźle i konkretnie) procedurę weryfikacji hipotezy o różnicy średnich dwóch grup wyników &amp;lt;math&amp;gt;\{x_{i}, i=1\dots N$\}&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\{y_{j}, j=1\dots M\}&amp;lt;/math&amp;gt; metodą repróbkowania (resampling).&lt;br /&gt;
** Wyprowadź wzór na średnią ''N'' pomiarów &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; o różnych wariancjach &amp;lt;math&amp;gt;\sigma_{i}^2&amp;lt;/math&amp;gt; z metody największej wiarygodności.&lt;br /&gt;
** Dany jest zbiór rozłącznych hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt; pokrywających całą przestrzeń zdarzeń &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\sum_{i}H_{i}=\Omega&amp;lt;/math&amp;gt; oraz prawdopodobieństwa wyniku eksperymentu W w świetle każdej z hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt;, czyli &amp;lt;math&amp;gt;P(W\mid H_{i})&amp;lt;/math&amp;gt;. Korzystając z tych oznaczeń, wypisz i wyprowadź twierdzenie Bayesa, czyli wzór na prawdopodobieństwo prawdziwości hipotezy &amp;lt;math&amp;gt;H_{j}&amp;lt;/math&amp;gt; w świetle wyników eksperymentu W.&lt;br /&gt;
* Jeśli będzie egzamin ustny, to będzie obejmował tematy omawiane na wykładzie, jak np. powyższe.&lt;br /&gt;
* W obu przypadkach na ocenę końcową mogą wpływać również punkty za aktywność na zajęciach.&lt;br /&gt;
&lt;br /&gt;
W ocenie końcowej będą brane pod uwagę aktywność na zajęciach oraz prace domowe, dostępne na platformie Kampus.&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu = średnia ocen z ćwiczeń i z wykładu, pod warunkiem zaliczenia ćwiczeń '''i''' wykładu.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8552</id>
		<title>Wnioskowanie Statystyczne - wykład</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8552"/>
		<updated>2021-02-26T14:08:42Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* zasady zaliczenia przedmiotu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://docs.google.com/document/d/1PHoVNlKhBkOVmkJzgvm7Tu7nF-aXlhWAEXTJbv5qqQY/edit&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wnioskowanie statystyczne (wykład)=&lt;br /&gt;
&lt;br /&gt;
'''UWAGA: wymagane zaliczenie Technologii Informacyjnych i Komunikacyjnych z ćwiczeniami z programowania w Pythonie w wymiarze 45 godzin ćwiczeń'''&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady|Rozkłady gęstości prawdopodobieństwa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Momenty|Wariancja, mediana...]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady-przyklady|Przykładowe rozkłady]]&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/CLT|Centralne Twierdzenie Graniczne]]&lt;br /&gt;
#  &lt;br /&gt;
## [[WnioskowanieStatystyczne/wstep|Wstęp]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Klasyczna_teoria|Teoria klasyczna]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Statystyki_i_estymatory|Statystyki i estymatory]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Weryfikacja_hipotez|Weryfikacja hipotez statystycznych]] &lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_t|Test ''t'' Studenta]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_chi2|Test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Z_komputerem|Monte Carlo]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Testy_nieprametryczne|Testy nieparametryczne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_serii|Test serii]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_Wilcoxona|Test Wilcoxona-Manna-Whitneya]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Testy_permutacyjne|Testy permutacyjne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bootstrap|Bootstrap]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/MLF|Metoda największej wiarygodności]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Regresja_liniowa|Regresja liniowa]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Interpretacja współczynnika korelacji|Interpretacja współczynnika korelacji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bonferroni|Problem porównań wielokrotnych  -- miejskie legendy i przepowiednie]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Analiza_wariancji|Analiza wariancji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Twierdzenie_Bayesa|Twierdzenie Bayesa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Prawdopodobienstwo|Prawdopodobieństwo]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Elementy_statystyki_wielowymiarowej|Elementy statystyki wielowymiarowej]]&lt;br /&gt;
#&lt;br /&gt;
## [[Sztuczne sieci neuronowe (ANN )|Sztuczne sieci neuronowe]]&lt;br /&gt;
## [[Algorytmy Genetyczne|Algorytmy Genetyczne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{color|green|'''Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].'''}} [[Grafika:CC-88x31.png]]&lt;br /&gt;
Autor: [http://durka.name Piotr Durka].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1yPKnOfmO3dEp0SeslNXwSfOoPzQFSanc?usp=sharing slajdy z wykładów]&lt;br /&gt;
&lt;br /&gt;
===zasady zaliczenia przedmiotu===&lt;br /&gt;
&lt;br /&gt;
Punktacja [[Wnioskowanie_Statystyczne_-_ćwiczenia | ćwiczeń]]:&lt;br /&gt;
*'''Kartkówki (20 pkt)''': 4 kartkówki po 5 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''17.05.2021''', w godz. 9:00 - 12:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''22.06.2021''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*'''Obecność'''&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* Minimum 25 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''23.06.2021''') lub w sesji jesiennej.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie wykładu:&lt;br /&gt;
Egzamin pisemny i ustny — szczegóły w zależności od stanu pandemii. &lt;br /&gt;
*Jeśli będzie egzamin pisemny, to będzie się składać z dwóch części: pytań zamkniętych jednokrotnego wyboru (analogicznie jak na egzaminie z TI) oraz pytań otwartych, na przykład:&lt;br /&gt;
** Sformułuj Centralne Twierdzenie Graniczne. &lt;br /&gt;
** Wypisz i przedyskutuj definicje prawdopodobieństwa.&lt;br /&gt;
** Wypisz założenia wersji Centralnego Twierdzenia Granicznego, którą można stosunkowo prosto udowodnić (twierdzenie Lindeberga-Levy'ego). Udowodnij lub spróbuj nakreślić szkic dowodu.&lt;br /&gt;
** Oblicz wartość oczekiwaną rozkładu równomiernego, określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2  lub  ''x''&amp;lt;0.&lt;br /&gt;
** Oblicz wariancję rozkładu równomiernego określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2 lub  ''x''&amp;lt;0&lt;br /&gt;
** Co to jest &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;?&lt;br /&gt;
** Wypisz / wyprowadź wzory na wartość oczekiwaną i wariancję rozkładu Poissona.&lt;br /&gt;
** Z rozkładu dwumianowego wylicz prawdopodobieństwo, że wśród czworga dzieci będą co najmniej trzy dziewczynki — zakładając, że prawdopodobieństwa urodzenia dziecka każdej płci są równe.&lt;br /&gt;
** Testy parametryczne i nieparametryczne: wady, zalety, przykłady.&lt;br /&gt;
** Co ma wspólnego poziom istotności testu z poprawką Bonferroniego?&lt;br /&gt;
** Co to jest i jak obliczamy moc testu?&lt;br /&gt;
** Opisz w punktach (zwięźle i konkretnie) procedurę weryfikacji hipotezy o różnicy średnich dwóch grup wyników &amp;lt;math&amp;gt;\{x_{i}, i=1\dots N$\}&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\{y_{j}, j=1\dots M\}&amp;lt;/math&amp;gt; metodą repróbkowania (resampling).&lt;br /&gt;
** Wyprowadź wzór na średnią ''N'' pomiarów &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; o różnych wariancjach &amp;lt;math&amp;gt;\sigma_{i}^2&amp;lt;/math&amp;gt; z metody największej wiarygodności.&lt;br /&gt;
** Dany jest zbiór rozłącznych hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt; pokrywających całą przestrzeń zdarzeń &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\sum_{i}H_{i}=\Omega&amp;lt;/math&amp;gt; oraz prawdopodobieństwa wyniku eksperymentu W w świetle każdej z hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt;, czyli &amp;lt;math&amp;gt;P(W\mid H_{i})&amp;lt;/math&amp;gt;. Korzystając z tych oznaczeń, wypisz i wyprowadź twierdzenie Bayesa, czyli wzór na prawdopodobieństwo prawdziwości hipotezy &amp;lt;math&amp;gt;H_{j}&amp;lt;/math&amp;gt; w świetle wyników eksperymentu W.&lt;br /&gt;
* Jeśli będzie egzamin ustny, to będzie obejmował tematy omawiane na wykładzie, jak np. powyższe.&lt;br /&gt;
* W obu przypadkach na ocenę końcową będą wpływać oceny z zadawanych na bieżąco prac domowych i punkty za aktywność.&lt;br /&gt;
&lt;br /&gt;
W ocenie końcowej będą brane pod uwagę aktywność na zajęciach oraz prace domowe, dostępne na platformie Kampus: [https://kampus.come.uw.edu.pl/course/view.php?id=4039]&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu = średnia ocen z ćwiczeń i z wykładu, pod warunkiem zaliczenia ćwiczeń '''i''' wykładu.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8551</id>
		<title>Wnioskowanie Statystyczne - wykład</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8551"/>
		<updated>2021-02-26T14:08:24Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* zasady zaliczenia przedmiotu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://docs.google.com/document/d/1PHoVNlKhBkOVmkJzgvm7Tu7nF-aXlhWAEXTJbv5qqQY/edit&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wnioskowanie statystyczne (wykład)=&lt;br /&gt;
&lt;br /&gt;
'''UWAGA: wymagane zaliczenie Technologii Informacyjnych i Komunikacyjnych z ćwiczeniami z programowania w Pythonie w wymiarze 45 godzin ćwiczeń'''&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady|Rozkłady gęstości prawdopodobieństwa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Momenty|Wariancja, mediana...]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady-przyklady|Przykładowe rozkłady]]&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/CLT|Centralne Twierdzenie Graniczne]]&lt;br /&gt;
#  &lt;br /&gt;
## [[WnioskowanieStatystyczne/wstep|Wstęp]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Klasyczna_teoria|Teoria klasyczna]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Statystyki_i_estymatory|Statystyki i estymatory]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Weryfikacja_hipotez|Weryfikacja hipotez statystycznych]] &lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_t|Test ''t'' Studenta]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_chi2|Test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Z_komputerem|Monte Carlo]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Testy_nieprametryczne|Testy nieparametryczne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_serii|Test serii]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_Wilcoxona|Test Wilcoxona-Manna-Whitneya]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Testy_permutacyjne|Testy permutacyjne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bootstrap|Bootstrap]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/MLF|Metoda największej wiarygodności]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Regresja_liniowa|Regresja liniowa]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Interpretacja współczynnika korelacji|Interpretacja współczynnika korelacji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bonferroni|Problem porównań wielokrotnych  -- miejskie legendy i przepowiednie]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Analiza_wariancji|Analiza wariancji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Twierdzenie_Bayesa|Twierdzenie Bayesa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Prawdopodobienstwo|Prawdopodobieństwo]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Elementy_statystyki_wielowymiarowej|Elementy statystyki wielowymiarowej]]&lt;br /&gt;
#&lt;br /&gt;
## [[Sztuczne sieci neuronowe (ANN )|Sztuczne sieci neuronowe]]&lt;br /&gt;
## [[Algorytmy Genetyczne|Algorytmy Genetyczne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{color|green|'''Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].'''}} [[Grafika:CC-88x31.png]]&lt;br /&gt;
Autor: [http://durka.name Piotr Durka].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1yPKnOfmO3dEp0SeslNXwSfOoPzQFSanc?usp=sharing slajdy z wykładów]&lt;br /&gt;
&lt;br /&gt;
===zasady zaliczenia przedmiotu===&lt;br /&gt;
&lt;br /&gt;
Punktacja [[Wnioskowanie_Statystyczne_-_ćwiczenia | ćwiczeń]]:&lt;br /&gt;
*'''Kartkówki (20 pkt)''': 4 kartkówki po 5 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''17.05.2021''', w godz. 9:00 - 12:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''22.06.2021''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*Obecności&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* Minimum 25 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''23.06.2021''') lub w sesji jesiennej.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie wykładu:&lt;br /&gt;
Egzamin pisemny i ustny — szczegóły w zależności od stanu pandemii. &lt;br /&gt;
*Jeśli będzie egzamin pisemny, to będzie się składać z dwóch części: pytań zamkniętych jednokrotnego wyboru (analogicznie jak na egzaminie z TI) oraz pytań otwartych, na przykład:&lt;br /&gt;
** Sformułuj Centralne Twierdzenie Graniczne. &lt;br /&gt;
** Wypisz i przedyskutuj definicje prawdopodobieństwa.&lt;br /&gt;
** Wypisz założenia wersji Centralnego Twierdzenia Granicznego, którą można stosunkowo prosto udowodnić (twierdzenie Lindeberga-Levy'ego). Udowodnij lub spróbuj nakreślić szkic dowodu.&lt;br /&gt;
** Oblicz wartość oczekiwaną rozkładu równomiernego, określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2  lub  ''x''&amp;lt;0.&lt;br /&gt;
** Oblicz wariancję rozkładu równomiernego określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2 lub  ''x''&amp;lt;0&lt;br /&gt;
** Co to jest &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;?&lt;br /&gt;
** Wypisz / wyprowadź wzory na wartość oczekiwaną i wariancję rozkładu Poissona.&lt;br /&gt;
** Z rozkładu dwumianowego wylicz prawdopodobieństwo, że wśród czworga dzieci będą co najmniej trzy dziewczynki — zakładając, że prawdopodobieństwa urodzenia dziecka każdej płci są równe.&lt;br /&gt;
** Testy parametryczne i nieparametryczne: wady, zalety, przykłady.&lt;br /&gt;
** Co ma wspólnego poziom istotności testu z poprawką Bonferroniego?&lt;br /&gt;
** Co to jest i jak obliczamy moc testu?&lt;br /&gt;
** Opisz w punktach (zwięźle i konkretnie) procedurę weryfikacji hipotezy o różnicy średnich dwóch grup wyników &amp;lt;math&amp;gt;\{x_{i}, i=1\dots N$\}&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\{y_{j}, j=1\dots M\}&amp;lt;/math&amp;gt; metodą repróbkowania (resampling).&lt;br /&gt;
** Wyprowadź wzór na średnią ''N'' pomiarów &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; o różnych wariancjach &amp;lt;math&amp;gt;\sigma_{i}^2&amp;lt;/math&amp;gt; z metody największej wiarygodności.&lt;br /&gt;
** Dany jest zbiór rozłącznych hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt; pokrywających całą przestrzeń zdarzeń &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\sum_{i}H_{i}=\Omega&amp;lt;/math&amp;gt; oraz prawdopodobieństwa wyniku eksperymentu W w świetle każdej z hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt;, czyli &amp;lt;math&amp;gt;P(W\mid H_{i})&amp;lt;/math&amp;gt;. Korzystając z tych oznaczeń, wypisz i wyprowadź twierdzenie Bayesa, czyli wzór na prawdopodobieństwo prawdziwości hipotezy &amp;lt;math&amp;gt;H_{j}&amp;lt;/math&amp;gt; w świetle wyników eksperymentu W.&lt;br /&gt;
* Jeśli będzie egzamin ustny, to będzie obejmował tematy omawiane na wykładzie, jak np. powyższe.&lt;br /&gt;
* W obu przypadkach na ocenę końcową będą wpływać oceny z zadawanych na bieżąco prac domowych i punkty za aktywność.&lt;br /&gt;
&lt;br /&gt;
W ocenie końcowej będą brane pod uwagę aktywność na zajęciach oraz prace domowe, dostępne na platformie Kampus: [https://kampus.come.uw.edu.pl/course/view.php?id=4039]&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu = średnia ocen z ćwiczeń i z wykładu, pod warunkiem zaliczenia ćwiczeń '''i''' wykładu.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8550</id>
		<title>Wnioskowanie Statystyczne - wykład</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8550"/>
		<updated>2021-02-26T14:07:20Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* zasady zaliczenia przedmiotu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://docs.google.com/document/d/1PHoVNlKhBkOVmkJzgvm7Tu7nF-aXlhWAEXTJbv5qqQY/edit&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wnioskowanie statystyczne (wykład)=&lt;br /&gt;
&lt;br /&gt;
'''UWAGA: wymagane zaliczenie Technologii Informacyjnych i Komunikacyjnych z ćwiczeniami z programowania w Pythonie w wymiarze 45 godzin ćwiczeń'''&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady|Rozkłady gęstości prawdopodobieństwa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Momenty|Wariancja, mediana...]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady-przyklady|Przykładowe rozkłady]]&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/CLT|Centralne Twierdzenie Graniczne]]&lt;br /&gt;
#  &lt;br /&gt;
## [[WnioskowanieStatystyczne/wstep|Wstęp]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Klasyczna_teoria|Teoria klasyczna]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Statystyki_i_estymatory|Statystyki i estymatory]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Weryfikacja_hipotez|Weryfikacja hipotez statystycznych]] &lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_t|Test ''t'' Studenta]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_chi2|Test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Z_komputerem|Monte Carlo]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Testy_nieprametryczne|Testy nieparametryczne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_serii|Test serii]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_Wilcoxona|Test Wilcoxona-Manna-Whitneya]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Testy_permutacyjne|Testy permutacyjne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bootstrap|Bootstrap]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/MLF|Metoda największej wiarygodności]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Regresja_liniowa|Regresja liniowa]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Interpretacja współczynnika korelacji|Interpretacja współczynnika korelacji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bonferroni|Problem porównań wielokrotnych  -- miejskie legendy i przepowiednie]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Analiza_wariancji|Analiza wariancji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Twierdzenie_Bayesa|Twierdzenie Bayesa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Prawdopodobienstwo|Prawdopodobieństwo]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Elementy_statystyki_wielowymiarowej|Elementy statystyki wielowymiarowej]]&lt;br /&gt;
#&lt;br /&gt;
## [[Sztuczne sieci neuronowe (ANN )|Sztuczne sieci neuronowe]]&lt;br /&gt;
## [[Algorytmy Genetyczne|Algorytmy Genetyczne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{color|green|'''Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].'''}} [[Grafika:CC-88x31.png]]&lt;br /&gt;
Autor: [http://durka.name Piotr Durka].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1yPKnOfmO3dEp0SeslNXwSfOoPzQFSanc?usp=sharing slajdy z wykładów]&lt;br /&gt;
&lt;br /&gt;
===zasady zaliczenia przedmiotu===&lt;br /&gt;
&lt;br /&gt;
Punktacja [[Wnioskowanie_Statystyczne_-_ćwiczenia | ćwiczeń]]:&lt;br /&gt;
*'''Kartkówki (20 pkt)''' 4 kartkówki po 5 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''17.05.2021''', w godz. 9:00 - 12:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do '''22.06.2021''')&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*Obecności&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* Minimum 25 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu ('''23.06.2021''') lub w sesji jesiennej.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie wykładu:&lt;br /&gt;
Egzamin pisemny i ustny — szczegóły w zależności od stanu pandemii. &lt;br /&gt;
*Jeśli będzie egzamin pisemny, to będzie się składać z dwóch części: pytań zamkniętych jednokrotnego wyboru (analogicznie jak na egzaminie z TI) oraz pytań otwartych, na przykład:&lt;br /&gt;
** Sformułuj Centralne Twierdzenie Graniczne. &lt;br /&gt;
** Wypisz i przedyskutuj definicje prawdopodobieństwa.&lt;br /&gt;
** Wypisz założenia wersji Centralnego Twierdzenia Granicznego, którą można stosunkowo prosto udowodnić (twierdzenie Lindeberga-Levy'ego). Udowodnij lub spróbuj nakreślić szkic dowodu.&lt;br /&gt;
** Oblicz wartość oczekiwaną rozkładu równomiernego, określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2  lub  ''x''&amp;lt;0.&lt;br /&gt;
** Oblicz wariancję rozkładu równomiernego określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2 lub  ''x''&amp;lt;0&lt;br /&gt;
** Co to jest &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;?&lt;br /&gt;
** Wypisz / wyprowadź wzory na wartość oczekiwaną i wariancję rozkładu Poissona.&lt;br /&gt;
** Z rozkładu dwumianowego wylicz prawdopodobieństwo, że wśród czworga dzieci będą co najmniej trzy dziewczynki — zakładając, że prawdopodobieństwa urodzenia dziecka każdej płci są równe.&lt;br /&gt;
** Testy parametryczne i nieparametryczne: wady, zalety, przykłady.&lt;br /&gt;
** Co ma wspólnego poziom istotności testu z poprawką Bonferroniego?&lt;br /&gt;
** Co to jest i jak obliczamy moc testu?&lt;br /&gt;
** Opisz w punktach (zwięźle i konkretnie) procedurę weryfikacji hipotezy o różnicy średnich dwóch grup wyników &amp;lt;math&amp;gt;\{x_{i}, i=1\dots N$\}&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\{y_{j}, j=1\dots M\}&amp;lt;/math&amp;gt; metodą repróbkowania (resampling).&lt;br /&gt;
** Wyprowadź wzór na średnią ''N'' pomiarów &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; o różnych wariancjach &amp;lt;math&amp;gt;\sigma_{i}^2&amp;lt;/math&amp;gt; z metody największej wiarygodności.&lt;br /&gt;
** Dany jest zbiór rozłącznych hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt; pokrywających całą przestrzeń zdarzeń &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\sum_{i}H_{i}=\Omega&amp;lt;/math&amp;gt; oraz prawdopodobieństwa wyniku eksperymentu W w świetle każdej z hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt;, czyli &amp;lt;math&amp;gt;P(W\mid H_{i})&amp;lt;/math&amp;gt;. Korzystając z tych oznaczeń, wypisz i wyprowadź twierdzenie Bayesa, czyli wzór na prawdopodobieństwo prawdziwości hipotezy &amp;lt;math&amp;gt;H_{j}&amp;lt;/math&amp;gt; w świetle wyników eksperymentu W.&lt;br /&gt;
* Jeśli będzie egzamin ustny, to będzie obejmował tematy omawiane na wykładzie, jak np. powyższe.&lt;br /&gt;
* W obu przypadkach na ocenę końcową będą wpływać oceny z zadawanych na bieżąco prac domowych i punkty za aktywność.&lt;br /&gt;
&lt;br /&gt;
W ocenie końcowej będą brane pod uwagę aktywność na zajęciach oraz prace domowe, dostępne na platformie Kampus: [https://kampus.come.uw.edu.pl/course/view.php?id=4039]&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu = średnia ocen z ćwiczeń i z wykładu, pod warunkiem zaliczenia ćwiczeń '''i''' wykładu.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8549</id>
		<title>Wnioskowanie Statystyczne - wykład</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8549"/>
		<updated>2021-02-26T14:07:01Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* zasady zaliczenia przedmiotu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://docs.google.com/document/d/1PHoVNlKhBkOVmkJzgvm7Tu7nF-aXlhWAEXTJbv5qqQY/edit&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wnioskowanie statystyczne (wykład)=&lt;br /&gt;
&lt;br /&gt;
'''UWAGA: wymagane zaliczenie Technologii Informacyjnych i Komunikacyjnych z ćwiczeniami z programowania w Pythonie w wymiarze 45 godzin ćwiczeń'''&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady|Rozkłady gęstości prawdopodobieństwa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Momenty|Wariancja, mediana...]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady-przyklady|Przykładowe rozkłady]]&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/CLT|Centralne Twierdzenie Graniczne]]&lt;br /&gt;
#  &lt;br /&gt;
## [[WnioskowanieStatystyczne/wstep|Wstęp]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Klasyczna_teoria|Teoria klasyczna]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Statystyki_i_estymatory|Statystyki i estymatory]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Weryfikacja_hipotez|Weryfikacja hipotez statystycznych]] &lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_t|Test ''t'' Studenta]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_chi2|Test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Z_komputerem|Monte Carlo]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Testy_nieprametryczne|Testy nieparametryczne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_serii|Test serii]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_Wilcoxona|Test Wilcoxona-Manna-Whitneya]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Testy_permutacyjne|Testy permutacyjne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bootstrap|Bootstrap]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/MLF|Metoda największej wiarygodności]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Regresja_liniowa|Regresja liniowa]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Interpretacja współczynnika korelacji|Interpretacja współczynnika korelacji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bonferroni|Problem porównań wielokrotnych  -- miejskie legendy i przepowiednie]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Analiza_wariancji|Analiza wariancji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Twierdzenie_Bayesa|Twierdzenie Bayesa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Prawdopodobienstwo|Prawdopodobieństwo]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Elementy_statystyki_wielowymiarowej|Elementy statystyki wielowymiarowej]]&lt;br /&gt;
#&lt;br /&gt;
## [[Sztuczne sieci neuronowe (ANN )|Sztuczne sieci neuronowe]]&lt;br /&gt;
## [[Algorytmy Genetyczne|Algorytmy Genetyczne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{color|green|'''Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].'''}} [[Grafika:CC-88x31.png]]&lt;br /&gt;
Autor: [http://durka.name Piotr Durka].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1yPKnOfmO3dEp0SeslNXwSfOoPzQFSanc?usp=sharing slajdy z wykładów]&lt;br /&gt;
&lt;br /&gt;
===zasady zaliczenia przedmiotu===&lt;br /&gt;
&lt;br /&gt;
Punktacja [[Wnioskowanie_Statystyczne_-_ćwiczenia | ćwiczeń]]:&lt;br /&gt;
*'''Kartkówki (20 pkt)''' 4 kartkówki po 5 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**data: '''17.05.2021''', w godz. 9:00 - 12:00&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do 22.06.2021)&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*Obecności&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* Minimum 25 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu (23.06.2021) lub w sesji jesiennej.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie wykładu:&lt;br /&gt;
Egzamin pisemny i ustny — szczegóły w zależności od stanu pandemii. &lt;br /&gt;
*Jeśli będzie egzamin pisemny, to będzie się składać z dwóch części: pytań zamkniętych jednokrotnego wyboru (analogicznie jak na egzaminie z TI) oraz pytań otwartych, na przykład:&lt;br /&gt;
** Sformułuj Centralne Twierdzenie Graniczne. &lt;br /&gt;
** Wypisz i przedyskutuj definicje prawdopodobieństwa.&lt;br /&gt;
** Wypisz założenia wersji Centralnego Twierdzenia Granicznego, którą można stosunkowo prosto udowodnić (twierdzenie Lindeberga-Levy'ego). Udowodnij lub spróbuj nakreślić szkic dowodu.&lt;br /&gt;
** Oblicz wartość oczekiwaną rozkładu równomiernego, określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2  lub  ''x''&amp;lt;0.&lt;br /&gt;
** Oblicz wariancję rozkładu równomiernego określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2 lub  ''x''&amp;lt;0&lt;br /&gt;
** Co to jest &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;?&lt;br /&gt;
** Wypisz / wyprowadź wzory na wartość oczekiwaną i wariancję rozkładu Poissona.&lt;br /&gt;
** Z rozkładu dwumianowego wylicz prawdopodobieństwo, że wśród czworga dzieci będą co najmniej trzy dziewczynki — zakładając, że prawdopodobieństwa urodzenia dziecka każdej płci są równe.&lt;br /&gt;
** Testy parametryczne i nieparametryczne: wady, zalety, przykłady.&lt;br /&gt;
** Co ma wspólnego poziom istotności testu z poprawką Bonferroniego?&lt;br /&gt;
** Co to jest i jak obliczamy moc testu?&lt;br /&gt;
** Opisz w punktach (zwięźle i konkretnie) procedurę weryfikacji hipotezy o różnicy średnich dwóch grup wyników &amp;lt;math&amp;gt;\{x_{i}, i=1\dots N$\}&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\{y_{j}, j=1\dots M\}&amp;lt;/math&amp;gt; metodą repróbkowania (resampling).&lt;br /&gt;
** Wyprowadź wzór na średnią ''N'' pomiarów &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; o różnych wariancjach &amp;lt;math&amp;gt;\sigma_{i}^2&amp;lt;/math&amp;gt; z metody największej wiarygodności.&lt;br /&gt;
** Dany jest zbiór rozłącznych hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt; pokrywających całą przestrzeń zdarzeń &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\sum_{i}H_{i}=\Omega&amp;lt;/math&amp;gt; oraz prawdopodobieństwa wyniku eksperymentu W w świetle każdej z hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt;, czyli &amp;lt;math&amp;gt;P(W\mid H_{i})&amp;lt;/math&amp;gt;. Korzystając z tych oznaczeń, wypisz i wyprowadź twierdzenie Bayesa, czyli wzór na prawdopodobieństwo prawdziwości hipotezy &amp;lt;math&amp;gt;H_{j}&amp;lt;/math&amp;gt; w świetle wyników eksperymentu W.&lt;br /&gt;
* Jeśli będzie egzamin ustny, to będzie obejmował tematy omawiane na wykładzie, jak np. powyższe.&lt;br /&gt;
* W obu przypadkach na ocenę końcową będą wpływać oceny z zadawanych na bieżąco prac domowych i punkty za aktywność.&lt;br /&gt;
&lt;br /&gt;
W ocenie końcowej będą brane pod uwagę aktywność na zajęciach oraz prace domowe, dostępne na platformie Kampus: [https://kampus.come.uw.edu.pl/course/view.php?id=4039]&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu = średnia ocen z ćwiczeń i z wykładu, pod warunkiem zaliczenia ćwiczeń '''i''' wykładu.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8546</id>
		<title>Wnioskowanie Statystyczne - wykład</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8546"/>
		<updated>2021-02-18T12:56:06Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* zasady zaliczenia przedmiotu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://docs.google.com/document/d/1PHoVNlKhBkOVmkJzgvm7Tu7nF-aXlhWAEXTJbv5qqQY/edit&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wnioskowanie statystyczne (wykład)=&lt;br /&gt;
&lt;br /&gt;
'''UWAGA: wymagane zaliczenie Technologii Informacyjnych i Komunikacyjnych z ćwiczeniami z programowania w Pythonie w wymiarze 45 godzin ćwiczeń'''&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady|Rozkłady gęstości prawdopodobieństwa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Momenty|Wariancja, mediana...]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady-przyklady|Przykładowe rozkłady]]&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/CLT|Centralne Twierdzenie Graniczne]]&lt;br /&gt;
#  &lt;br /&gt;
## [[WnioskowanieStatystyczne/wstep|Wstęp]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Klasyczna_teoria|Teoria klasyczna]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Statystyki_i_estymatory|Statystyki i estymatory]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Weryfikacja_hipotez|Weryfikacja hipotez statystycznych]] &lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_t|Test ''t'' Studenta]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_chi2|Test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Z_komputerem|Monte Carlo]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Testy_nieprametryczne|Testy nieparametryczne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_serii|Test serii]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_Wilcoxona|Test Wilcoxona-Manna-Whitneya]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Testy_permutacyjne|Testy permutacyjne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bootstrap|Bootstrap]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/MLF|Metoda największej wiarygodności]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Regresja_liniowa|Regresja liniowa]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Interpretacja współczynnika korelacji|Interpretacja współczynnika korelacji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bonferroni|Problem porównań wielokrotnych  -- miejskie legendy i przepowiednie]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Analiza_wariancji|Analiza wariancji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Twierdzenie_Bayesa|Twierdzenie Bayesa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Prawdopodobienstwo|Prawdopodobieństwo]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Elementy_statystyki_wielowymiarowej|Elementy statystyki wielowymiarowej]]&lt;br /&gt;
#&lt;br /&gt;
## [[Sztuczne sieci neuronowe (ANN )|Sztuczne sieci neuronowe]]&lt;br /&gt;
## [[Algorytmy Genetyczne|Algorytmy Genetyczne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{color|green|'''Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].'''}} [[Grafika:CC-88x31.png]]&lt;br /&gt;
Autor: [http://durka.name Piotr Durka].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1yPKnOfmO3dEp0SeslNXwSfOoPzQFSanc?usp=sharing slajdy z wykładów]&lt;br /&gt;
&lt;br /&gt;
===zasady zaliczenia przedmiotu===&lt;br /&gt;
&lt;br /&gt;
Punktacja [[Wnioskowanie_Statystyczne_-_ćwiczenia | ćwiczeń]]:&lt;br /&gt;
*'''Kartkówki (20 pkt)''' 4 kartkówki po 5 pkt w trakcie semestru&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Kolokwium (20 pkt)'''&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (10 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać, a następnie umówić się indywidualnie na obronę do 22.06.2021)&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*Obecności&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* Minimum 25 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu z wykładu.&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w czerwcu (23.06.2021) lub w sesji jesiennej.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie wykładu:&lt;br /&gt;
Egzamin pisemny i ustny — szczegóły w zależności od stanu pandemii. &lt;br /&gt;
*Jeśli będzie egzamin pisemny, to będzie się składać z dwóch części: pytań zamkniętych jednokrotnego wyboru (analogicznie jak na egzaminie z TI) oraz pytań otwartych, na przykład:&lt;br /&gt;
** Sformułuj Centralne Twierdzenie Graniczne. &lt;br /&gt;
** Wypisz i przedyskutuj definicje prawdopodobieństwa.&lt;br /&gt;
** Wypisz założenia wersji Centralnego Twierdzenia Granicznego, którą można stosunkowo prosto udowodnić (twierdzenie Lindeberga-Levy'ego). Udowodnij lub spróbuj nakreślić szkic dowodu.&lt;br /&gt;
** Oblicz wartość oczekiwaną rozkładu równomiernego, określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2  lub  ''x''&amp;lt;0.&lt;br /&gt;
** Oblicz wariancję rozkładu równomiernego określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2 lub  ''x''&amp;lt;0&lt;br /&gt;
** Co to jest &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;?&lt;br /&gt;
** Wypisz / wyprowadź wzory na wartość oczekiwaną i wariancję rozkładu Poissona.&lt;br /&gt;
** Z rozkładu dwumianowego wylicz prawdopodobieństwo, że wśród czworga dzieci będą co najmniej trzy dziewczynki — zakładając, że prawdopodobieństwa urodzenia dziecka każdej płci są równe.&lt;br /&gt;
** Testy parametryczne i nieparametryczne: wady, zalety, przykłady.&lt;br /&gt;
** Co ma wspólnego poziom istotności testu z poprawką Bonferroniego?&lt;br /&gt;
** Co to jest i jak obliczamy moc testu?&lt;br /&gt;
** Opisz w punktach (zwięźle i konkretnie) procedurę weryfikacji hipotezy o różnicy średnich dwóch grup wyników &amp;lt;math&amp;gt;\{x_{i}, i=1\dots N$\}&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\{y_{j}, j=1\dots M\}&amp;lt;/math&amp;gt; metodą repróbkowania (resampling).&lt;br /&gt;
** Wyprowadź wzór na średnią ''N'' pomiarów &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; o różnych wariancjach &amp;lt;math&amp;gt;\sigma_{i}^2&amp;lt;/math&amp;gt; z metody największej wiarygodności.&lt;br /&gt;
** Dany jest zbiór rozłącznych hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt; pokrywających całą przestrzeń zdarzeń &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\sum_{i}H_{i}=\Omega&amp;lt;/math&amp;gt; oraz prawdopodobieństwa wyniku eksperymentu W w świetle każdej z hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt;, czyli &amp;lt;math&amp;gt;P(W\mid H_{i})&amp;lt;/math&amp;gt;. Korzystając z tych oznaczeń, wypisz i wyprowadź twierdzenie Bayesa, czyli wzór na prawdopodobieństwo prawdziwości hipotezy &amp;lt;math&amp;gt;H_{j}&amp;lt;/math&amp;gt; w świetle wyników eksperymentu W.&lt;br /&gt;
* Jeśli będzie egzamin ustny, to będzie obejmował tematy omawiane na wykładzie, jak np. powyższe.&lt;br /&gt;
* W obu przypadkach na ocenę końcową będą wpływać oceny z zadawanych na bieżąco prac domowych i punkty za aktywność.&lt;br /&gt;
&lt;br /&gt;
W ocenie końcowej będą brane pod uwagę aktywność na zajęciach oraz prace domowe, dostępne na platformie Kampus: [https://kampus.come.uw.edu.pl/course/view.php?id=4039]&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu = średnia ocen z ćwiczeń i z wykładu, pod warunkiem zaliczenia ćwiczeń '''i''' wykładu.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci&amp;diff=8545</id>
		<title>WnioskowanieStatystyczne/ Przedziały ufności</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci&amp;diff=8545"/>
		<updated>2021-02-18T10:27:38Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadania */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Wstęp ==&lt;br /&gt;
Średnia (lub inny parametr) estymowany na podstawie próby pobranej z populacji nie jest równa rzeczywistej wartości tego parametru w populacji. &lt;br /&gt;
* Wylosuj 10 razy 100 liczb z rozkładu normalnego &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt; i oblicz średnią. Czy udało ci się zaobserwować wartość 0?&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
for i in range(10):&lt;br /&gt;
	x=st.norm.rvs(size=100)&lt;br /&gt;
	print(np.mean(x))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Rozbieżność między uzyskanym wynikiem a rzeczywistą średnią populacji zależy od wielkości badanej grupy oraz zmienności badanej cechy w jej obrębie. Jeśli badana grupa jest niewielka i ma dużą zmienność analizowanej cechy wówczas rozbieżność między średnią uzyskaną, a rzeczywistą może być znaczna. Natomiast, jeśli badana grupa jest duża z niewielką zmiennością danych, wówczas uzyskana średnia będzie prawdopodobnie bardzo bliska średniej populacyjnej. Przedział ufności ({{ang|confidence interval &amp;amp;mdash;  CI}}) odzwierciedla zarówno wielkość badanej grupy jak i zmienność analizowanej cechy wewnątrz tej grupy. &lt;br /&gt;
Przedział ufności jest określany z różnym procentem &amp;amp;bdquo;zaufania&amp;amp;rdquo;, np. 90 czy też 95%. Najczęściej używa się 95% przedziału ufności. Oznacza to, że jeśli grupa badana była zgromadzona w sposób losowy to rzeczywisty parametr populacji z 95% pewnością znajduje się w tym przedziale. Innymi słowy, możemy sobie wyobrazić, że mamy dostępne wyniki dowolnie wielu badań analogicznych do analizowanego. Oczekujemy, że w 95% przypadków badana cecha znajduje się wewnątrz wyznaczonego przez nas przedziału ufności. &lt;br /&gt;
&lt;br /&gt;
Pewnych problemów koncepcyjnych nastręcza konstrukcja przedziałów ufności.  Dla danej znanej populacji możemy obliczyć średnią populacji oraz prawdopodobieństwo uzyskania konkretnej wartości średniej przy losowaniu próby o zadanej liczebności z tejże populacji, możemy więc określić prawdopodobieństwo &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, że odległość średniej z próby i średniej z populacji jest &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Mając do dyspozycji tylko próbę możemy albo założyć, że pochodzi ona z jakiegoś znanego rozkładu i wyliczyć z niego wartości krytyczne albo zakładając, że jest ona reprezentatywna możemy metodą bootstrapu &amp;amp;bdquo;wytworzyć&amp;amp;rdquo; wiele innych prób z badanej populacji i oszacować jakie są granice, w które wpada żądana frakcja średnich (np.:90%, 95%).  &lt;br /&gt;
&lt;br /&gt;
''Bootstrap'' jest związany z pobieraniem próby. Najkorzystniejszą sytuacją jest ta, w której dla oszacowania różnych parametrów statystycznych populacji mamy możliwość pobierania z tej populacji wielu prób. Jeśli jest to niemożliwe możemy posłużyć się pobieraniem wielokrotnie prób z tej próby, którą posiadamy. Postępowanie takie jest sensowne pod warunkiem, że próba, która służy nam do generowania innych możliwych pobrań próby jest ''reprezentatywna''. '''W bootstrapie losujemy ze zwracaniem''' (dlaczego?). &amp;lt;!-- Zakładamy, że pobranie elementu o danej wartości nie zmienia prawdopodobieństwa wylosowania ponownie elementu o tej wartości --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przedział ufności dla średniej ==&lt;br /&gt;
===  Przypadek 1: znana wariancja rozkładu ===&lt;br /&gt;
Rozważamy zmienną losową podlegającą rozkładowi &amp;lt;math&amp;gt;N(\mu,\sigma^2)&amp;lt;/math&amp;gt; czyli rozkładowi normalnemu o średniej &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt; i znanym odchyleniu standardowym  &amp;lt;math&amp;gt; \sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
Pobieramy próby tych zmiennych losowych o rozmiarze &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Przypomnijmy, że średnia z takiej próby też może być traktowana jako zmienna losowa.  [http://brain.fuw.edu.pl/edu/STAT:Statystyki_i_estymatory#Estymator_warto.C5.9Bci_oczekiwanej Podlega ona rozkładowi] normalnemu o średniej  &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt; i standardowym odchyleniu &amp;lt;math&amp;gt;\frac{\sigma}{\sqrt{n}}&amp;lt;/math&amp;gt; czyli &amp;lt;math&amp;gt;N\left( \mu,\frac{\sigma^2}{n} \right)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Oznacza to, że zmienna &amp;lt;math&amp;gt;\frac{\bar x - \mu}{\sigma/\sqrt{n}}  &amp;lt;/math&amp;gt; podlega rozkładowi &amp;lt;math&amp;gt; N(0,1)&amp;lt;/math&amp;gt; czyli &amp;lt;math&amp;gt; Z&amp;lt;/math&amp;gt;.  Konstrukcja przedziału ufności dla średniej polega zatem na znalezieniu takich wartości &amp;lt;math&amp;gt;z_{\alpha/2}&amp;lt;/math&amp;gt;, że:&lt;br /&gt;
: &amp;lt;math&amp;gt; P \left(  \left|\frac{\bar x - \mu}{\sigma/\sqrt{n}} \right| \le z_{\alpha/2}\right) = 1-\alpha &amp;lt;/math&amp;gt; &lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt; (1-\alpha)*100&amp;lt;/math&amp;gt;% :&lt;br /&gt;
: &amp;lt;math&amp;gt; \left[ \bar x - z_{\alpha/2}\frac{\sigma}{\sqrt n} ,\;\;\; \bar x+ z_{\alpha/2}\frac{\sigma}{\sqrt n} \right] &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Przykład ====&lt;br /&gt;
Wyciągamy losową próbę &amp;lt;math&amp;gt; (n = 25)&amp;lt;/math&amp;gt;  z populacji o rozkładzie normalnym. Dostajemy średnią z próby &amp;lt;math&amp;gt; \bar x = 122&amp;lt;/math&amp;gt;. Załóżmy, że znamy standardowe odchylenie populacji &amp;lt;math&amp;gt; \sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Oblicz przedział ufności 95% dla średniej populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Co zrobić aby zmniejszyć obliczony przedział 10-krotnie?&lt;br /&gt;
&lt;br /&gt;
Korzystając z tablic znajdujemy &amp;lt;math&amp;gt; z_{\alpha/2} = z_{2,5\%} = -1,96&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
: Wartość tą możemy uzyskać wołając w pythonie: &lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.norm.ppf(0.025)&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &lt;br /&gt;
\bar x \pm 1,96 \frac{\sigma}{\sqrt{n}} = 122 \pm 1,96\cdot\frac{20}{\sqrt{25}} = 122 \pm 7,84 = [\mathrm{114,16} \;\;\; 129,84]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy być pewni na 95%, że nieznana średnia populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;  znajduje się pomiędzy 114,16 a 129,84. Jeśli chcemy zmniejszyć przedział ufności 10-krotnie, musimy pobrać 100 razy większą próbę tj. ''n'' = 2500.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: Pracując z modułem scipy.stats mamy do dyspozycji rozkłady normalne &amp;lt;math&amp;gt;N(\mu,\sigma)&amp;lt;/math&amp;gt;  o dowolnych parametrach &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;. &lt;br /&gt;
: Możemy więc uzyskać interesujący nas przedział ufności przy pomocy pojedynczego wywołania:&lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.norm.ppf([0.025, 0.975],loc = 122, scale = 20.0/25**0.5)&amp;lt;/source&amp;gt;  gdzie  &amp;lt;tt&amp;gt;loc = &amp;lt;/tt&amp;gt; &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; oraz &amp;lt;tt&amp;gt;scale = &amp;lt;/tt&amp;gt;&amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Importer win musi zbadać średnią zawartość alkoholu w nowej partii win francuskich. Z doświadczenia z poprzednimi gatunkami wina, przyjmuje on, że standardowe odchylenie w populacji wynosi 1,2%. Importer wybrał losową próbę 60 butelek nowego wina i otrzymał średnią z próby 9,3%. Znaleźć przedział ufności 90% dla średniej zawartości alkoholu w nowej partii win.&lt;br /&gt;
&lt;br /&gt;
''Odp.'': [9,0452 9,5548].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
sigma=1.2&lt;br /&gt;
N=60&lt;br /&gt;
x_sr=9.3&lt;br /&gt;
sigma_sr=sigma/N**0.5&lt;br /&gt;
alfa=0.1&lt;br /&gt;
&lt;br /&gt;
#korzystając ze wzoru&lt;br /&gt;
print(st.norm.ppf([alfa/2,1-alfa/2]) * sigma_sr + x_sr)&lt;br /&gt;
#lub korzystając z rozkładu o zadanych parametrach&lt;br /&gt;
print(st.norm.ppf([alfa/2,1-alfa/2], loc=x_sr, scale=sigma_sr) )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przypadek 2: nieznana wariancja rozkładu ===&lt;br /&gt;
Sytuacja zmienia się jeśli zakładamy, że  próba pochodzi z rozkładu normalnego o śreniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; i nieznanej wariancji.&lt;br /&gt;
Musimy wówczas zamiast wariancji posłużyć się jej estymatorem &amp;lt;math&amp;gt;s^2 = \frac{1}{n-1} \sum_{i=1}^n {\left(x_i-\mu\right)^2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Zmienna losowa &amp;lt;math&amp;gt;\frac{\bar x  - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt; podlega rozkładowi &amp;lt;math&amp;gt;t_{n-1}&amp;lt;/math&amp;gt; (czytaj: rozkładowi ''t'' o ''n''&amp;amp;minus;1 stopniach swobody). Konstrukcja przedziału ufności dla średniej polega zatem na znalezieniu takich wartości &amp;lt;math&amp;gt;t_{\alpha/2}&amp;lt;/math&amp;gt; w rozkładzie ''t'' o ''n''&amp;amp;minus;1 stopniach swobody, że:&lt;br /&gt;
: &amp;lt;math&amp;gt; P \left(  \left|\frac{\bar x - \mu}{s/\sqrt{n}} \right| \le t_{\alpha/2}\right) = 1-\alpha &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt; (1-\alpha)\cdot 100&amp;lt;/math&amp;gt;% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;, gdy nie znamy odchylenia standardowego &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;, a jedynie jego estymatę:&lt;br /&gt;
:: &amp;lt;math&amp;gt; &lt;br /&gt;
\left[ &lt;br /&gt;
\bar x- t_{\frac{\alpha}{2}} \frac{s}{\sqrt{n}}, \,\,\,\,\, \bar x+ t_{\frac{\alpha}{2}} \frac{s}{\sqrt{n}}\right] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:gdzie &amp;lt;math&amp;gt; t_{\alpha/2}&amp;lt;/math&amp;gt;  jest wartością, która odcina obszar &amp;amp;alpha;/2 z rozkładu &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt; z ''n''&amp;amp;minus;1 stopniami swobody.&lt;br /&gt;
&lt;br /&gt;
;Uwaga: w Pythonie możemy skorzystać z funkcji modułu &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; do obliczania wartości estymatorów:&lt;br /&gt;
:* ''s''  &amp;lt;tt&amp;gt;numpy.std&amp;lt;/tt&amp;gt; &lt;br /&gt;
:*  &amp;lt;math&amp;gt;\bar x&amp;lt;/math&amp;gt; &amp;lt;tt&amp;gt;numpy.mean&amp;lt;/tt&amp;gt;&lt;br /&gt;
==== Przykład ====&lt;br /&gt;
Lekarz chce zbadać średni czas trwania kuracji tj. od podania leku do ustąpienia objawów w pewnej chorobie. Losowa próba 15 pacjentów dała średni czas &amp;lt;math&amp;gt;\bar x = 10,37&amp;lt;/math&amp;gt;  dnia i odchylenie standardowe &amp;lt;math&amp;gt;s = 3,5&amp;lt;/math&amp;gt;  dnia. Zakładając normalny rozkład w populacji czasów trwania kuracji znaleźć 95% przedział ufności dla średniego czasu trwania kuracji.&lt;br /&gt;
&lt;br /&gt;
Znajdujemy wartość z rozkładu &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;  o ''n''&amp;amp;minus;1 (=14) stopniach swobody, która odcina obszar &amp;lt;math&amp;gt; \alpha/2 = 0,025&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt; t_{0,025} = 2,145&amp;lt;/math&amp;gt;.&lt;br /&gt;
: w pythonie: &amp;lt;source lang =python&amp;gt;st.t.ppf(0.025,14)&amp;lt;/source&amp;gt;&lt;br /&gt;
Dostajemy więc &amp;lt;math&amp;gt; \bar x \pm t_{\alpha/2}\frac{s}{\sqrt{n}} = 10,37 \pm 2,145\cdot\frac{3,5}{\sqrt{15}} = [8,\!43\ 12,\!31]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
: Podobnie jak w poprzednim przykładzie możemy też skorzystać z tego, że w scipy.stats definiowane są rozkłady &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o dowolnych parametrach i wykonać całe obliczenia jednym wywołaniem funkcji:&lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.t.ppf([0.025, 0.975], 14, loc = 10.37, scale = 3.5/15**0.5)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lekarz może być pewny, że w 95% przypadków od podania leku do ustąpienia objawów upłynie czas pomiędzy 8,43 a 12,31 dnia.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Producent opon rowerowych chce oszacować średni dystans jaki można przejechać na oponie pewnego rodzaju zanim opona się zużyje. Pobrano losową próbę 32 opon, opona jest używana aż do przetarcia i odległość przejechana na każdej oponie jest rejestrowana. Dane (w tysiącach kilometrów) są następujące:&lt;br /&gt;
&lt;br /&gt;
32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, 25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41&lt;br /&gt;
&lt;br /&gt;
Znaleźć 99% przedział ufności dla średniego przebiegu opon tego rodzaju. Zadanie rozwiązać analogicznie jak powyższy przykład.&lt;br /&gt;
&lt;br /&gt;
''Odp'': [ 27,76  33,36].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
X=np.array([32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, 25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41])&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
x_sr = X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
s_sr=s/N**0.5&lt;br /&gt;
&lt;br /&gt;
print(st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=x_sr,scale=s_sr))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zadanie to można rozwiązać także w oparciu o bootstrap, wykorzystując funkcję zwracającą wartość zadanego [http://brain.fuw.edu.pl/edu/WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Kwantyle kwantyla] dla danego rozkładu. Rozkład jest tu zadany empirycznie w postaci zbioru.&lt;br /&gt;
: &amp;lt;source lang = python&amp;gt; st.scoreatpercentile(zbiór, kwantyl) &amp;lt;/source&amp;gt;&lt;br /&gt;
Proszę zwrócić uwagę na rozbieżności w wynikach. Z czego one wynikają?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
# rozwiązanie przez bootstrap&lt;br /&gt;
 &lt;br /&gt;
def randsample(x):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = n)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
 &lt;br /&gt;
N_rep = 100000&lt;br /&gt;
x = np.array([32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, &lt;br /&gt;
25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41])&lt;br /&gt;
 &lt;br /&gt;
r = np.zeros((N_rep,1))&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	x_boot = randsample(x)&lt;br /&gt;
	r[i] = np.mean(x_boot)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, 0.5) #uwaga: ta funkcja jako arg. bierze procenty a nie ułamki dziesiętne!&lt;br /&gt;
ci_g = st.scoreatpercentile(r, 99.5)&lt;br /&gt;
print('Z bootstrapu: ', ci_d, '-', ci_g)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przedział ufności dla wariancji ==&lt;br /&gt;
Zauważmy, że:&lt;br /&gt;
:&amp;lt;math&amp;gt; \frac{\sum_{i=1}^N\left(x_i-\bar{x}\right)^2}{\sigma^2}&amp;lt;/math&amp;gt; &lt;br /&gt;
podlega rozkładowi &amp;lt;math&amp;gt; \chi^2_{N-1}&amp;lt;/math&amp;gt;  o ''N''&amp;amp;minus;1 stopniach swobody, zaś nieobciążony estymator wariancji to&lt;br /&gt;
:&amp;lt;math&amp;gt;  s^2=\frac{1}{N-1}\sum_{i=1}^N \left(x_i-\bar{x}\right)^2 &amp;lt;/math&amp;gt; &lt;br /&gt;
Zatem zmienna losowa &lt;br /&gt;
:&amp;lt;math&amp;gt;  \frac{s^2(N-1)}{\sigma^2}&amp;lt;/math&amp;gt; &lt;br /&gt;
także podlega rozkładowi &amp;lt;math&amp;gt; \chi^2_{N-1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Aby znaleźć &amp;lt;math&amp;gt;(1-\alpha) &amp;lt;/math&amp;gt;100% przedział ufności dla wariancji, musimy wyznaczyć &lt;br /&gt;
takie wartości krytyczne &amp;lt;math&amp;gt; \chi^2_{N-1,\alpha/2}&amp;lt;/math&amp;gt; &lt;br /&gt;
oraz  &amp;lt;math&amp;gt; \chi^2_{N-1,1-\alpha/2}&amp;lt;/math&amp;gt; aby:&lt;br /&gt;
:&amp;lt;math&amp;gt;P\left( \chi^2_{N-1,\alpha/2} &amp;lt; \frac{s^2(N-1)}{\sigma^2}&amp;lt; \chi^2_{N-1,1-\alpha/2} \right) = 1-\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2_{N-1,\alpha/2}&amp;lt;/math&amp;gt; jest wartością, która odcina na lewo obszar &amp;amp;alpha;/2 z rozkładu chi-kwadrat z ''n''&amp;amp;minus;1 stopniami swobody. &amp;lt;math&amp;gt;\chi^2_{N-1,1-\alpha/2}&amp;lt;/math&amp;gt;  jest wartością, która odcina na prawo obszar &amp;amp;alpha;/2 z rozkładu chi-kwadrat z ''n''&amp;amp;minus;1 stopniami swobody (lub równoważnie: odcina na lewo obszar 1&amp;amp;minus;&amp;amp;alpha;/2).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Powyższe wyrażenie jest równoważne:&lt;br /&gt;
:&amp;lt;math&amp;gt;P\left( \frac{(N-1)s^2}{\chi^2_{N-1,1-\alpha/2}} &amp;lt; \sigma^2&amp;lt; \frac{(N-1)s^2}{\chi^2_{n-1,\alpha/2}} \right) = 1-\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt;(1-\alpha)*100&amp;lt;/math&amp;gt; % dla wariancji populacji &amp;lt;math&amp;gt; \sigma^2&amp;lt;/math&amp;gt;, gdy rozkład populacji jest normalny:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\left[\frac{(n-1)s^2}{\chi^2_{N-1,1-\alpha/2}}, \;\; \frac{(n-1)s^2}{\chi^2_{N-1,\alpha/2}} \right]&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
Automat do kawy nalewa kawę do kubków. Jeśli średnia porcja kawy w kubku odbiega od normy, maszynę można wyregulować. Jeśli jednak wariancja porcji kawy jest zbyt duża, maszyna wymaga reperacji. Od czasu do czasu przeprowadzana jest kontrola wariancji porcji kawy. Odbywa się to poprzez wybór losowej próby napełnionych kubków i policzenie wariancji próby. Losowa próba 30 kubków dała wariancję próby &amp;lt;math&amp;gt; s^2 = 18,54&amp;lt;/math&amp;gt;. Obliczyć 95% przedział ufności dla wariancji populacji &amp;lt;math&amp;gt; \sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
''Wskazówka: rozkład'' &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; ''dostępny jest w module scipy.stats jako '' &amp;lt;tt&amp;gt;chi2&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''Odp'': [11,759 33,505].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
n = 30&lt;br /&gt;
s2 = 18.54&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
&lt;br /&gt;
chi_kryt_d = st.chi2.ppf(1-alfa/2, df=n-1)&lt;br /&gt;
chi_kryt_g = st.chi2.ppf(alfa/2, df=n-1)&lt;br /&gt;
&lt;br /&gt;
ci_d = (n-1)*s2/chi_kryt_d&lt;br /&gt;
ci_g = (n-1)*s2/chi_kryt_g&lt;br /&gt;
print('przedział ufności: %(d).3f %(g).3f'%{'d':ci_d, 'g':ci_g})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rozmiar próby ==&lt;br /&gt;
&lt;br /&gt;
Gdy pobieramy próbę, często chcielibyśmy znać minimalny rozmiar próby, który zapewni nam żądaną precyzję wyniku.&lt;br /&gt;
&lt;br /&gt;
Musimy odpowiedzieć sobie na trzy pytania:&lt;br /&gt;
* Jak nasze oszacowanie nieznanego parametru ma być bliskie prawdziwej wartości? Odpowiedź oznaczmy &amp;lt;math&amp;gt; D&amp;lt;/math&amp;gt;  (dystans).&lt;br /&gt;
* Jaki chcemy mieć poziom ufności, że nasze oszacowanie i prawdziwa wartość parametru są od siebie oddalone o nie więcej niż ''D''?&lt;br /&gt;
* Jakie jest oszacowanie wariancji w populacji?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jeśli nie znamy odpowiedzi na pkt. 3 przeprowadzamy tzw. ''pilot study'' i szacujemy &amp;lt;math&amp;gt; \sigma&amp;lt;/math&amp;gt; na podstawie odchylenia std. próby. &lt;br /&gt;
&lt;br /&gt;
Średnia &amp;lt;math&amp;gt;\bar x&amp;lt;/math&amp;gt; podlega rozkładowi normalnemu &amp;lt;math&amp;gt;N(\mu,\sigma^2/\sqrt{n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
Wymagana odległość pomiędzy &amp;lt;math&amp;gt;\bar x -\mu =D&amp;lt;/math&amp;gt;. Korzystając z transformacji do rozkładu standardowego ''Z'' możemy zapisać &amp;lt;math&amp;gt;\bar x = \mu +z \sigma/\sqrt{n}&amp;lt;/math&amp;gt;. Podstawiając do poprzedniego wyrażenia otrzymujemy &lt;br /&gt;
minimalny rozmiar próby potrzebny do oszacowania średniej populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;, który wynosi:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n=\frac{z_{\alpha/2}^2\sigma^2}{D^2}&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
W przypadku nieznajomości &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; korzystamy z jej [http://brain.fuw.edu.pl/edu/index.php/WnioskowanieStatystyczne/Statystyki_i_estymatory nieobciążonego estymatora] &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
Biuro podróży chce oszacować średnią ilość pieniędzy wydaną na wakacje przez osoby korzystające z jego usług. Ludzie przeprowadzający analizę chcieliby móc oszacować średni koszt wakacji z dokładnością do 200 zł na poziomie ufności 95%. Z poprzednich doświadczeń tego biura podróży wynika, że odchylenie standardowe w populacji wynosi &amp;lt;math&amp;gt; \sigma = 400&amp;lt;/math&amp;gt; zł. Jaka będzie minimalna wielkość próby?&lt;br /&gt;
&lt;br /&gt;
''Odp'': &amp;lt;math&amp;gt; n = 15,366&amp;lt;/math&amp;gt; więc wielkość próby wynosi 16 (zaokrąglamy w górę).&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
 &lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
 &lt;br /&gt;
alfa = 0.05&lt;br /&gt;
x=np.ones(100)&lt;br /&gt;
x[56:]=0&lt;br /&gt;
Nboot=100000&lt;br /&gt;
A=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
    ankieta=randsample(x,1500)&lt;br /&gt;
    A[i]=np.sum(ankieta)/1500.0&lt;br /&gt;
lo = st.scoreatpercentile(A, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(A, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch) = py.hist(A,bins = biny )&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przykład z bootstrapem ==&lt;br /&gt;
Rozważmy sondę przedwyborczą, mamy dwóch kandydatów na prezydenta. Ankietowano 1500 osób. 840 osób deklarowało poparcie dla kandydata A zaś 660 dla kandydata B. Na ile pewny może być kandydat A swojego zwycięstwa?&lt;br /&gt;
* Jak dokładnie brzmi pytanie? W terminologii przedziałów ufności możemy je sformułować następująco: Jaki jest 95% przedział ufności dla poparcia kandydata A w całej populacji? Czy też innymi słowami: W jakim przedziale na 95% znajduje się proporcja glosujących popierających kandydata A.&lt;br /&gt;
* Nasze najlepsze mniemanie o własnościach &amp;amp;bdquo;świata&amp;amp;rdquo; z którego pochodzą dane otrzymujemy ze zwykłej proporcji. Wynika z niej, że kandydat A ma poparcie 56% zaś kandydat B poparcie 44%  wyborców.&lt;br /&gt;
* Przypiszmy do kandydata A &amp;amp;bdquo;1&amp;amp;rdquo; zaś do B &amp;amp;bdquo;0&amp;amp;rdquo; (w ten sposób tworzymy zmienną losową: oddany głos).&lt;br /&gt;
* Pobranie ankiety modelujemy przez pobranie losowo 1500 próbek z modelu naszego &amp;amp;bdquo;świata&amp;amp;rdquo; czyli wektora złożonego z 56 jedynek i 44 zer. Wynikiem jednej ankiety jest proporcja popierających kandydata A (lub B)&lt;br /&gt;
* Zbieramy rozkład proporcji - musimy w tym celu &amp;amp;bdquo;przeprowadzić&amp;amp;rdquo; wielokrotnie ankietę. Narysujmy histogram. &lt;br /&gt;
* Chcemy znaleźć 95% przedział ufności musimy znaleźć kwantyl 2,5 oraz 97,5.&lt;br /&gt;
Liczby te stanowią poszukiwany przedział ufności. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
x=np.ones(100)&lt;br /&gt;
x[56:]=0&lt;br /&gt;
Nboot=10000&lt;br /&gt;
A=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
    ankieta=randsample(x,1500)&lt;br /&gt;
    A[i]=np.sum(ankieta)/1500.0&lt;br /&gt;
lo = st.scoreatpercentile(A, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(A, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+11*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch) = py.hist(A,bins = biny )&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zadania ==&lt;br /&gt;
=== Przyrost masy w nowej diecie ===&lt;br /&gt;
Producent karmy dla zwierząt chciał przetestować nowy rodzaj karmy. Próbki podawał 12 zwierzakom przez 4 tygodnie. Po tym czasie zanotował następujące przyrosty masy:&lt;br /&gt;
&lt;br /&gt;
15.43, 16.92, 14.43, 12.94, 15.92, 17.42, 18.91, 16.92, 14.93, 14.49, 15.92, 15.43 kg&lt;br /&gt;
&lt;br /&gt;
średni przyrost wynosi 15.80 kg. Producent widzi jednak, że w próbie jest dość znaczny rozrzut pomiędzy poszczególnymi zwierzętami 12,94-18,91 i nie jest pewien czy można reklamować nowy produkt podając średni przyrost 15,8 kg. Podejrzewa, że inna grupa zwierząt może mieć zupełnie inną średnią. &lt;br /&gt;
* Używając powyższych danych znajdź 95% przedział ufności na średni przyrost masy.&lt;br /&gt;
* Wynik zilustruj przy pomocy histogramu.&lt;br /&gt;
* Jaki byłby wynik przy założeniu, że masy zwierząt pochodzą z rozkładu normalnego?&lt;br /&gt;
&lt;br /&gt;
''Odp:''&lt;br /&gt;
: zakładając, że ''x'' pochodzi z rozkładu normalnego:&lt;br /&gt;
: [14,80  16,81];&lt;br /&gt;
: bootstrap: 14,94-16,67.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.array([15.43, 16.92, 14.43, 12.94, 15.92, 17.42, 18.91, 16.92, 14.93, 14.49, 15.92, 15.43])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xsr=X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;średnia&amp;quot;,Xsr)&lt;br /&gt;
&lt;br /&gt;
M=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=xb.mean()&lt;br /&gt;
&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=Xsr,scale=s/N**0.5)&lt;br /&gt;
print('przedzial ufnosci z założenia o normalności: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch)=py.hist(M,bins=biny)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Zawartość aluminium w Tebańskich naczyniach. ===&lt;br /&gt;
Zawartość procentowa aluminium w 18 antycznych naczyniach z Teb była następująca:&amp;lt;br/&amp;gt;&lt;br /&gt;
11.4, 13.4, 13.5, 13.8, 13.9, 14.4, 14.5, 15, 15.1, 15.8, 16, 16.3, 16.5, 16.9, 17, 17.2, 17.5, 19.0&amp;lt;br/&amp;gt;&lt;br /&gt;
Jaka jest mediana procentowej zawartości aluminium i jaki jest 95% przedział ufności?&lt;br /&gt;
&lt;br /&gt;
''Odp'':&lt;br /&gt;
:mediana 15,45 i przedział ufności: 14,20 16,70.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.array([11.4, 13.4, 13.5, 13.8, 13.9, 14.4, 14.5, 15, 15.1, 15.8, 16, 16.3, 16.5, 16.9, 17, 17.2, 17.5, 19.0])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xmed=np.median(X)&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;mediana probki&amp;quot;,Xmed)&lt;br /&gt;
&lt;br /&gt;
M=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=np.median(xb)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla mediany (z bootstrapu): %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(M,bins=10)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Średnica drzew ===&lt;br /&gt;
Ogrodnik eksperymentuje z nowym gatunkiem drzew. Posadził 20 sztuk i po dwóch latach zmierzył następujące średnice pni (w cm):&lt;br /&gt;
8.5, 7.6, 9.3, 5.5, 11.4, 6.9, 6.5, 12.9, 8.7, 4.8, 4.2, 8.1, 6.5, 5.8, 6.7, 2.4, 11.1, 7.1, 8.8, 7.2&lt;br /&gt;
* Proszę znaleźć średnią średnicę i 90% przedział ufności dla średniej.&lt;br /&gt;
* Proszę znaleźć medianę i 90% przedział ufności dla mediany.&lt;br /&gt;
* Obydwa wyniki zilustrować przy pomocy histogramów.&lt;br /&gt;
''Odp:''&lt;br /&gt;
: średnia: 7,50 i przedzial ufnosci dla średniej: [6,61  8,41];&lt;br /&gt;
: mediana 7,15 i przedzial ufnosci dla mediany: [6,50  8,50].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source  lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_przedzialem(x,hi,lo):&lt;br /&gt;
	szer_binu = (hi-lo)/10	&lt;br /&gt;
	biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
	(n,bin_x,patch) = py.hist(x,bins = biny );&lt;br /&gt;
	py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
	py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
X=np.array([8.5, 7.6, 9.3, 5.5, 11.4, 6.9, 6.5, 12.9, 8.7, 4.8, 4.2, 8.1, 6.5, 5.8, 6.7, 2.4, 11.1, 7.1, 8.8, 7.2])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.1&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;Średnia próbki&amp;quot;,np.mean(X))&lt;br /&gt;
print(&amp;quot;Mediana próbki&amp;quot;,np.median(X))&lt;br /&gt;
print(&amp;quot;Liczebność próbki&amp;quot;,N)&lt;br /&gt;
&lt;br /&gt;
Sr=np.empty(Nboot)&lt;br /&gt;
Med=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Med[i]=np.median(xb)&lt;br /&gt;
	Sr[i]=np.mean(xb)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Sr, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Sr, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla średniej: %(lo).3f - %(hi).3f'%{'lo':lo,'hi':hi})&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
hist_z_przedzialem(Sr,hi,lo)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Med, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Med, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla mediany: %(lo).3f - %(hi).3f'%{'lo':lo,'hi':hi})&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
hist_z_przedzialem(Med,hi,lo)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Przedział ufności dla proporcji ===&lt;br /&gt;
W badaniach nad cholesterolem u ludzi stwierdzono, że w grupie 135 badanych z wysokim poziomem cholesterolu 10 osób przeszło zawał serca. &lt;br /&gt;
&lt;br /&gt;
''Pytanie'': Jaki jest 95% przedział ufności dla proporcji 10/135?  &lt;br /&gt;
&lt;br /&gt;
* Proszę wykorzystać metodę bootstrapu.&lt;br /&gt;
* Proszę wykorzystać rozkład dwumianowy.&lt;br /&gt;
&lt;br /&gt;
''Odp'': proporcja 10/135 = 0,07 i jej 95% przedział ufności [0,03 0,12].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.zeros(135)&lt;br /&gt;
X[:10]=1&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
&lt;br /&gt;
Proporcja=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Proporcja[i]=np.sum(xb)/N&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Proporcja, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Proporcja, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(Proporcja,bins=np.arange(0,1,1/135)-1/270)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p=10/135&lt;br /&gt;
lo,hi = st.binom.ppf([alfa/2,1-alfa/2],N,p)/N&lt;br /&gt;
print('przedzial ufnosci z rozkładu dwumianowego: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Bezrobotni ===&lt;br /&gt;
W próbce 200 osób 7 procent jest bezrobotnych. Określić 95% przedział ufności dla odsetka bezrobotnych w populacji.&lt;br /&gt;
&lt;br /&gt;
''Odp'': Średnia 7% i jej 95% przedział ufności [3,50 10,50].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.zeros(100)&lt;br /&gt;
X[:7]=1&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=200&lt;br /&gt;
&lt;br /&gt;
Proporcja=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Proporcja[i]=np.sum(xb)/N*100 #chcemy procenty i dlatego mnożymy przez 100&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Proporcja, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Proporcja, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(Proporcja,bins=30)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
p=7/100&lt;br /&gt;
lo,hi = st.binom.ppf([alfa/2,1-alfa/2],N,p)/N*100&lt;br /&gt;
print('przedzial ufnosci z rozkładu dwumianowego: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Żywotność baterii ===&lt;br /&gt;
W próbce 20 testowanych baterii stwierdzono średni czas życia 28,85 miesiąca. Określić 95% przedział ufności dla średniej. Wartości dla badanej próbki były następujące:&amp;lt;br&amp;gt;&lt;br /&gt;
30, 32, 31, 28, 31, 29, 29, 24, 30, 31, 28, 28, 32, 31, 24, 23, 31, 27, 27, 31 miesięcy&amp;lt;br&amp;gt;&lt;br /&gt;
Obejrzeć rozkład przy pomocy &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; i zbadać jaki wpływ na przedział ufności ma przyjęcie założenia o normalności rozkładu czasów życia.&lt;br /&gt;
&lt;br /&gt;
''Odp'': Średnia 28,85 i jej 95% przedział ufności [27,65 29,95].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x &lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, density=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Tu w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[:-1]+bins[1:])&lt;br /&gt;
	# wytwarzamy array z centrami binów korzystając z granic słupków&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej mi i wariancji sigma**2 dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_przedzialem(x,hi,lo):&lt;br /&gt;
	szer_binu = (hi-lo)/10	&lt;br /&gt;
	biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
	(n,bin_x,patch) = py.hist(x,bins = biny );&lt;br /&gt;
	py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
	py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x &lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, density=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Tu w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
 &lt;br /&gt;
	bincenters = 0.5*(bins[:-1]+bins[1:])&lt;br /&gt;
	# wytwarzamy array z centrami binów korzystając z granic słupków&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej mi i wariancji sigma**2 dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię&lt;br /&gt;
&lt;br /&gt;
X=np.array([30, 32, 31, 28, 31, 29, 29, 24, 30, 31, 28, 28, 32, 31, 24, 23, 31, 27, 27, 31])&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Średnia próbki&amp;quot;,np.mean(X))&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xsr=X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
N=len(X)&lt;br /&gt;
&lt;br /&gt;
M=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=xb.mean()&lt;br /&gt;
&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=Xsr,scale=s/N**0.5)&lt;br /&gt;
print('przedzial ufnosci z założenia o normalności: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
hist_z_przedzialem(M,hi,lo)&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
histfit(M,20)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Pomiary ===&lt;br /&gt;
Mamy 10 pomiarów pewnej wielkości:&amp;lt;br&amp;gt;&lt;br /&gt;
0.02, 0.026, 0.023, 0.017, 0.022, 0.019, 0.018, 0.018, 0.017, 0.022&amp;lt;br&amp;gt;&lt;br /&gt;
Proszę znaleźć średnią i 95% przedział ufności.&lt;br /&gt;
&lt;br /&gt;
''Odp'':Średnia 0,020 i jej 95% przedział ufności [0,0185 0,0220].&lt;br /&gt;
&lt;br /&gt;
Czy pomiarów jest wystarczająco dużo aby sensownie wyznaczyć średnią i przedział ufności?&lt;br /&gt;
&lt;br /&gt;
''Wskazówka'': Obliczyć średnie dla 1 000 000 powtórzeń i obejrzeć histogramy dla 10, 20, 30, 100, i 200 przedziałów.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def randsample(x):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = n)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
dane = np.array([0.02, 0.026, 0.023, 0.017, 0.022, 0.019, 0.018, 0.018, 0.017, 0.022]);&lt;br /&gt;
&lt;br /&gt;
N_rep = 1000000&lt;br /&gt;
srednie = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	proba = randsample(dane)&lt;br /&gt;
	srednie[i] = np.mean(proba)&lt;br /&gt;
&lt;br /&gt;
ci_d = st.scoreatpercentile(srednie, 2.5)&lt;br /&gt;
ci_g = st.scoreatpercentile(srednie, 97.5)&lt;br /&gt;
print('Średnia %(prop).4f i jej 95proc. przedział ufności [%(d).4f %(g).4f]'%{'prop':np.mean(dane),'d':ci_d, 'g': ci_g})&lt;br /&gt;
py.subplot(5,1,1)&lt;br /&gt;
py.hist(srednie,10)&lt;br /&gt;
py.subplot(5,1,2)&lt;br /&gt;
py.hist(srednie,20)&lt;br /&gt;
py.subplot(5,1,3)&lt;br /&gt;
py.hist(srednie,30)&lt;br /&gt;
py.subplot(5,1,4)&lt;br /&gt;
py.hist(srednie,100)&lt;br /&gt;
py.subplot(5,1,5)&lt;br /&gt;
py.hist(srednie,200)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci&amp;diff=8544</id>
		<title>WnioskowanieStatystyczne/ Przedziały ufności</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci&amp;diff=8544"/>
		<updated>2021-02-18T10:26:24Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadanie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Wstęp ==&lt;br /&gt;
Średnia (lub inny parametr) estymowany na podstawie próby pobranej z populacji nie jest równa rzeczywistej wartości tego parametru w populacji. &lt;br /&gt;
* Wylosuj 10 razy 100 liczb z rozkładu normalnego &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt; i oblicz średnią. Czy udało ci się zaobserwować wartość 0?&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
for i in range(10):&lt;br /&gt;
	x=st.norm.rvs(size=100)&lt;br /&gt;
	print(np.mean(x))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Rozbieżność między uzyskanym wynikiem a rzeczywistą średnią populacji zależy od wielkości badanej grupy oraz zmienności badanej cechy w jej obrębie. Jeśli badana grupa jest niewielka i ma dużą zmienność analizowanej cechy wówczas rozbieżność między średnią uzyskaną, a rzeczywistą może być znaczna. Natomiast, jeśli badana grupa jest duża z niewielką zmiennością danych, wówczas uzyskana średnia będzie prawdopodobnie bardzo bliska średniej populacyjnej. Przedział ufności ({{ang|confidence interval &amp;amp;mdash;  CI}}) odzwierciedla zarówno wielkość badanej grupy jak i zmienność analizowanej cechy wewnątrz tej grupy. &lt;br /&gt;
Przedział ufności jest określany z różnym procentem &amp;amp;bdquo;zaufania&amp;amp;rdquo;, np. 90 czy też 95%. Najczęściej używa się 95% przedziału ufności. Oznacza to, że jeśli grupa badana była zgromadzona w sposób losowy to rzeczywisty parametr populacji z 95% pewnością znajduje się w tym przedziale. Innymi słowy, możemy sobie wyobrazić, że mamy dostępne wyniki dowolnie wielu badań analogicznych do analizowanego. Oczekujemy, że w 95% przypadków badana cecha znajduje się wewnątrz wyznaczonego przez nas przedziału ufności. &lt;br /&gt;
&lt;br /&gt;
Pewnych problemów koncepcyjnych nastręcza konstrukcja przedziałów ufności.  Dla danej znanej populacji możemy obliczyć średnią populacji oraz prawdopodobieństwo uzyskania konkretnej wartości średniej przy losowaniu próby o zadanej liczebności z tejże populacji, możemy więc określić prawdopodobieństwo &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, że odległość średniej z próby i średniej z populacji jest &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Mając do dyspozycji tylko próbę możemy albo założyć, że pochodzi ona z jakiegoś znanego rozkładu i wyliczyć z niego wartości krytyczne albo zakładając, że jest ona reprezentatywna możemy metodą bootstrapu &amp;amp;bdquo;wytworzyć&amp;amp;rdquo; wiele innych prób z badanej populacji i oszacować jakie są granice, w które wpada żądana frakcja średnich (np.:90%, 95%).  &lt;br /&gt;
&lt;br /&gt;
''Bootstrap'' jest związany z pobieraniem próby. Najkorzystniejszą sytuacją jest ta, w której dla oszacowania różnych parametrów statystycznych populacji mamy możliwość pobierania z tej populacji wielu prób. Jeśli jest to niemożliwe możemy posłużyć się pobieraniem wielokrotnie prób z tej próby, którą posiadamy. Postępowanie takie jest sensowne pod warunkiem, że próba, która służy nam do generowania innych możliwych pobrań próby jest ''reprezentatywna''. '''W bootstrapie losujemy ze zwracaniem''' (dlaczego?). &amp;lt;!-- Zakładamy, że pobranie elementu o danej wartości nie zmienia prawdopodobieństwa wylosowania ponownie elementu o tej wartości --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przedział ufności dla średniej ==&lt;br /&gt;
===  Przypadek 1: znana wariancja rozkładu ===&lt;br /&gt;
Rozważamy zmienną losową podlegającą rozkładowi &amp;lt;math&amp;gt;N(\mu,\sigma^2)&amp;lt;/math&amp;gt; czyli rozkładowi normalnemu o średniej &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt; i znanym odchyleniu standardowym  &amp;lt;math&amp;gt; \sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
Pobieramy próby tych zmiennych losowych o rozmiarze &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Przypomnijmy, że średnia z takiej próby też może być traktowana jako zmienna losowa.  [http://brain.fuw.edu.pl/edu/STAT:Statystyki_i_estymatory#Estymator_warto.C5.9Bci_oczekiwanej Podlega ona rozkładowi] normalnemu o średniej  &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt; i standardowym odchyleniu &amp;lt;math&amp;gt;\frac{\sigma}{\sqrt{n}}&amp;lt;/math&amp;gt; czyli &amp;lt;math&amp;gt;N\left( \mu,\frac{\sigma^2}{n} \right)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Oznacza to, że zmienna &amp;lt;math&amp;gt;\frac{\bar x - \mu}{\sigma/\sqrt{n}}  &amp;lt;/math&amp;gt; podlega rozkładowi &amp;lt;math&amp;gt; N(0,1)&amp;lt;/math&amp;gt; czyli &amp;lt;math&amp;gt; Z&amp;lt;/math&amp;gt;.  Konstrukcja przedziału ufności dla średniej polega zatem na znalezieniu takich wartości &amp;lt;math&amp;gt;z_{\alpha/2}&amp;lt;/math&amp;gt;, że:&lt;br /&gt;
: &amp;lt;math&amp;gt; P \left(  \left|\frac{\bar x - \mu}{\sigma/\sqrt{n}} \right| \le z_{\alpha/2}\right) = 1-\alpha &amp;lt;/math&amp;gt; &lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt; (1-\alpha)*100&amp;lt;/math&amp;gt;% :&lt;br /&gt;
: &amp;lt;math&amp;gt; \left[ \bar x - z_{\alpha/2}\frac{\sigma}{\sqrt n} ,\;\;\; \bar x+ z_{\alpha/2}\frac{\sigma}{\sqrt n} \right] &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Przykład ====&lt;br /&gt;
Wyciągamy losową próbę &amp;lt;math&amp;gt; (n = 25)&amp;lt;/math&amp;gt;  z populacji o rozkładzie normalnym. Dostajemy średnią z próby &amp;lt;math&amp;gt; \bar x = 122&amp;lt;/math&amp;gt;. Załóżmy, że znamy standardowe odchylenie populacji &amp;lt;math&amp;gt; \sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Oblicz przedział ufności 95% dla średniej populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Co zrobić aby zmniejszyć obliczony przedział 10-krotnie?&lt;br /&gt;
&lt;br /&gt;
Korzystając z tablic znajdujemy &amp;lt;math&amp;gt; z_{\alpha/2} = z_{2,5\%} = -1,96&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
: Wartość tą możemy uzyskać wołając w pythonie: &lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.norm.ppf(0.025)&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &lt;br /&gt;
\bar x \pm 1,96 \frac{\sigma}{\sqrt{n}} = 122 \pm 1,96\cdot\frac{20}{\sqrt{25}} = 122 \pm 7,84 = [\mathrm{114,16} \;\;\; 129,84]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy być pewni na 95%, że nieznana średnia populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;  znajduje się pomiędzy 114,16 a 129,84. Jeśli chcemy zmniejszyć przedział ufności 10-krotnie, musimy pobrać 100 razy większą próbę tj. ''n'' = 2500.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: Pracując z modułem scipy.stats mamy do dyspozycji rozkłady normalne &amp;lt;math&amp;gt;N(\mu,\sigma)&amp;lt;/math&amp;gt;  o dowolnych parametrach &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;. &lt;br /&gt;
: Możemy więc uzyskać interesujący nas przedział ufności przy pomocy pojedynczego wywołania:&lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.norm.ppf([0.025, 0.975],loc = 122, scale = 20.0/25**0.5)&amp;lt;/source&amp;gt;  gdzie  &amp;lt;tt&amp;gt;loc = &amp;lt;/tt&amp;gt; &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; oraz &amp;lt;tt&amp;gt;scale = &amp;lt;/tt&amp;gt;&amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Importer win musi zbadać średnią zawartość alkoholu w nowej partii win francuskich. Z doświadczenia z poprzednimi gatunkami wina, przyjmuje on, że standardowe odchylenie w populacji wynosi 1,2%. Importer wybrał losową próbę 60 butelek nowego wina i otrzymał średnią z próby 9,3%. Znaleźć przedział ufności 90% dla średniej zawartości alkoholu w nowej partii win.&lt;br /&gt;
&lt;br /&gt;
''Odp.'': [9,0452 9,5548].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
sigma=1.2&lt;br /&gt;
N=60&lt;br /&gt;
x_sr=9.3&lt;br /&gt;
sigma_sr=sigma/N**0.5&lt;br /&gt;
alfa=0.1&lt;br /&gt;
&lt;br /&gt;
#korzystając ze wzoru&lt;br /&gt;
print(st.norm.ppf([alfa/2,1-alfa/2]) * sigma_sr + x_sr)&lt;br /&gt;
#lub korzystając z rozkładu o zadanych parametrach&lt;br /&gt;
print(st.norm.ppf([alfa/2,1-alfa/2], loc=x_sr, scale=sigma_sr) )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przypadek 2: nieznana wariancja rozkładu ===&lt;br /&gt;
Sytuacja zmienia się jeśli zakładamy, że  próba pochodzi z rozkładu normalnego o śreniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; i nieznanej wariancji.&lt;br /&gt;
Musimy wówczas zamiast wariancji posłużyć się jej estymatorem &amp;lt;math&amp;gt;s^2 = \frac{1}{n-1} \sum_{i=1}^n {\left(x_i-\mu\right)^2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Zmienna losowa &amp;lt;math&amp;gt;\frac{\bar x  - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt; podlega rozkładowi &amp;lt;math&amp;gt;t_{n-1}&amp;lt;/math&amp;gt; (czytaj: rozkładowi ''t'' o ''n''&amp;amp;minus;1 stopniach swobody). Konstrukcja przedziału ufności dla średniej polega zatem na znalezieniu takich wartości &amp;lt;math&amp;gt;t_{\alpha/2}&amp;lt;/math&amp;gt; w rozkładzie ''t'' o ''n''&amp;amp;minus;1 stopniach swobody, że:&lt;br /&gt;
: &amp;lt;math&amp;gt; P \left(  \left|\frac{\bar x - \mu}{s/\sqrt{n}} \right| \le t_{\alpha/2}\right) = 1-\alpha &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt; (1-\alpha)\cdot 100&amp;lt;/math&amp;gt;% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;, gdy nie znamy odchylenia standardowego &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;, a jedynie jego estymatę:&lt;br /&gt;
:: &amp;lt;math&amp;gt; &lt;br /&gt;
\left[ &lt;br /&gt;
\bar x- t_{\frac{\alpha}{2}} \frac{s}{\sqrt{n}}, \,\,\,\,\, \bar x+ t_{\frac{\alpha}{2}} \frac{s}{\sqrt{n}}\right] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:gdzie &amp;lt;math&amp;gt; t_{\alpha/2}&amp;lt;/math&amp;gt;  jest wartością, która odcina obszar &amp;amp;alpha;/2 z rozkładu &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt; z ''n''&amp;amp;minus;1 stopniami swobody.&lt;br /&gt;
&lt;br /&gt;
;Uwaga: w Pythonie możemy skorzystać z funkcji modułu &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; do obliczania wartości estymatorów:&lt;br /&gt;
:* ''s''  &amp;lt;tt&amp;gt;numpy.std&amp;lt;/tt&amp;gt; &lt;br /&gt;
:*  &amp;lt;math&amp;gt;\bar x&amp;lt;/math&amp;gt; &amp;lt;tt&amp;gt;numpy.mean&amp;lt;/tt&amp;gt;&lt;br /&gt;
==== Przykład ====&lt;br /&gt;
Lekarz chce zbadać średni czas trwania kuracji tj. od podania leku do ustąpienia objawów w pewnej chorobie. Losowa próba 15 pacjentów dała średni czas &amp;lt;math&amp;gt;\bar x = 10,37&amp;lt;/math&amp;gt;  dnia i odchylenie standardowe &amp;lt;math&amp;gt;s = 3,5&amp;lt;/math&amp;gt;  dnia. Zakładając normalny rozkład w populacji czasów trwania kuracji znaleźć 95% przedział ufności dla średniego czasu trwania kuracji.&lt;br /&gt;
&lt;br /&gt;
Znajdujemy wartość z rozkładu &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;  o ''n''&amp;amp;minus;1 (=14) stopniach swobody, która odcina obszar &amp;lt;math&amp;gt; \alpha/2 = 0,025&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt; t_{0,025} = 2,145&amp;lt;/math&amp;gt;.&lt;br /&gt;
: w pythonie: &amp;lt;source lang =python&amp;gt;st.t.ppf(0.025,14)&amp;lt;/source&amp;gt;&lt;br /&gt;
Dostajemy więc &amp;lt;math&amp;gt; \bar x \pm t_{\alpha/2}\frac{s}{\sqrt{n}} = 10,37 \pm 2,145\cdot\frac{3,5}{\sqrt{15}} = [8,\!43\ 12,\!31]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
: Podobnie jak w poprzednim przykładzie możemy też skorzystać z tego, że w scipy.stats definiowane są rozkłady &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o dowolnych parametrach i wykonać całe obliczenia jednym wywołaniem funkcji:&lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.t.ppf([0.025, 0.975], 14, loc = 10.37, scale = 3.5/15**0.5)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lekarz może być pewny, że w 95% przypadków od podania leku do ustąpienia objawów upłynie czas pomiędzy 8,43 a 12,31 dnia.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Producent opon rowerowych chce oszacować średni dystans jaki można przejechać na oponie pewnego rodzaju zanim opona się zużyje. Pobrano losową próbę 32 opon, opona jest używana aż do przetarcia i odległość przejechana na każdej oponie jest rejestrowana. Dane (w tysiącach kilometrów) są następujące:&lt;br /&gt;
&lt;br /&gt;
32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, 25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41&lt;br /&gt;
&lt;br /&gt;
Znaleźć 99% przedział ufności dla średniego przebiegu opon tego rodzaju. Zadanie rozwiązać analogicznie jak powyższy przykład.&lt;br /&gt;
&lt;br /&gt;
''Odp'': [ 27,76  33,36].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
X=np.array([32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, 25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41])&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
x_sr = X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
s_sr=s/N**0.5&lt;br /&gt;
&lt;br /&gt;
print(st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=x_sr,scale=s_sr))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zadanie to można rozwiązać także w oparciu o bootstrap, wykorzystując funkcję zwracającą wartość zadanego [http://brain.fuw.edu.pl/edu/WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Kwantyle kwantyla] dla danego rozkładu. Rozkład jest tu zadany empirycznie w postaci zbioru.&lt;br /&gt;
: &amp;lt;source lang = python&amp;gt; st.scoreatpercentile(zbiór, kwantyl) &amp;lt;/source&amp;gt;&lt;br /&gt;
Proszę zwrócić uwagę na rozbieżności w wynikach. Z czego one wynikają?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
# rozwiązanie przez bootstrap&lt;br /&gt;
 &lt;br /&gt;
def randsample(x):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = n)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
 &lt;br /&gt;
N_rep = 100000&lt;br /&gt;
x = np.array([32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, &lt;br /&gt;
25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41])&lt;br /&gt;
 &lt;br /&gt;
r = np.zeros((N_rep,1))&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	x_boot = randsample(x)&lt;br /&gt;
	r[i] = np.mean(x_boot)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, 0.5) #uwaga: ta funkcja jako arg. bierze procenty a nie ułamki dziesiętne!&lt;br /&gt;
ci_g = st.scoreatpercentile(r, 99.5)&lt;br /&gt;
print('Z bootstrapu: ', ci_d, '-', ci_g)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przedział ufności dla wariancji ==&lt;br /&gt;
Zauważmy, że:&lt;br /&gt;
:&amp;lt;math&amp;gt; \frac{\sum_{i=1}^N\left(x_i-\bar{x}\right)^2}{\sigma^2}&amp;lt;/math&amp;gt; &lt;br /&gt;
podlega rozkładowi &amp;lt;math&amp;gt; \chi^2_{N-1}&amp;lt;/math&amp;gt;  o ''N''&amp;amp;minus;1 stopniach swobody, zaś nieobciążony estymator wariancji to&lt;br /&gt;
:&amp;lt;math&amp;gt;  s^2=\frac{1}{N-1}\sum_{i=1}^N \left(x_i-\bar{x}\right)^2 &amp;lt;/math&amp;gt; &lt;br /&gt;
Zatem zmienna losowa &lt;br /&gt;
:&amp;lt;math&amp;gt;  \frac{s^2(N-1)}{\sigma^2}&amp;lt;/math&amp;gt; &lt;br /&gt;
także podlega rozkładowi &amp;lt;math&amp;gt; \chi^2_{N-1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Aby znaleźć &amp;lt;math&amp;gt;(1-\alpha) &amp;lt;/math&amp;gt;100% przedział ufności dla wariancji, musimy wyznaczyć &lt;br /&gt;
takie wartości krytyczne &amp;lt;math&amp;gt; \chi^2_{N-1,\alpha/2}&amp;lt;/math&amp;gt; &lt;br /&gt;
oraz  &amp;lt;math&amp;gt; \chi^2_{N-1,1-\alpha/2}&amp;lt;/math&amp;gt; aby:&lt;br /&gt;
:&amp;lt;math&amp;gt;P\left( \chi^2_{N-1,\alpha/2} &amp;lt; \frac{s^2(N-1)}{\sigma^2}&amp;lt; \chi^2_{N-1,1-\alpha/2} \right) = 1-\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2_{N-1,\alpha/2}&amp;lt;/math&amp;gt; jest wartością, która odcina na lewo obszar &amp;amp;alpha;/2 z rozkładu chi-kwadrat z ''n''&amp;amp;minus;1 stopniami swobody. &amp;lt;math&amp;gt;\chi^2_{N-1,1-\alpha/2}&amp;lt;/math&amp;gt;  jest wartością, która odcina na prawo obszar &amp;amp;alpha;/2 z rozkładu chi-kwadrat z ''n''&amp;amp;minus;1 stopniami swobody (lub równoważnie: odcina na lewo obszar 1&amp;amp;minus;&amp;amp;alpha;/2).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Powyższe wyrażenie jest równoważne:&lt;br /&gt;
:&amp;lt;math&amp;gt;P\left( \frac{(N-1)s^2}{\chi^2_{N-1,1-\alpha/2}} &amp;lt; \sigma^2&amp;lt; \frac{(N-1)s^2}{\chi^2_{n-1,\alpha/2}} \right) = 1-\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt;(1-\alpha)*100&amp;lt;/math&amp;gt; % dla wariancji populacji &amp;lt;math&amp;gt; \sigma^2&amp;lt;/math&amp;gt;, gdy rozkład populacji jest normalny:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\left[\frac{(n-1)s^2}{\chi^2_{N-1,1-\alpha/2}}, \;\; \frac{(n-1)s^2}{\chi^2_{N-1,\alpha/2}} \right]&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
Automat do kawy nalewa kawę do kubków. Jeśli średnia porcja kawy w kubku odbiega od normy, maszynę można wyregulować. Jeśli jednak wariancja porcji kawy jest zbyt duża, maszyna wymaga reperacji. Od czasu do czasu przeprowadzana jest kontrola wariancji porcji kawy. Odbywa się to poprzez wybór losowej próby napełnionych kubków i policzenie wariancji próby. Losowa próba 30 kubków dała wariancję próby &amp;lt;math&amp;gt; s^2 = 18,54&amp;lt;/math&amp;gt;. Obliczyć 95% przedział ufności dla wariancji populacji &amp;lt;math&amp;gt; \sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
''Wskazówka: rozkład'' &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; ''dostępny jest w module scipy.stats jako '' &amp;lt;tt&amp;gt;chi2&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''Odp'': [11,759 33,505].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
n = 30&lt;br /&gt;
s2 = 18.54&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
&lt;br /&gt;
chi_kryt_d = st.chi2.ppf(1-alfa/2, df=n-1)&lt;br /&gt;
chi_kryt_g = st.chi2.ppf(alfa/2, df=n-1)&lt;br /&gt;
&lt;br /&gt;
ci_d = (n-1)*s2/chi_kryt_d&lt;br /&gt;
ci_g = (n-1)*s2/chi_kryt_g&lt;br /&gt;
print('przedział ufności: %(d).3f %(g).3f'%{'d':ci_d, 'g':ci_g})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rozmiar próby ==&lt;br /&gt;
&lt;br /&gt;
Gdy pobieramy próbę, często chcielibyśmy znać minimalny rozmiar próby, który zapewni nam żądaną precyzję wyniku.&lt;br /&gt;
&lt;br /&gt;
Musimy odpowiedzieć sobie na trzy pytania:&lt;br /&gt;
* Jak nasze oszacowanie nieznanego parametru ma być bliskie prawdziwej wartości? Odpowiedź oznaczmy &amp;lt;math&amp;gt; D&amp;lt;/math&amp;gt;  (dystans).&lt;br /&gt;
* Jaki chcemy mieć poziom ufności, że nasze oszacowanie i prawdziwa wartość parametru są od siebie oddalone o nie więcej niż ''D''?&lt;br /&gt;
* Jakie jest oszacowanie wariancji w populacji?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jeśli nie znamy odpowiedzi na pkt. 3 przeprowadzamy tzw. ''pilot study'' i szacujemy &amp;lt;math&amp;gt; \sigma&amp;lt;/math&amp;gt; na podstawie odchylenia std. próby. &lt;br /&gt;
&lt;br /&gt;
Średnia &amp;lt;math&amp;gt;\bar x&amp;lt;/math&amp;gt; podlega rozkładowi normalnemu &amp;lt;math&amp;gt;N(\mu,\sigma^2/\sqrt{n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
Wymagana odległość pomiędzy &amp;lt;math&amp;gt;\bar x -\mu =D&amp;lt;/math&amp;gt;. Korzystając z transformacji do rozkładu standardowego ''Z'' możemy zapisać &amp;lt;math&amp;gt;\bar x = \mu +z \sigma/\sqrt{n}&amp;lt;/math&amp;gt;. Podstawiając do poprzedniego wyrażenia otrzymujemy &lt;br /&gt;
minimalny rozmiar próby potrzebny do oszacowania średniej populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;, który wynosi:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n=\frac{z_{\alpha/2}^2\sigma^2}{D^2}&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
W przypadku nieznajomości &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; korzystamy z jej [http://brain.fuw.edu.pl/edu/index.php/WnioskowanieStatystyczne/Statystyki_i_estymatory nieobciążonego estymatora] &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
Biuro podróży chce oszacować średnią ilość pieniędzy wydaną na wakacje przez osoby korzystające z jego usług. Ludzie przeprowadzający analizę chcieliby móc oszacować średni koszt wakacji z dokładnością do 200 zł na poziomie ufności 95%. Z poprzednich doświadczeń tego biura podróży wynika, że odchylenie standardowe w populacji wynosi &amp;lt;math&amp;gt; \sigma = 400&amp;lt;/math&amp;gt; zł. Jaka będzie minimalna wielkość próby?&lt;br /&gt;
&lt;br /&gt;
''Odp'': &amp;lt;math&amp;gt; n = 15,366&amp;lt;/math&amp;gt; więc wielkość próby wynosi 16 (zaokrąglamy w górę).&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
 &lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
 &lt;br /&gt;
alfa = 0.05&lt;br /&gt;
x=np.ones(100)&lt;br /&gt;
x[56:]=0&lt;br /&gt;
Nboot=100000&lt;br /&gt;
A=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
    ankieta=randsample(x,1500)&lt;br /&gt;
    A[i]=np.sum(ankieta)/1500.0&lt;br /&gt;
lo = st.scoreatpercentile(A, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(A, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch) = py.hist(A,bins = biny )&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przykład z bootstrapem ==&lt;br /&gt;
Rozważmy sondę przedwyborczą, mamy dwóch kandydatów na prezydenta. Ankietowano 1500 osób. 840 osób deklarowało poparcie dla kandydata A zaś 660 dla kandydata B. Na ile pewny może być kandydat A swojego zwycięstwa?&lt;br /&gt;
* Jak dokładnie brzmi pytanie? W terminologii przedziałów ufności możemy je sformułować następująco: Jaki jest 95% przedział ufności dla poparcia kandydata A w całej populacji? Czy też innymi słowami: W jakim przedziale na 95% znajduje się proporcja glosujących popierających kandydata A.&lt;br /&gt;
* Nasze najlepsze mniemanie o własnościach &amp;amp;bdquo;świata&amp;amp;rdquo; z którego pochodzą dane otrzymujemy ze zwykłej proporcji. Wynika z niej, że kandydat A ma poparcie 56% zaś kandydat B poparcie 44%  wyborców.&lt;br /&gt;
* Przypiszmy do kandydata A &amp;amp;bdquo;1&amp;amp;rdquo; zaś do B &amp;amp;bdquo;0&amp;amp;rdquo; (w ten sposób tworzymy zmienną losową: oddany głos).&lt;br /&gt;
* Pobranie ankiety modelujemy przez pobranie losowo 1500 próbek z modelu naszego &amp;amp;bdquo;świata&amp;amp;rdquo; czyli wektora złożonego z 56 jedynek i 44 zer. Wynikiem jednej ankiety jest proporcja popierających kandydata A (lub B)&lt;br /&gt;
* Zbieramy rozkład proporcji - musimy w tym celu &amp;amp;bdquo;przeprowadzić&amp;amp;rdquo; wielokrotnie ankietę. Narysujmy histogram. &lt;br /&gt;
* Chcemy znaleźć 95% przedział ufności musimy znaleźć kwantyl 2,5 oraz 97,5.&lt;br /&gt;
Liczby te stanowią poszukiwany przedział ufności. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
x=np.ones(100)&lt;br /&gt;
x[56:]=0&lt;br /&gt;
Nboot=10000&lt;br /&gt;
A=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
    ankieta=randsample(x,1500)&lt;br /&gt;
    A[i]=np.sum(ankieta)/1500.0&lt;br /&gt;
lo = st.scoreatpercentile(A, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(A, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+11*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch) = py.hist(A,bins = biny )&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zadania ==&lt;br /&gt;
=== Przyrost masy w nowej diecie ===&lt;br /&gt;
Producent karmy dla zwierząt chciał przetestować nowy rodzaj karmy. Próbki podawał 12 zwierzakom przez 4 tygodnie. Po tym czasie zanotował następujące przyrosty masy:&lt;br /&gt;
&lt;br /&gt;
15.43, 16.92, 14.43, 12.94, 15.92, 17.42, 18.91, 16.92, 14.93, 14.49, 15.92, 15.43 kg&lt;br /&gt;
&lt;br /&gt;
średni przyrost wynosi 15.80 kg. Producent widzi jednak, że w próbie jest dość znaczny rozrzut pomiędzy poszczególnymi zwierzętami 12,94-18,91 i nie jest pewien czy można reklamować nowy produkt podając średni przyrost 15,8 kg. Podejrzewa, że inna grupa zwierząt może mieć zupełnie inną średnią. &lt;br /&gt;
* Używając powyższych danych znajdź 95% przedział ufności na średni przyrost masy.&lt;br /&gt;
* Wynik zilustruj przy pomocy histogramu.&lt;br /&gt;
* Jaki byłby wynik przy założeniu, że masy zwierząt pochodzą z rozkładu normalnego?&lt;br /&gt;
&lt;br /&gt;
''Odp:''&lt;br /&gt;
: zakładając, że ''x'' pochodzi z rozkładu normalnego:&lt;br /&gt;
: [14,80  16,81];&lt;br /&gt;
: bootstrap: 14,94-16,67.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.array([15.43, 16.92, 14.43, 12.94, 15.92, 17.42, 18.91, 16.92, 14.93, 14.49, 15.92, 15.43])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xsr=X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;średnia&amp;quot;,Xsr)&lt;br /&gt;
&lt;br /&gt;
M=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=xb.mean()&lt;br /&gt;
&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=Xsr,scale=s/N**0.5)&lt;br /&gt;
print('przedzial ufnosci z założenia o normalności: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch)=py.hist(M,bins=biny)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zawartość aluminium w Tebańskich naczyniach. ===&lt;br /&gt;
Zawartość procentowa aluminium w 18 antycznych naczyniach z Teb była następująca:&amp;lt;br/&amp;gt;&lt;br /&gt;
11.4, 13.4, 13.5, 13.8, 13.9, 14.4, 14.5, 15, 15.1, 15.8, 16, 16.3, 16.5, 16.9, 17, 17.2, 17.5, 19.0&amp;lt;br/&amp;gt;&lt;br /&gt;
Jaka jest mediana procentowej zawartości aluminium i jaki jest 95% przedział ufności?&lt;br /&gt;
&lt;br /&gt;
''Odp'':&lt;br /&gt;
:mediana 15,45 i przedział ufności: 14,20 16,70.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.array([11.4, 13.4, 13.5, 13.8, 13.9, 14.4, 14.5, 15, 15.1, 15.8, 16, 16.3, 16.5, 16.9, 17, 17.2, 17.5, 19.0])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xmed=np.median(X)&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;mediana probki&amp;quot;,Xmed)&lt;br /&gt;
&lt;br /&gt;
M=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=np.median(xb)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla mediany (z bootstrapu): %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(M,bins=10)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Średnica drzew ===&lt;br /&gt;
Ogrodnik eksperymentuje z nowym gatunkiem drzew. Posadził 20 sztuk i po dwóch latach zmierzył następujące średnice pni (w cm):&lt;br /&gt;
8.5, 7.6, 9.3, 5.5, 11.4, 6.9, 6.5, 12.9, 8.7, 4.8, 4.2, 8.1, 6.5, 5.8, 6.7, 2.4, 11.1, 7.1, 8.8, 7.2&lt;br /&gt;
* Proszę znaleźć średnią średnicę i 90% przedział ufności dla średniej.&lt;br /&gt;
* Proszę znaleźć medianę i 90% przedział ufności dla mediany.&lt;br /&gt;
* Obydwa wyniki zilustrować przy pomocy histogramów.&lt;br /&gt;
''Odp:''&lt;br /&gt;
: średnia: 7,50 i przedzial ufnosci dla średniej: [6,61  8,41];&lt;br /&gt;
: mediana 7,15 i przedzial ufnosci dla mediany: [6,50  8,50].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source  lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_przedzialem(x,hi,lo):&lt;br /&gt;
	szer_binu = (hi-lo)/10	&lt;br /&gt;
	biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
	(n,bin_x,patch) = py.hist(x,bins = biny );&lt;br /&gt;
	py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
	py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
X=np.array([8.5, 7.6, 9.3, 5.5, 11.4, 6.9, 6.5, 12.9, 8.7, 4.8, 4.2, 8.1, 6.5, 5.8, 6.7, 2.4, 11.1, 7.1, 8.8, 7.2])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.1&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;Średnia próbki&amp;quot;,np.mean(X))&lt;br /&gt;
print(&amp;quot;Mediana próbki&amp;quot;,np.median(X))&lt;br /&gt;
print(&amp;quot;Liczebność próbki&amp;quot;,N)&lt;br /&gt;
&lt;br /&gt;
Sr=np.empty(Nboot)&lt;br /&gt;
Med=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Med[i]=np.median(xb)&lt;br /&gt;
	Sr[i]=np.mean(xb)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Sr, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Sr, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla średniej: %(lo).3f - %(hi).3f'%{'lo':lo,'hi':hi})&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
hist_z_przedzialem(Sr,hi,lo)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Med, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Med, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla mediany: %(lo).3f - %(hi).3f'%{'lo':lo,'hi':hi})&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
hist_z_przedzialem(Med,hi,lo)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Przedział ufności dla proporcji ===&lt;br /&gt;
W badaniach nad cholesterolem u ludzi stwierdzono, że w grupie 135 badanych z wysokim poziomem cholesterolu 10 osób przeszło zawał serca. &lt;br /&gt;
&lt;br /&gt;
''Pytanie'': Jaki jest 95% przedział ufności dla proporcji 10/135?  &lt;br /&gt;
&lt;br /&gt;
* Proszę wykorzystać metodę bootstrapu.&lt;br /&gt;
* Proszę wykorzystać rozkład dwumianowy.&lt;br /&gt;
&lt;br /&gt;
''Odp'': proporcja 10/135 = 0,07 i jej 95% przedział ufności [0,03 0,12].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.zeros(135)&lt;br /&gt;
X[:10]=1&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
&lt;br /&gt;
Proporcja=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Proporcja[i]=np.sum(xb)/N&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Proporcja, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Proporcja, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(Proporcja,bins=np.arange(0,1,1/135)-1/270)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p=10/135&lt;br /&gt;
lo,hi = st.binom.ppf([alfa/2,1-alfa/2],N,p)/N&lt;br /&gt;
print('przedzial ufnosci z rozkładu dwumianowego: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bezrobotni ===&lt;br /&gt;
W próbce 200 osób 7 procent jest bezrobotnych. Określić 95% przedział ufności dla odsetka bezrobotnych w populacji.&lt;br /&gt;
&lt;br /&gt;
''Odp'': Średnia 7% i jej 95% przedział ufności [3,50 10,50].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.zeros(100)&lt;br /&gt;
X[:7]=1&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=200&lt;br /&gt;
&lt;br /&gt;
Proporcja=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Proporcja[i]=np.sum(xb)/N*100 #chcemy procenty i dlatego mnożymy przez 100&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Proporcja, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Proporcja, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(Proporcja,bins=30)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
p=7/100&lt;br /&gt;
lo,hi = st.binom.ppf([alfa/2,1-alfa/2],N,p)/N*100&lt;br /&gt;
print('przedzial ufnosci z rozkładu dwumianowego: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Żywotność baterii ===&lt;br /&gt;
W próbce 20 testowanych baterii stwierdzono średni czas życia 28,85 miesiąca. Określić 95% przedział ufności dla średniej. Wartości dla badanej próbki były następujące:&amp;lt;br&amp;gt;&lt;br /&gt;
30, 32, 31, 28, 31, 29, 29, 24, 30, 31, 28, 28, 32, 31, 24, 23, 31, 27, 27, 31 miesięcy&amp;lt;br&amp;gt;&lt;br /&gt;
Obejrzeć rozkład przy pomocy &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; i zbadać jaki wpływ na przedział ufności ma przyjęcie założenia o normalności rozkładu czasów życia.&lt;br /&gt;
&lt;br /&gt;
''Odp'': Średnia 28,85 i jej 95% przedział ufności [27,65 29,95].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x &lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, density=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Tu w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[:-1]+bins[1:])&lt;br /&gt;
	# wytwarzamy array z centrami binów korzystając z granic słupków&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej mi i wariancji sigma**2 dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_przedzialem(x,hi,lo):&lt;br /&gt;
	szer_binu = (hi-lo)/10	&lt;br /&gt;
	biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
	(n,bin_x,patch) = py.hist(x,bins = biny );&lt;br /&gt;
	py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
	py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x &lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, density=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Tu w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
 &lt;br /&gt;
	bincenters = 0.5*(bins[:-1]+bins[1:])&lt;br /&gt;
	# wytwarzamy array z centrami binów korzystając z granic słupków&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej mi i wariancji sigma**2 dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię&lt;br /&gt;
&lt;br /&gt;
X=np.array([30, 32, 31, 28, 31, 29, 29, 24, 30, 31, 28, 28, 32, 31, 24, 23, 31, 27, 27, 31])&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Średnia próbki&amp;quot;,np.mean(X))&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xsr=X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
N=len(X)&lt;br /&gt;
&lt;br /&gt;
M=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=xb.mean()&lt;br /&gt;
&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=Xsr,scale=s/N**0.5)&lt;br /&gt;
print('przedzial ufnosci z założenia o normalności: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
hist_z_przedzialem(M,hi,lo)&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
histfit(M,20)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pomiary ===&lt;br /&gt;
Mamy 10 pomiarów pewnej wielkości:&amp;lt;br&amp;gt;&lt;br /&gt;
0.02, 0.026, 0.023, 0.017, 0.022, 0.019, 0.018, 0.018, 0.017, 0.022&amp;lt;br&amp;gt;&lt;br /&gt;
Proszę znaleźć średnią i 95% przedział ufności.&lt;br /&gt;
&lt;br /&gt;
''Odp'':Średnia 0,020 i jej 95% przedział ufności [0,0185 0,0220].&lt;br /&gt;
&lt;br /&gt;
Czy pomiarów jest wystarczająco dużo aby sensownie wyznaczyć średnią i przedział ufności?&lt;br /&gt;
&lt;br /&gt;
''Wskazówka'': Obliczyć średnie dla 1 000 000 powtórzeń i obejrzeć histogramy dla 10, 20, 30, 100, i 200 przedziałów.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def randsample(x):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = n)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
dane = np.array([0.02, 0.026, 0.023, 0.017, 0.022, 0.019, 0.018, 0.018, 0.017, 0.022]);&lt;br /&gt;
&lt;br /&gt;
N_rep = 1000000&lt;br /&gt;
srednie = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	proba = randsample(dane)&lt;br /&gt;
	srednie[i] = np.mean(proba)&lt;br /&gt;
&lt;br /&gt;
ci_d = st.scoreatpercentile(srednie, 2.5)&lt;br /&gt;
ci_g = st.scoreatpercentile(srednie, 97.5)&lt;br /&gt;
print('Średnia %(prop).4f i jej 95proc. przedział ufności [%(d).4f %(g).4f]'%{'prop':np.mean(dane),'d':ci_d, 'g': ci_g})&lt;br /&gt;
py.subplot(5,1,1)&lt;br /&gt;
py.hist(srednie,10)&lt;br /&gt;
py.subplot(5,1,2)&lt;br /&gt;
py.hist(srednie,20)&lt;br /&gt;
py.subplot(5,1,3)&lt;br /&gt;
py.hist(srednie,30)&lt;br /&gt;
py.subplot(5,1,4)&lt;br /&gt;
py.hist(srednie,100)&lt;br /&gt;
py.subplot(5,1,5)&lt;br /&gt;
py.hist(srednie,200)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci&amp;diff=8543</id>
		<title>WnioskowanieStatystyczne/ Przedziały ufności</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci&amp;diff=8543"/>
		<updated>2021-02-18T10:26:17Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadanie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Wstęp ==&lt;br /&gt;
Średnia (lub inny parametr) estymowany na podstawie próby pobranej z populacji nie jest równa rzeczywistej wartości tego parametru w populacji. &lt;br /&gt;
* Wylosuj 10 razy 100 liczb z rozkładu normalnego &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt; i oblicz średnią. Czy udało ci się zaobserwować wartość 0?&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
for i in range(10):&lt;br /&gt;
	x=st.norm.rvs(size=100)&lt;br /&gt;
	print(np.mean(x))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Rozbieżność między uzyskanym wynikiem a rzeczywistą średnią populacji zależy od wielkości badanej grupy oraz zmienności badanej cechy w jej obrębie. Jeśli badana grupa jest niewielka i ma dużą zmienność analizowanej cechy wówczas rozbieżność między średnią uzyskaną, a rzeczywistą może być znaczna. Natomiast, jeśli badana grupa jest duża z niewielką zmiennością danych, wówczas uzyskana średnia będzie prawdopodobnie bardzo bliska średniej populacyjnej. Przedział ufności ({{ang|confidence interval &amp;amp;mdash;  CI}}) odzwierciedla zarówno wielkość badanej grupy jak i zmienność analizowanej cechy wewnątrz tej grupy. &lt;br /&gt;
Przedział ufności jest określany z różnym procentem &amp;amp;bdquo;zaufania&amp;amp;rdquo;, np. 90 czy też 95%. Najczęściej używa się 95% przedziału ufności. Oznacza to, że jeśli grupa badana była zgromadzona w sposób losowy to rzeczywisty parametr populacji z 95% pewnością znajduje się w tym przedziale. Innymi słowy, możemy sobie wyobrazić, że mamy dostępne wyniki dowolnie wielu badań analogicznych do analizowanego. Oczekujemy, że w 95% przypadków badana cecha znajduje się wewnątrz wyznaczonego przez nas przedziału ufności. &lt;br /&gt;
&lt;br /&gt;
Pewnych problemów koncepcyjnych nastręcza konstrukcja przedziałów ufności.  Dla danej znanej populacji możemy obliczyć średnią populacji oraz prawdopodobieństwo uzyskania konkretnej wartości średniej przy losowaniu próby o zadanej liczebności z tejże populacji, możemy więc określić prawdopodobieństwo &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, że odległość średniej z próby i średniej z populacji jest &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Mając do dyspozycji tylko próbę możemy albo założyć, że pochodzi ona z jakiegoś znanego rozkładu i wyliczyć z niego wartości krytyczne albo zakładając, że jest ona reprezentatywna możemy metodą bootstrapu &amp;amp;bdquo;wytworzyć&amp;amp;rdquo; wiele innych prób z badanej populacji i oszacować jakie są granice, w które wpada żądana frakcja średnich (np.:90%, 95%).  &lt;br /&gt;
&lt;br /&gt;
''Bootstrap'' jest związany z pobieraniem próby. Najkorzystniejszą sytuacją jest ta, w której dla oszacowania różnych parametrów statystycznych populacji mamy możliwość pobierania z tej populacji wielu prób. Jeśli jest to niemożliwe możemy posłużyć się pobieraniem wielokrotnie prób z tej próby, którą posiadamy. Postępowanie takie jest sensowne pod warunkiem, że próba, która służy nam do generowania innych możliwych pobrań próby jest ''reprezentatywna''. '''W bootstrapie losujemy ze zwracaniem''' (dlaczego?). &amp;lt;!-- Zakładamy, że pobranie elementu o danej wartości nie zmienia prawdopodobieństwa wylosowania ponownie elementu o tej wartości --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przedział ufności dla średniej ==&lt;br /&gt;
===  Przypadek 1: znana wariancja rozkładu ===&lt;br /&gt;
Rozważamy zmienną losową podlegającą rozkładowi &amp;lt;math&amp;gt;N(\mu,\sigma^2)&amp;lt;/math&amp;gt; czyli rozkładowi normalnemu o średniej &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt; i znanym odchyleniu standardowym  &amp;lt;math&amp;gt; \sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
Pobieramy próby tych zmiennych losowych o rozmiarze &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Przypomnijmy, że średnia z takiej próby też może być traktowana jako zmienna losowa.  [http://brain.fuw.edu.pl/edu/STAT:Statystyki_i_estymatory#Estymator_warto.C5.9Bci_oczekiwanej Podlega ona rozkładowi] normalnemu o średniej  &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt; i standardowym odchyleniu &amp;lt;math&amp;gt;\frac{\sigma}{\sqrt{n}}&amp;lt;/math&amp;gt; czyli &amp;lt;math&amp;gt;N\left( \mu,\frac{\sigma^2}{n} \right)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Oznacza to, że zmienna &amp;lt;math&amp;gt;\frac{\bar x - \mu}{\sigma/\sqrt{n}}  &amp;lt;/math&amp;gt; podlega rozkładowi &amp;lt;math&amp;gt; N(0,1)&amp;lt;/math&amp;gt; czyli &amp;lt;math&amp;gt; Z&amp;lt;/math&amp;gt;.  Konstrukcja przedziału ufności dla średniej polega zatem na znalezieniu takich wartości &amp;lt;math&amp;gt;z_{\alpha/2}&amp;lt;/math&amp;gt;, że:&lt;br /&gt;
: &amp;lt;math&amp;gt; P \left(  \left|\frac{\bar x - \mu}{\sigma/\sqrt{n}} \right| \le z_{\alpha/2}\right) = 1-\alpha &amp;lt;/math&amp;gt; &lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt; (1-\alpha)*100&amp;lt;/math&amp;gt;% :&lt;br /&gt;
: &amp;lt;math&amp;gt; \left[ \bar x - z_{\alpha/2}\frac{\sigma}{\sqrt n} ,\;\;\; \bar x+ z_{\alpha/2}\frac{\sigma}{\sqrt n} \right] &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Przykład ====&lt;br /&gt;
Wyciągamy losową próbę &amp;lt;math&amp;gt; (n = 25)&amp;lt;/math&amp;gt;  z populacji o rozkładzie normalnym. Dostajemy średnią z próby &amp;lt;math&amp;gt; \bar x = 122&amp;lt;/math&amp;gt;. Załóżmy, że znamy standardowe odchylenie populacji &amp;lt;math&amp;gt; \sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Oblicz przedział ufności 95% dla średniej populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Co zrobić aby zmniejszyć obliczony przedział 10-krotnie?&lt;br /&gt;
&lt;br /&gt;
Korzystając z tablic znajdujemy &amp;lt;math&amp;gt; z_{\alpha/2} = z_{2,5\%} = -1,96&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
: Wartość tą możemy uzyskać wołając w pythonie: &lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.norm.ppf(0.025)&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &lt;br /&gt;
\bar x \pm 1,96 \frac{\sigma}{\sqrt{n}} = 122 \pm 1,96\cdot\frac{20}{\sqrt{25}} = 122 \pm 7,84 = [\mathrm{114,16} \;\;\; 129,84]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy być pewni na 95%, że nieznana średnia populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;  znajduje się pomiędzy 114,16 a 129,84. Jeśli chcemy zmniejszyć przedział ufności 10-krotnie, musimy pobrać 100 razy większą próbę tj. ''n'' = 2500.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: Pracując z modułem scipy.stats mamy do dyspozycji rozkłady normalne &amp;lt;math&amp;gt;N(\mu,\sigma)&amp;lt;/math&amp;gt;  o dowolnych parametrach &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;. &lt;br /&gt;
: Możemy więc uzyskać interesujący nas przedział ufności przy pomocy pojedynczego wywołania:&lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.norm.ppf([0.025, 0.975],loc = 122, scale = 20.0/25**0.5)&amp;lt;/source&amp;gt;  gdzie  &amp;lt;tt&amp;gt;loc = &amp;lt;/tt&amp;gt; &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; oraz &amp;lt;tt&amp;gt;scale = &amp;lt;/tt&amp;gt;&amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Importer win musi zbadać średnią zawartość alkoholu w nowej partii win francuskich. Z doświadczenia z poprzednimi gatunkami wina, przyjmuje on, że standardowe odchylenie w populacji wynosi 1,2%. Importer wybrał losową próbę 60 butelek nowego wina i otrzymał średnią z próby 9,3%. Znaleźć przedział ufności 90% dla średniej zawartości alkoholu w nowej partii win.&lt;br /&gt;
&lt;br /&gt;
''Odp.'': [9,0452 9,5548].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
sigma=1.2&lt;br /&gt;
N=60&lt;br /&gt;
x_sr=9.3&lt;br /&gt;
sigma_sr=sigma/N**0.5&lt;br /&gt;
alfa=0.1&lt;br /&gt;
&lt;br /&gt;
#korzystając ze wzoru&lt;br /&gt;
print(st.norm.ppf([alfa/2,1-alfa/2]) * sigma_sr + x_sr)&lt;br /&gt;
#lub korzystając z rozkładu o zadanych parametrach&lt;br /&gt;
print(st.norm.ppf([alfa/2,1-alfa/2], loc=x_sr, scale=sigma_sr) )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przypadek 2: nieznana wariancja rozkładu ===&lt;br /&gt;
Sytuacja zmienia się jeśli zakładamy, że  próba pochodzi z rozkładu normalnego o śreniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; i nieznanej wariancji.&lt;br /&gt;
Musimy wówczas zamiast wariancji posłużyć się jej estymatorem &amp;lt;math&amp;gt;s^2 = \frac{1}{n-1} \sum_{i=1}^n {\left(x_i-\mu\right)^2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Zmienna losowa &amp;lt;math&amp;gt;\frac{\bar x  - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt; podlega rozkładowi &amp;lt;math&amp;gt;t_{n-1}&amp;lt;/math&amp;gt; (czytaj: rozkładowi ''t'' o ''n''&amp;amp;minus;1 stopniach swobody). Konstrukcja przedziału ufności dla średniej polega zatem na znalezieniu takich wartości &amp;lt;math&amp;gt;t_{\alpha/2}&amp;lt;/math&amp;gt; w rozkładzie ''t'' o ''n''&amp;amp;minus;1 stopniach swobody, że:&lt;br /&gt;
: &amp;lt;math&amp;gt; P \left(  \left|\frac{\bar x - \mu}{s/\sqrt{n}} \right| \le t_{\alpha/2}\right) = 1-\alpha &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt; (1-\alpha)\cdot 100&amp;lt;/math&amp;gt;% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;, gdy nie znamy odchylenia standardowego &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;, a jedynie jego estymatę:&lt;br /&gt;
:: &amp;lt;math&amp;gt; &lt;br /&gt;
\left[ &lt;br /&gt;
\bar x- t_{\frac{\alpha}{2}} \frac{s}{\sqrt{n}}, \,\,\,\,\, \bar x+ t_{\frac{\alpha}{2}} \frac{s}{\sqrt{n}}\right] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:gdzie &amp;lt;math&amp;gt; t_{\alpha/2}&amp;lt;/math&amp;gt;  jest wartością, która odcina obszar &amp;amp;alpha;/2 z rozkładu &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt; z ''n''&amp;amp;minus;1 stopniami swobody.&lt;br /&gt;
&lt;br /&gt;
;Uwaga: w Pythonie możemy skorzystać z funkcji modułu &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; do obliczania wartości estymatorów:&lt;br /&gt;
:* ''s''  &amp;lt;tt&amp;gt;numpy.std&amp;lt;/tt&amp;gt; &lt;br /&gt;
:*  &amp;lt;math&amp;gt;\bar x&amp;lt;/math&amp;gt; &amp;lt;tt&amp;gt;numpy.mean&amp;lt;/tt&amp;gt;&lt;br /&gt;
==== Przykład ====&lt;br /&gt;
Lekarz chce zbadać średni czas trwania kuracji tj. od podania leku do ustąpienia objawów w pewnej chorobie. Losowa próba 15 pacjentów dała średni czas &amp;lt;math&amp;gt;\bar x = 10,37&amp;lt;/math&amp;gt;  dnia i odchylenie standardowe &amp;lt;math&amp;gt;s = 3,5&amp;lt;/math&amp;gt;  dnia. Zakładając normalny rozkład w populacji czasów trwania kuracji znaleźć 95% przedział ufności dla średniego czasu trwania kuracji.&lt;br /&gt;
&lt;br /&gt;
Znajdujemy wartość z rozkładu &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;  o ''n''&amp;amp;minus;1 (=14) stopniach swobody, która odcina obszar &amp;lt;math&amp;gt; \alpha/2 = 0,025&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt; t_{0,025} = 2,145&amp;lt;/math&amp;gt;.&lt;br /&gt;
: w pythonie: &amp;lt;source lang =python&amp;gt;st.t.ppf(0.025,14)&amp;lt;/source&amp;gt;&lt;br /&gt;
Dostajemy więc &amp;lt;math&amp;gt; \bar x \pm t_{\alpha/2}\frac{s}{\sqrt{n}} = 10,37 \pm 2,145\cdot\frac{3,5}{\sqrt{15}} = [8,\!43\ 12,\!31]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
: Podobnie jak w poprzednim przykładzie możemy też skorzystać z tego, że w scipy.stats definiowane są rozkłady &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o dowolnych parametrach i wykonać całe obliczenia jednym wywołaniem funkcji:&lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.t.ppf([0.025, 0.975], 14, loc = 10.37, scale = 3.5/15**0.5)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lekarz może być pewny, że w 95% przypadków od podania leku do ustąpienia objawów upłynie czas pomiędzy 8,43 a 12,31 dnia.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Producent opon rowerowych chce oszacować średni dystans jaki można przejechać na oponie pewnego rodzaju zanim opona się zużyje. Pobrano losową próbę 32 opon, opona jest używana aż do przetarcia i odległość przejechana na każdej oponie jest rejestrowana. Dane (w tysiącach kilometrów) są następujące:&lt;br /&gt;
&lt;br /&gt;
32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, 25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41&lt;br /&gt;
&lt;br /&gt;
Znaleźć 99% przedział ufności dla średniego przebiegu opon tego rodzaju. Zadanie rozwiązać analogicznie jak powyższy przykład.&lt;br /&gt;
&lt;br /&gt;
''Odp'': [ 27,76  33,36].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
X=np.array([32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, 25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41])&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
x_sr = X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
s_sr=s/N**0.5&lt;br /&gt;
&lt;br /&gt;
print(st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=x_sr,scale=s_sr))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zadanie to można rozwiązać także w oparciu o bootstrap, wykorzystując funkcję zwracającą wartość zadanego [http://brain.fuw.edu.pl/edu/WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Kwantyle kwantyla] dla danego rozkładu. Rozkład jest tu zadany empirycznie w postaci zbioru.&lt;br /&gt;
: &amp;lt;source lang = python&amp;gt; st.scoreatpercentile(zbiór, kwantyl) &amp;lt;/source&amp;gt;&lt;br /&gt;
Proszę zwrócić uwagę na rozbieżności w wynikach. Z czego one wynikają?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
# rozwiązanie przez bootstrap&lt;br /&gt;
 &lt;br /&gt;
def randsample(x):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = n)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
 &lt;br /&gt;
N_rep = 100000&lt;br /&gt;
x = np.array([32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, &lt;br /&gt;
25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41])&lt;br /&gt;
 &lt;br /&gt;
r = np.zeros((N_rep,1))&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	x_boot = randsample(x)&lt;br /&gt;
	r[i] = np.mean(x_boot)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, 0.5) #uwaga: ta funkcja jako arg. bierze procenty a nie ułamki dziesiętne!&lt;br /&gt;
ci_g = st.scoreatpercentile(r, 99.5)&lt;br /&gt;
print('Z bootstrapu: ', ci_d, '-', ci_g)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przedział ufności dla wariancji ==&lt;br /&gt;
Zauważmy, że:&lt;br /&gt;
:&amp;lt;math&amp;gt; \frac{\sum_{i=1}^N\left(x_i-\bar{x}\right)^2}{\sigma^2}&amp;lt;/math&amp;gt; &lt;br /&gt;
podlega rozkładowi &amp;lt;math&amp;gt; \chi^2_{N-1}&amp;lt;/math&amp;gt;  o ''N''&amp;amp;minus;1 stopniach swobody, zaś nieobciążony estymator wariancji to&lt;br /&gt;
:&amp;lt;math&amp;gt;  s^2=\frac{1}{N-1}\sum_{i=1}^N \left(x_i-\bar{x}\right)^2 &amp;lt;/math&amp;gt; &lt;br /&gt;
Zatem zmienna losowa &lt;br /&gt;
:&amp;lt;math&amp;gt;  \frac{s^2(N-1)}{\sigma^2}&amp;lt;/math&amp;gt; &lt;br /&gt;
także podlega rozkładowi &amp;lt;math&amp;gt; \chi^2_{N-1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Aby znaleźć &amp;lt;math&amp;gt;(1-\alpha) &amp;lt;/math&amp;gt;100% przedział ufności dla wariancji, musimy wyznaczyć &lt;br /&gt;
takie wartości krytyczne &amp;lt;math&amp;gt; \chi^2_{N-1,\alpha/2}&amp;lt;/math&amp;gt; &lt;br /&gt;
oraz  &amp;lt;math&amp;gt; \chi^2_{N-1,1-\alpha/2}&amp;lt;/math&amp;gt; aby:&lt;br /&gt;
:&amp;lt;math&amp;gt;P\left( \chi^2_{N-1,\alpha/2} &amp;lt; \frac{s^2(N-1)}{\sigma^2}&amp;lt; \chi^2_{N-1,1-\alpha/2} \right) = 1-\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2_{N-1,\alpha/2}&amp;lt;/math&amp;gt; jest wartością, która odcina na lewo obszar &amp;amp;alpha;/2 z rozkładu chi-kwadrat z ''n''&amp;amp;minus;1 stopniami swobody. &amp;lt;math&amp;gt;\chi^2_{N-1,1-\alpha/2}&amp;lt;/math&amp;gt;  jest wartością, która odcina na prawo obszar &amp;amp;alpha;/2 z rozkładu chi-kwadrat z ''n''&amp;amp;minus;1 stopniami swobody (lub równoważnie: odcina na lewo obszar 1&amp;amp;minus;&amp;amp;alpha;/2).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Powyższe wyrażenie jest równoważne:&lt;br /&gt;
:&amp;lt;math&amp;gt;P\left( \frac{(N-1)s^2}{\chi^2_{N-1,1-\alpha/2}} &amp;lt; \sigma^2&amp;lt; \frac{(N-1)s^2}{\chi^2_{n-1,\alpha/2}} \right) = 1-\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt;(1-\alpha)*100&amp;lt;/math&amp;gt; % dla wariancji populacji &amp;lt;math&amp;gt; \sigma^2&amp;lt;/math&amp;gt;, gdy rozkład populacji jest normalny:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\left[\frac{(n-1)s^2}{\chi^2_{N-1,1-\alpha/2}}, \;\; \frac{(n-1)s^2}{\chi^2_{N-1,\alpha/2}} \right]&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
Automat do kawy nalewa kawę do kubków. Jeśli średnia porcja kawy w kubku odbiega od normy, maszynę można wyregulować. Jeśli jednak wariancja porcji kawy jest zbyt duża, maszyna wymaga reperacji. Od czasu do czasu przeprowadzana jest kontrola wariancji porcji kawy. Odbywa się to poprzez wybór losowej próby napełnionych kubków i policzenie wariancji próby. Losowa próba 30 kubków dała wariancję próby &amp;lt;math&amp;gt; s^2 = 18,54&amp;lt;/math&amp;gt;. Obliczyć 95% przedział ufności dla wariancji populacji &amp;lt;math&amp;gt; \sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
''Wskazówka: rozkład'' &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; ''dostępny jest w module scipy.stats jako '' &amp;lt;tt&amp;gt;chi2&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''Odp'': [11,759 33,505].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
n = 30&lt;br /&gt;
s2 = 18.54&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
&lt;br /&gt;
chi_kryt_d = st.chi2.ppf(1-alfa/2, df=n-1)&lt;br /&gt;
chi_kryt_g = st.chi2.ppf(alfa/2, df=n-1)&lt;br /&gt;
&lt;br /&gt;
ci_d = (n-1)*s2/chi_kryt_d&lt;br /&gt;
ci_g = (n-1)*s2/chi_kryt_g&lt;br /&gt;
print('przedział ufności: %(d).3f %(g).3f'%{'d':ci_d, 'g':ci_g})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rozmiar próby ==&lt;br /&gt;
&lt;br /&gt;
Gdy pobieramy próbę, często chcielibyśmy znać minimalny rozmiar próby, który zapewni nam żądaną precyzję wyniku.&lt;br /&gt;
&lt;br /&gt;
Musimy odpowiedzieć sobie na trzy pytania:&lt;br /&gt;
* Jak nasze oszacowanie nieznanego parametru ma być bliskie prawdziwej wartości? Odpowiedź oznaczmy &amp;lt;math&amp;gt; D&amp;lt;/math&amp;gt;  (dystans).&lt;br /&gt;
* Jaki chcemy mieć poziom ufności, że nasze oszacowanie i prawdziwa wartość parametru są od siebie oddalone o nie więcej niż ''D''?&lt;br /&gt;
* Jakie jest oszacowanie wariancji w populacji?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jeśli nie znamy odpowiedzi na pkt. 3 przeprowadzamy tzw. ''pilot study'' i szacujemy &amp;lt;math&amp;gt; \sigma&amp;lt;/math&amp;gt; na podstawie odchylenia std. próby. &lt;br /&gt;
&lt;br /&gt;
Średnia &amp;lt;math&amp;gt;\bar x&amp;lt;/math&amp;gt; podlega rozkładowi normalnemu &amp;lt;math&amp;gt;N(\mu,\sigma^2/\sqrt{n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
Wymagana odległość pomiędzy &amp;lt;math&amp;gt;\bar x -\mu =D&amp;lt;/math&amp;gt;. Korzystając z transformacji do rozkładu standardowego ''Z'' możemy zapisać &amp;lt;math&amp;gt;\bar x = \mu +z \sigma/\sqrt{n}&amp;lt;/math&amp;gt;. Podstawiając do poprzedniego wyrażenia otrzymujemy &lt;br /&gt;
minimalny rozmiar próby potrzebny do oszacowania średniej populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;, który wynosi:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n=\frac{z_{\alpha/2}^2\sigma^2}{D^2}&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
W przypadku nieznajomości &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; korzystamy z jej [http://brain.fuw.edu.pl/edu/index.php/WnioskowanieStatystyczne/Statystyki_i_estymatory nieobciążonego estymatora] &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
Biuro podróży chce oszacować średnią ilość pieniędzy wydaną na wakacje przez osoby korzystające z jego usług. Ludzie przeprowadzający analizę chcieliby móc oszacować średni koszt wakacji z dokładnością do 200 zł na poziomie ufności 95%. Z poprzednich doświadczeń tego biura podróży wynika, że odchylenie standardowe w populacji wynosi &amp;lt;math&amp;gt; \sigma = 400&amp;lt;/math&amp;gt; zł. Jaka będzie minimalna wielkość próby?&lt;br /&gt;
&lt;br /&gt;
''Odp'': &amp;lt;math&amp;gt; n = 15,366&amp;lt;/math&amp;gt; więc wielkość próby wynosi 16 (zaokrąglamy w górę).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
 &lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
 &lt;br /&gt;
alfa = 0.05&lt;br /&gt;
x=np.ones(100)&lt;br /&gt;
x[56:]=0&lt;br /&gt;
Nboot=100000&lt;br /&gt;
A=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
    ankieta=randsample(x,1500)&lt;br /&gt;
    A[i]=np.sum(ankieta)/1500.0&lt;br /&gt;
lo = st.scoreatpercentile(A, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(A, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch) = py.hist(A,bins = biny )&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przykład z bootstrapem ==&lt;br /&gt;
Rozważmy sondę przedwyborczą, mamy dwóch kandydatów na prezydenta. Ankietowano 1500 osób. 840 osób deklarowało poparcie dla kandydata A zaś 660 dla kandydata B. Na ile pewny może być kandydat A swojego zwycięstwa?&lt;br /&gt;
* Jak dokładnie brzmi pytanie? W terminologii przedziałów ufności możemy je sformułować następująco: Jaki jest 95% przedział ufności dla poparcia kandydata A w całej populacji? Czy też innymi słowami: W jakim przedziale na 95% znajduje się proporcja glosujących popierających kandydata A.&lt;br /&gt;
* Nasze najlepsze mniemanie o własnościach &amp;amp;bdquo;świata&amp;amp;rdquo; z którego pochodzą dane otrzymujemy ze zwykłej proporcji. Wynika z niej, że kandydat A ma poparcie 56% zaś kandydat B poparcie 44%  wyborców.&lt;br /&gt;
* Przypiszmy do kandydata A &amp;amp;bdquo;1&amp;amp;rdquo; zaś do B &amp;amp;bdquo;0&amp;amp;rdquo; (w ten sposób tworzymy zmienną losową: oddany głos).&lt;br /&gt;
* Pobranie ankiety modelujemy przez pobranie losowo 1500 próbek z modelu naszego &amp;amp;bdquo;świata&amp;amp;rdquo; czyli wektora złożonego z 56 jedynek i 44 zer. Wynikiem jednej ankiety jest proporcja popierających kandydata A (lub B)&lt;br /&gt;
* Zbieramy rozkład proporcji - musimy w tym celu &amp;amp;bdquo;przeprowadzić&amp;amp;rdquo; wielokrotnie ankietę. Narysujmy histogram. &lt;br /&gt;
* Chcemy znaleźć 95% przedział ufności musimy znaleźć kwantyl 2,5 oraz 97,5.&lt;br /&gt;
Liczby te stanowią poszukiwany przedział ufności. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
x=np.ones(100)&lt;br /&gt;
x[56:]=0&lt;br /&gt;
Nboot=10000&lt;br /&gt;
A=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
    ankieta=randsample(x,1500)&lt;br /&gt;
    A[i]=np.sum(ankieta)/1500.0&lt;br /&gt;
lo = st.scoreatpercentile(A, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(A, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+11*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch) = py.hist(A,bins = biny )&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zadania ==&lt;br /&gt;
=== Przyrost masy w nowej diecie ===&lt;br /&gt;
Producent karmy dla zwierząt chciał przetestować nowy rodzaj karmy. Próbki podawał 12 zwierzakom przez 4 tygodnie. Po tym czasie zanotował następujące przyrosty masy:&lt;br /&gt;
&lt;br /&gt;
15.43, 16.92, 14.43, 12.94, 15.92, 17.42, 18.91, 16.92, 14.93, 14.49, 15.92, 15.43 kg&lt;br /&gt;
&lt;br /&gt;
średni przyrost wynosi 15.80 kg. Producent widzi jednak, że w próbie jest dość znaczny rozrzut pomiędzy poszczególnymi zwierzętami 12,94-18,91 i nie jest pewien czy można reklamować nowy produkt podając średni przyrost 15,8 kg. Podejrzewa, że inna grupa zwierząt może mieć zupełnie inną średnią. &lt;br /&gt;
* Używając powyższych danych znajdź 95% przedział ufności na średni przyrost masy.&lt;br /&gt;
* Wynik zilustruj przy pomocy histogramu.&lt;br /&gt;
* Jaki byłby wynik przy założeniu, że masy zwierząt pochodzą z rozkładu normalnego?&lt;br /&gt;
&lt;br /&gt;
''Odp:''&lt;br /&gt;
: zakładając, że ''x'' pochodzi z rozkładu normalnego:&lt;br /&gt;
: [14,80  16,81];&lt;br /&gt;
: bootstrap: 14,94-16,67.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.array([15.43, 16.92, 14.43, 12.94, 15.92, 17.42, 18.91, 16.92, 14.93, 14.49, 15.92, 15.43])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xsr=X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;średnia&amp;quot;,Xsr)&lt;br /&gt;
&lt;br /&gt;
M=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=xb.mean()&lt;br /&gt;
&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=Xsr,scale=s/N**0.5)&lt;br /&gt;
print('przedzial ufnosci z założenia o normalności: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch)=py.hist(M,bins=biny)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zawartość aluminium w Tebańskich naczyniach. ===&lt;br /&gt;
Zawartość procentowa aluminium w 18 antycznych naczyniach z Teb była następująca:&amp;lt;br/&amp;gt;&lt;br /&gt;
11.4, 13.4, 13.5, 13.8, 13.9, 14.4, 14.5, 15, 15.1, 15.8, 16, 16.3, 16.5, 16.9, 17, 17.2, 17.5, 19.0&amp;lt;br/&amp;gt;&lt;br /&gt;
Jaka jest mediana procentowej zawartości aluminium i jaki jest 95% przedział ufności?&lt;br /&gt;
&lt;br /&gt;
''Odp'':&lt;br /&gt;
:mediana 15,45 i przedział ufności: 14,20 16,70.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.array([11.4, 13.4, 13.5, 13.8, 13.9, 14.4, 14.5, 15, 15.1, 15.8, 16, 16.3, 16.5, 16.9, 17, 17.2, 17.5, 19.0])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xmed=np.median(X)&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;mediana probki&amp;quot;,Xmed)&lt;br /&gt;
&lt;br /&gt;
M=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=np.median(xb)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla mediany (z bootstrapu): %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(M,bins=10)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Średnica drzew ===&lt;br /&gt;
Ogrodnik eksperymentuje z nowym gatunkiem drzew. Posadził 20 sztuk i po dwóch latach zmierzył następujące średnice pni (w cm):&lt;br /&gt;
8.5, 7.6, 9.3, 5.5, 11.4, 6.9, 6.5, 12.9, 8.7, 4.8, 4.2, 8.1, 6.5, 5.8, 6.7, 2.4, 11.1, 7.1, 8.8, 7.2&lt;br /&gt;
* Proszę znaleźć średnią średnicę i 90% przedział ufności dla średniej.&lt;br /&gt;
* Proszę znaleźć medianę i 90% przedział ufności dla mediany.&lt;br /&gt;
* Obydwa wyniki zilustrować przy pomocy histogramów.&lt;br /&gt;
''Odp:''&lt;br /&gt;
: średnia: 7,50 i przedzial ufnosci dla średniej: [6,61  8,41];&lt;br /&gt;
: mediana 7,15 i przedzial ufnosci dla mediany: [6,50  8,50].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source  lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_przedzialem(x,hi,lo):&lt;br /&gt;
	szer_binu = (hi-lo)/10	&lt;br /&gt;
	biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
	(n,bin_x,patch) = py.hist(x,bins = biny );&lt;br /&gt;
	py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
	py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
X=np.array([8.5, 7.6, 9.3, 5.5, 11.4, 6.9, 6.5, 12.9, 8.7, 4.8, 4.2, 8.1, 6.5, 5.8, 6.7, 2.4, 11.1, 7.1, 8.8, 7.2])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.1&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;Średnia próbki&amp;quot;,np.mean(X))&lt;br /&gt;
print(&amp;quot;Mediana próbki&amp;quot;,np.median(X))&lt;br /&gt;
print(&amp;quot;Liczebność próbki&amp;quot;,N)&lt;br /&gt;
&lt;br /&gt;
Sr=np.empty(Nboot)&lt;br /&gt;
Med=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Med[i]=np.median(xb)&lt;br /&gt;
	Sr[i]=np.mean(xb)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Sr, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Sr, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla średniej: %(lo).3f - %(hi).3f'%{'lo':lo,'hi':hi})&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
hist_z_przedzialem(Sr,hi,lo)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Med, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Med, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla mediany: %(lo).3f - %(hi).3f'%{'lo':lo,'hi':hi})&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
hist_z_przedzialem(Med,hi,lo)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Przedział ufności dla proporcji ===&lt;br /&gt;
W badaniach nad cholesterolem u ludzi stwierdzono, że w grupie 135 badanych z wysokim poziomem cholesterolu 10 osób przeszło zawał serca. &lt;br /&gt;
&lt;br /&gt;
''Pytanie'': Jaki jest 95% przedział ufności dla proporcji 10/135?  &lt;br /&gt;
&lt;br /&gt;
* Proszę wykorzystać metodę bootstrapu.&lt;br /&gt;
* Proszę wykorzystać rozkład dwumianowy.&lt;br /&gt;
&lt;br /&gt;
''Odp'': proporcja 10/135 = 0,07 i jej 95% przedział ufności [0,03 0,12].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.zeros(135)&lt;br /&gt;
X[:10]=1&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
&lt;br /&gt;
Proporcja=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Proporcja[i]=np.sum(xb)/N&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Proporcja, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Proporcja, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(Proporcja,bins=np.arange(0,1,1/135)-1/270)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p=10/135&lt;br /&gt;
lo,hi = st.binom.ppf([alfa/2,1-alfa/2],N,p)/N&lt;br /&gt;
print('przedzial ufnosci z rozkładu dwumianowego: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bezrobotni ===&lt;br /&gt;
W próbce 200 osób 7 procent jest bezrobotnych. Określić 95% przedział ufności dla odsetka bezrobotnych w populacji.&lt;br /&gt;
&lt;br /&gt;
''Odp'': Średnia 7% i jej 95% przedział ufności [3,50 10,50].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.zeros(100)&lt;br /&gt;
X[:7]=1&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=200&lt;br /&gt;
&lt;br /&gt;
Proporcja=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Proporcja[i]=np.sum(xb)/N*100 #chcemy procenty i dlatego mnożymy przez 100&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Proporcja, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Proporcja, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(Proporcja,bins=30)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
p=7/100&lt;br /&gt;
lo,hi = st.binom.ppf([alfa/2,1-alfa/2],N,p)/N*100&lt;br /&gt;
print('przedzial ufnosci z rozkładu dwumianowego: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Żywotność baterii ===&lt;br /&gt;
W próbce 20 testowanych baterii stwierdzono średni czas życia 28,85 miesiąca. Określić 95% przedział ufności dla średniej. Wartości dla badanej próbki były następujące:&amp;lt;br&amp;gt;&lt;br /&gt;
30, 32, 31, 28, 31, 29, 29, 24, 30, 31, 28, 28, 32, 31, 24, 23, 31, 27, 27, 31 miesięcy&amp;lt;br&amp;gt;&lt;br /&gt;
Obejrzeć rozkład przy pomocy &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; i zbadać jaki wpływ na przedział ufności ma przyjęcie założenia o normalności rozkładu czasów życia.&lt;br /&gt;
&lt;br /&gt;
''Odp'': Średnia 28,85 i jej 95% przedział ufności [27,65 29,95].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x &lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, density=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Tu w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[:-1]+bins[1:])&lt;br /&gt;
	# wytwarzamy array z centrami binów korzystając z granic słupków&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej mi i wariancji sigma**2 dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_przedzialem(x,hi,lo):&lt;br /&gt;
	szer_binu = (hi-lo)/10	&lt;br /&gt;
	biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
	(n,bin_x,patch) = py.hist(x,bins = biny );&lt;br /&gt;
	py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
	py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x &lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, density=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Tu w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
 &lt;br /&gt;
	bincenters = 0.5*(bins[:-1]+bins[1:])&lt;br /&gt;
	# wytwarzamy array z centrami binów korzystając z granic słupków&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej mi i wariancji sigma**2 dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię&lt;br /&gt;
&lt;br /&gt;
X=np.array([30, 32, 31, 28, 31, 29, 29, 24, 30, 31, 28, 28, 32, 31, 24, 23, 31, 27, 27, 31])&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Średnia próbki&amp;quot;,np.mean(X))&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xsr=X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
N=len(X)&lt;br /&gt;
&lt;br /&gt;
M=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=xb.mean()&lt;br /&gt;
&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=Xsr,scale=s/N**0.5)&lt;br /&gt;
print('przedzial ufnosci z założenia o normalności: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
hist_z_przedzialem(M,hi,lo)&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
histfit(M,20)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pomiary ===&lt;br /&gt;
Mamy 10 pomiarów pewnej wielkości:&amp;lt;br&amp;gt;&lt;br /&gt;
0.02, 0.026, 0.023, 0.017, 0.022, 0.019, 0.018, 0.018, 0.017, 0.022&amp;lt;br&amp;gt;&lt;br /&gt;
Proszę znaleźć średnią i 95% przedział ufności.&lt;br /&gt;
&lt;br /&gt;
''Odp'':Średnia 0,020 i jej 95% przedział ufności [0,0185 0,0220].&lt;br /&gt;
&lt;br /&gt;
Czy pomiarów jest wystarczająco dużo aby sensownie wyznaczyć średnią i przedział ufności?&lt;br /&gt;
&lt;br /&gt;
''Wskazówka'': Obliczyć średnie dla 1 000 000 powtórzeń i obejrzeć histogramy dla 10, 20, 30, 100, i 200 przedziałów.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def randsample(x):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = n)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
dane = np.array([0.02, 0.026, 0.023, 0.017, 0.022, 0.019, 0.018, 0.018, 0.017, 0.022]);&lt;br /&gt;
&lt;br /&gt;
N_rep = 1000000&lt;br /&gt;
srednie = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	proba = randsample(dane)&lt;br /&gt;
	srednie[i] = np.mean(proba)&lt;br /&gt;
&lt;br /&gt;
ci_d = st.scoreatpercentile(srednie, 2.5)&lt;br /&gt;
ci_g = st.scoreatpercentile(srednie, 97.5)&lt;br /&gt;
print('Średnia %(prop).4f i jej 95proc. przedział ufności [%(d).4f %(g).4f]'%{'prop':np.mean(dane),'d':ci_d, 'g': ci_g})&lt;br /&gt;
py.subplot(5,1,1)&lt;br /&gt;
py.hist(srednie,10)&lt;br /&gt;
py.subplot(5,1,2)&lt;br /&gt;
py.hist(srednie,20)&lt;br /&gt;
py.subplot(5,1,3)&lt;br /&gt;
py.hist(srednie,30)&lt;br /&gt;
py.subplot(5,1,4)&lt;br /&gt;
py.hist(srednie,100)&lt;br /&gt;
py.subplot(5,1,5)&lt;br /&gt;
py.hist(srednie,200)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci&amp;diff=8542</id>
		<title>WnioskowanieStatystyczne/ Przedziały ufności</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci&amp;diff=8542"/>
		<updated>2021-02-18T10:26:08Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadanie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Wstęp ==&lt;br /&gt;
Średnia (lub inny parametr) estymowany na podstawie próby pobranej z populacji nie jest równa rzeczywistej wartości tego parametru w populacji. &lt;br /&gt;
* Wylosuj 10 razy 100 liczb z rozkładu normalnego &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt; i oblicz średnią. Czy udało ci się zaobserwować wartość 0?&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
for i in range(10):&lt;br /&gt;
	x=st.norm.rvs(size=100)&lt;br /&gt;
	print(np.mean(x))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Rozbieżność między uzyskanym wynikiem a rzeczywistą średnią populacji zależy od wielkości badanej grupy oraz zmienności badanej cechy w jej obrębie. Jeśli badana grupa jest niewielka i ma dużą zmienność analizowanej cechy wówczas rozbieżność między średnią uzyskaną, a rzeczywistą może być znaczna. Natomiast, jeśli badana grupa jest duża z niewielką zmiennością danych, wówczas uzyskana średnia będzie prawdopodobnie bardzo bliska średniej populacyjnej. Przedział ufności ({{ang|confidence interval &amp;amp;mdash;  CI}}) odzwierciedla zarówno wielkość badanej grupy jak i zmienność analizowanej cechy wewnątrz tej grupy. &lt;br /&gt;
Przedział ufności jest określany z różnym procentem &amp;amp;bdquo;zaufania&amp;amp;rdquo;, np. 90 czy też 95%. Najczęściej używa się 95% przedziału ufności. Oznacza to, że jeśli grupa badana była zgromadzona w sposób losowy to rzeczywisty parametr populacji z 95% pewnością znajduje się w tym przedziale. Innymi słowy, możemy sobie wyobrazić, że mamy dostępne wyniki dowolnie wielu badań analogicznych do analizowanego. Oczekujemy, że w 95% przypadków badana cecha znajduje się wewnątrz wyznaczonego przez nas przedziału ufności. &lt;br /&gt;
&lt;br /&gt;
Pewnych problemów koncepcyjnych nastręcza konstrukcja przedziałów ufności.  Dla danej znanej populacji możemy obliczyć średnią populacji oraz prawdopodobieństwo uzyskania konkretnej wartości średniej przy losowaniu próby o zadanej liczebności z tejże populacji, możemy więc określić prawdopodobieństwo &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, że odległość średniej z próby i średniej z populacji jest &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Mając do dyspozycji tylko próbę możemy albo założyć, że pochodzi ona z jakiegoś znanego rozkładu i wyliczyć z niego wartości krytyczne albo zakładając, że jest ona reprezentatywna możemy metodą bootstrapu &amp;amp;bdquo;wytworzyć&amp;amp;rdquo; wiele innych prób z badanej populacji i oszacować jakie są granice, w które wpada żądana frakcja średnich (np.:90%, 95%).  &lt;br /&gt;
&lt;br /&gt;
''Bootstrap'' jest związany z pobieraniem próby. Najkorzystniejszą sytuacją jest ta, w której dla oszacowania różnych parametrów statystycznych populacji mamy możliwość pobierania z tej populacji wielu prób. Jeśli jest to niemożliwe możemy posłużyć się pobieraniem wielokrotnie prób z tej próby, którą posiadamy. Postępowanie takie jest sensowne pod warunkiem, że próba, która służy nam do generowania innych możliwych pobrań próby jest ''reprezentatywna''. '''W bootstrapie losujemy ze zwracaniem''' (dlaczego?). &amp;lt;!-- Zakładamy, że pobranie elementu o danej wartości nie zmienia prawdopodobieństwa wylosowania ponownie elementu o tej wartości --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przedział ufności dla średniej ==&lt;br /&gt;
===  Przypadek 1: znana wariancja rozkładu ===&lt;br /&gt;
Rozważamy zmienną losową podlegającą rozkładowi &amp;lt;math&amp;gt;N(\mu,\sigma^2)&amp;lt;/math&amp;gt; czyli rozkładowi normalnemu o średniej &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt; i znanym odchyleniu standardowym  &amp;lt;math&amp;gt; \sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
Pobieramy próby tych zmiennych losowych o rozmiarze &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Przypomnijmy, że średnia z takiej próby też może być traktowana jako zmienna losowa.  [http://brain.fuw.edu.pl/edu/STAT:Statystyki_i_estymatory#Estymator_warto.C5.9Bci_oczekiwanej Podlega ona rozkładowi] normalnemu o średniej  &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt; i standardowym odchyleniu &amp;lt;math&amp;gt;\frac{\sigma}{\sqrt{n}}&amp;lt;/math&amp;gt; czyli &amp;lt;math&amp;gt;N\left( \mu,\frac{\sigma^2}{n} \right)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Oznacza to, że zmienna &amp;lt;math&amp;gt;\frac{\bar x - \mu}{\sigma/\sqrt{n}}  &amp;lt;/math&amp;gt; podlega rozkładowi &amp;lt;math&amp;gt; N(0,1)&amp;lt;/math&amp;gt; czyli &amp;lt;math&amp;gt; Z&amp;lt;/math&amp;gt;.  Konstrukcja przedziału ufności dla średniej polega zatem na znalezieniu takich wartości &amp;lt;math&amp;gt;z_{\alpha/2}&amp;lt;/math&amp;gt;, że:&lt;br /&gt;
: &amp;lt;math&amp;gt; P \left(  \left|\frac{\bar x - \mu}{\sigma/\sqrt{n}} \right| \le z_{\alpha/2}\right) = 1-\alpha &amp;lt;/math&amp;gt; &lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt; (1-\alpha)*100&amp;lt;/math&amp;gt;% :&lt;br /&gt;
: &amp;lt;math&amp;gt; \left[ \bar x - z_{\alpha/2}\frac{\sigma}{\sqrt n} ,\;\;\; \bar x+ z_{\alpha/2}\frac{\sigma}{\sqrt n} \right] &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Przykład ====&lt;br /&gt;
Wyciągamy losową próbę &amp;lt;math&amp;gt; (n = 25)&amp;lt;/math&amp;gt;  z populacji o rozkładzie normalnym. Dostajemy średnią z próby &amp;lt;math&amp;gt; \bar x = 122&amp;lt;/math&amp;gt;. Załóżmy, że znamy standardowe odchylenie populacji &amp;lt;math&amp;gt; \sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Oblicz przedział ufności 95% dla średniej populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Co zrobić aby zmniejszyć obliczony przedział 10-krotnie?&lt;br /&gt;
&lt;br /&gt;
Korzystając z tablic znajdujemy &amp;lt;math&amp;gt; z_{\alpha/2} = z_{2,5\%} = -1,96&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
: Wartość tą możemy uzyskać wołając w pythonie: &lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.norm.ppf(0.025)&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &lt;br /&gt;
\bar x \pm 1,96 \frac{\sigma}{\sqrt{n}} = 122 \pm 1,96\cdot\frac{20}{\sqrt{25}} = 122 \pm 7,84 = [\mathrm{114,16} \;\;\; 129,84]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy być pewni na 95%, że nieznana średnia populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;  znajduje się pomiędzy 114,16 a 129,84. Jeśli chcemy zmniejszyć przedział ufności 10-krotnie, musimy pobrać 100 razy większą próbę tj. ''n'' = 2500.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: Pracując z modułem scipy.stats mamy do dyspozycji rozkłady normalne &amp;lt;math&amp;gt;N(\mu,\sigma)&amp;lt;/math&amp;gt;  o dowolnych parametrach &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;. &lt;br /&gt;
: Możemy więc uzyskać interesujący nas przedział ufności przy pomocy pojedynczego wywołania:&lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.norm.ppf([0.025, 0.975],loc = 122, scale = 20.0/25**0.5)&amp;lt;/source&amp;gt;  gdzie  &amp;lt;tt&amp;gt;loc = &amp;lt;/tt&amp;gt; &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; oraz &amp;lt;tt&amp;gt;scale = &amp;lt;/tt&amp;gt;&amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Importer win musi zbadać średnią zawartość alkoholu w nowej partii win francuskich. Z doświadczenia z poprzednimi gatunkami wina, przyjmuje on, że standardowe odchylenie w populacji wynosi 1,2%. Importer wybrał losową próbę 60 butelek nowego wina i otrzymał średnią z próby 9,3%. Znaleźć przedział ufności 90% dla średniej zawartości alkoholu w nowej partii win.&lt;br /&gt;
&lt;br /&gt;
''Odp.'': [9,0452 9,5548].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
sigma=1.2&lt;br /&gt;
N=60&lt;br /&gt;
x_sr=9.3&lt;br /&gt;
sigma_sr=sigma/N**0.5&lt;br /&gt;
alfa=0.1&lt;br /&gt;
&lt;br /&gt;
#korzystając ze wzoru&lt;br /&gt;
print(st.norm.ppf([alfa/2,1-alfa/2]) * sigma_sr + x_sr)&lt;br /&gt;
#lub korzystając z rozkładu o zadanych parametrach&lt;br /&gt;
print(st.norm.ppf([alfa/2,1-alfa/2], loc=x_sr, scale=sigma_sr) )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przypadek 2: nieznana wariancja rozkładu ===&lt;br /&gt;
Sytuacja zmienia się jeśli zakładamy, że  próba pochodzi z rozkładu normalnego o śreniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; i nieznanej wariancji.&lt;br /&gt;
Musimy wówczas zamiast wariancji posłużyć się jej estymatorem &amp;lt;math&amp;gt;s^2 = \frac{1}{n-1} \sum_{i=1}^n {\left(x_i-\mu\right)^2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Zmienna losowa &amp;lt;math&amp;gt;\frac{\bar x  - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt; podlega rozkładowi &amp;lt;math&amp;gt;t_{n-1}&amp;lt;/math&amp;gt; (czytaj: rozkładowi ''t'' o ''n''&amp;amp;minus;1 stopniach swobody). Konstrukcja przedziału ufności dla średniej polega zatem na znalezieniu takich wartości &amp;lt;math&amp;gt;t_{\alpha/2}&amp;lt;/math&amp;gt; w rozkładzie ''t'' o ''n''&amp;amp;minus;1 stopniach swobody, że:&lt;br /&gt;
: &amp;lt;math&amp;gt; P \left(  \left|\frac{\bar x - \mu}{s/\sqrt{n}} \right| \le t_{\alpha/2}\right) = 1-\alpha &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt; (1-\alpha)\cdot 100&amp;lt;/math&amp;gt;% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;, gdy nie znamy odchylenia standardowego &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;, a jedynie jego estymatę:&lt;br /&gt;
:: &amp;lt;math&amp;gt; &lt;br /&gt;
\left[ &lt;br /&gt;
\bar x- t_{\frac{\alpha}{2}} \frac{s}{\sqrt{n}}, \,\,\,\,\, \bar x+ t_{\frac{\alpha}{2}} \frac{s}{\sqrt{n}}\right] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:gdzie &amp;lt;math&amp;gt; t_{\alpha/2}&amp;lt;/math&amp;gt;  jest wartością, która odcina obszar &amp;amp;alpha;/2 z rozkładu &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt; z ''n''&amp;amp;minus;1 stopniami swobody.&lt;br /&gt;
&lt;br /&gt;
;Uwaga: w Pythonie możemy skorzystać z funkcji modułu &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; do obliczania wartości estymatorów:&lt;br /&gt;
:* ''s''  &amp;lt;tt&amp;gt;numpy.std&amp;lt;/tt&amp;gt; &lt;br /&gt;
:*  &amp;lt;math&amp;gt;\bar x&amp;lt;/math&amp;gt; &amp;lt;tt&amp;gt;numpy.mean&amp;lt;/tt&amp;gt;&lt;br /&gt;
==== Przykład ====&lt;br /&gt;
Lekarz chce zbadać średni czas trwania kuracji tj. od podania leku do ustąpienia objawów w pewnej chorobie. Losowa próba 15 pacjentów dała średni czas &amp;lt;math&amp;gt;\bar x = 10,37&amp;lt;/math&amp;gt;  dnia i odchylenie standardowe &amp;lt;math&amp;gt;s = 3,5&amp;lt;/math&amp;gt;  dnia. Zakładając normalny rozkład w populacji czasów trwania kuracji znaleźć 95% przedział ufności dla średniego czasu trwania kuracji.&lt;br /&gt;
&lt;br /&gt;
Znajdujemy wartość z rozkładu &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;  o ''n''&amp;amp;minus;1 (=14) stopniach swobody, która odcina obszar &amp;lt;math&amp;gt; \alpha/2 = 0,025&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt; t_{0,025} = 2,145&amp;lt;/math&amp;gt;.&lt;br /&gt;
: w pythonie: &amp;lt;source lang =python&amp;gt;st.t.ppf(0.025,14)&amp;lt;/source&amp;gt;&lt;br /&gt;
Dostajemy więc &amp;lt;math&amp;gt; \bar x \pm t_{\alpha/2}\frac{s}{\sqrt{n}} = 10,37 \pm 2,145\cdot\frac{3,5}{\sqrt{15}} = [8,\!43\ 12,\!31]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
: Podobnie jak w poprzednim przykładzie możemy też skorzystać z tego, że w scipy.stats definiowane są rozkłady &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o dowolnych parametrach i wykonać całe obliczenia jednym wywołaniem funkcji:&lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.t.ppf([0.025, 0.975], 14, loc = 10.37, scale = 3.5/15**0.5)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lekarz może być pewny, że w 95% przypadków od podania leku do ustąpienia objawów upłynie czas pomiędzy 8,43 a 12,31 dnia.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Producent opon rowerowych chce oszacować średni dystans jaki można przejechać na oponie pewnego rodzaju zanim opona się zużyje. Pobrano losową próbę 32 opon, opona jest używana aż do przetarcia i odległość przejechana na każdej oponie jest rejestrowana. Dane (w tysiącach kilometrów) są następujące:&lt;br /&gt;
&lt;br /&gt;
32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, 25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41&lt;br /&gt;
&lt;br /&gt;
Znaleźć 99% przedział ufności dla średniego przebiegu opon tego rodzaju. Zadanie rozwiązać analogicznie jak powyższy przykład.&lt;br /&gt;
&lt;br /&gt;
''Odp'': [ 27,76  33,36].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
X=np.array([32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, 25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41])&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
x_sr = X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
s_sr=s/N**0.5&lt;br /&gt;
&lt;br /&gt;
print(st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=x_sr,scale=s_sr))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zadanie to można rozwiązać także w oparciu o bootstrap, wykorzystując funkcję zwracającą wartość zadanego [http://brain.fuw.edu.pl/edu/WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Kwantyle kwantyla] dla danego rozkładu. Rozkład jest tu zadany empirycznie w postaci zbioru.&lt;br /&gt;
: &amp;lt;source lang = python&amp;gt; st.scoreatpercentile(zbiór, kwantyl) &amp;lt;/source&amp;gt;&lt;br /&gt;
Proszę zwrócić uwagę na rozbieżności w wynikach. Z czego one wynikają?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
# rozwiązanie przez bootstrap&lt;br /&gt;
 &lt;br /&gt;
def randsample(x):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = n)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
 &lt;br /&gt;
N_rep = 100000&lt;br /&gt;
x = np.array([32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, &lt;br /&gt;
25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41])&lt;br /&gt;
 &lt;br /&gt;
r = np.zeros((N_rep,1))&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	x_boot = randsample(x)&lt;br /&gt;
	r[i] = np.mean(x_boot)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, 0.5) #uwaga: ta funkcja jako arg. bierze procenty a nie ułamki dziesiętne!&lt;br /&gt;
ci_g = st.scoreatpercentile(r, 99.5)&lt;br /&gt;
print('Z bootstrapu: ', ci_d, '-', ci_g)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przedział ufności dla wariancji ==&lt;br /&gt;
Zauważmy, że:&lt;br /&gt;
:&amp;lt;math&amp;gt; \frac{\sum_{i=1}^N\left(x_i-\bar{x}\right)^2}{\sigma^2}&amp;lt;/math&amp;gt; &lt;br /&gt;
podlega rozkładowi &amp;lt;math&amp;gt; \chi^2_{N-1}&amp;lt;/math&amp;gt;  o ''N''&amp;amp;minus;1 stopniach swobody, zaś nieobciążony estymator wariancji to&lt;br /&gt;
:&amp;lt;math&amp;gt;  s^2=\frac{1}{N-1}\sum_{i=1}^N \left(x_i-\bar{x}\right)^2 &amp;lt;/math&amp;gt; &lt;br /&gt;
Zatem zmienna losowa &lt;br /&gt;
:&amp;lt;math&amp;gt;  \frac{s^2(N-1)}{\sigma^2}&amp;lt;/math&amp;gt; &lt;br /&gt;
także podlega rozkładowi &amp;lt;math&amp;gt; \chi^2_{N-1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Aby znaleźć &amp;lt;math&amp;gt;(1-\alpha) &amp;lt;/math&amp;gt;100% przedział ufności dla wariancji, musimy wyznaczyć &lt;br /&gt;
takie wartości krytyczne &amp;lt;math&amp;gt; \chi^2_{N-1,\alpha/2}&amp;lt;/math&amp;gt; &lt;br /&gt;
oraz  &amp;lt;math&amp;gt; \chi^2_{N-1,1-\alpha/2}&amp;lt;/math&amp;gt; aby:&lt;br /&gt;
:&amp;lt;math&amp;gt;P\left( \chi^2_{N-1,\alpha/2} &amp;lt; \frac{s^2(N-1)}{\sigma^2}&amp;lt; \chi^2_{N-1,1-\alpha/2} \right) = 1-\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2_{N-1,\alpha/2}&amp;lt;/math&amp;gt; jest wartością, która odcina na lewo obszar &amp;amp;alpha;/2 z rozkładu chi-kwadrat z ''n''&amp;amp;minus;1 stopniami swobody. &amp;lt;math&amp;gt;\chi^2_{N-1,1-\alpha/2}&amp;lt;/math&amp;gt;  jest wartością, która odcina na prawo obszar &amp;amp;alpha;/2 z rozkładu chi-kwadrat z ''n''&amp;amp;minus;1 stopniami swobody (lub równoważnie: odcina na lewo obszar 1&amp;amp;minus;&amp;amp;alpha;/2).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Powyższe wyrażenie jest równoważne:&lt;br /&gt;
:&amp;lt;math&amp;gt;P\left( \frac{(N-1)s^2}{\chi^2_{N-1,1-\alpha/2}} &amp;lt; \sigma^2&amp;lt; \frac{(N-1)s^2}{\chi^2_{n-1,\alpha/2}} \right) = 1-\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt;(1-\alpha)*100&amp;lt;/math&amp;gt; % dla wariancji populacji &amp;lt;math&amp;gt; \sigma^2&amp;lt;/math&amp;gt;, gdy rozkład populacji jest normalny:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\left[\frac{(n-1)s^2}{\chi^2_{N-1,1-\alpha/2}}, \;\; \frac{(n-1)s^2}{\chi^2_{N-1,\alpha/2}} \right]&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
Automat do kawy nalewa kawę do kubków. Jeśli średnia porcja kawy w kubku odbiega od normy, maszynę można wyregulować. Jeśli jednak wariancja porcji kawy jest zbyt duża, maszyna wymaga reperacji. Od czasu do czasu przeprowadzana jest kontrola wariancji porcji kawy. Odbywa się to poprzez wybór losowej próby napełnionych kubków i policzenie wariancji próby. Losowa próba 30 kubków dała wariancję próby &amp;lt;math&amp;gt; s^2 = 18,54&amp;lt;/math&amp;gt;. Obliczyć 95% przedział ufności dla wariancji populacji &amp;lt;math&amp;gt; \sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
''Wskazówka: rozkład'' &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; ''dostępny jest w module scipy.stats jako '' &amp;lt;tt&amp;gt;chi2&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''Odp'': [11,759 33,505].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
n = 30&lt;br /&gt;
s2 = 18.54&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
&lt;br /&gt;
chi_kryt_d = st.chi2.ppf(1-alfa/2, df=n-1)&lt;br /&gt;
chi_kryt_g = st.chi2.ppf(alfa/2, df=n-1)&lt;br /&gt;
&lt;br /&gt;
ci_d = (n-1)*s2/chi_kryt_d&lt;br /&gt;
ci_g = (n-1)*s2/chi_kryt_g&lt;br /&gt;
print('przedział ufności: %(d).3f %(g).3f'%{'d':ci_d, 'g':ci_g})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rozmiar próby ==&lt;br /&gt;
&lt;br /&gt;
Gdy pobieramy próbę, często chcielibyśmy znać minimalny rozmiar próby, który zapewni nam żądaną precyzję wyniku.&lt;br /&gt;
&lt;br /&gt;
Musimy odpowiedzieć sobie na trzy pytania:&lt;br /&gt;
* Jak nasze oszacowanie nieznanego parametru ma być bliskie prawdziwej wartości? Odpowiedź oznaczmy &amp;lt;math&amp;gt; D&amp;lt;/math&amp;gt;  (dystans).&lt;br /&gt;
* Jaki chcemy mieć poziom ufności, że nasze oszacowanie i prawdziwa wartość parametru są od siebie oddalone o nie więcej niż ''D''?&lt;br /&gt;
* Jakie jest oszacowanie wariancji w populacji?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jeśli nie znamy odpowiedzi na pkt. 3 przeprowadzamy tzw. ''pilot study'' i szacujemy &amp;lt;math&amp;gt; \sigma&amp;lt;/math&amp;gt; na podstawie odchylenia std. próby. &lt;br /&gt;
&lt;br /&gt;
Średnia &amp;lt;math&amp;gt;\bar x&amp;lt;/math&amp;gt; podlega rozkładowi normalnemu &amp;lt;math&amp;gt;N(\mu,\sigma^2/\sqrt{n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
Wymagana odległość pomiędzy &amp;lt;math&amp;gt;\bar x -\mu =D&amp;lt;/math&amp;gt;. Korzystając z transformacji do rozkładu standardowego ''Z'' możemy zapisać &amp;lt;math&amp;gt;\bar x = \mu +z \sigma/\sqrt{n}&amp;lt;/math&amp;gt;. Podstawiając do poprzedniego wyrażenia otrzymujemy &lt;br /&gt;
minimalny rozmiar próby potrzebny do oszacowania średniej populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;, który wynosi:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n=\frac{z_{\alpha/2}^2\sigma^2}{D^2}&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
W przypadku nieznajomości &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; korzystamy z jej [http://brain.fuw.edu.pl/edu/index.php/WnioskowanieStatystyczne/Statystyki_i_estymatory nieobciążonego estymatora] &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
Biuro podróży chce oszacować średnią ilość pieniędzy wydaną na wakacje przez osoby korzystające z jego usług. Ludzie przeprowadzający analizę chcieliby móc oszacować średni koszt wakacji z dokładnością do 200 zł na poziomie ufności 95%. Z poprzednich doświadczeń tego biura podróży wynika, że odchylenie standardowe w populacji wynosi &amp;lt;math&amp;gt; \sigma = 400&amp;lt;/math&amp;gt; zł. Jaka będzie minimalna wielkość próby?&lt;br /&gt;
&lt;br /&gt;
''Odp'': &amp;lt;math&amp;gt; n = 15,366&amp;lt;/math&amp;gt; więc wielkość próby wynosi 16 (zaokrąglamy w górę).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
 &lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
 &lt;br /&gt;
alfa = 0.05&lt;br /&gt;
x=np.ones(100)&lt;br /&gt;
x[56:]=0&lt;br /&gt;
Nboot=100000&lt;br /&gt;
A=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
    ankieta=randsample(x,1500)&lt;br /&gt;
    A[i]=np.sum(ankieta)/1500.0&lt;br /&gt;
lo = st.scoreatpercentile(A, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(A, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch) = py.hist(A,bins = biny )&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przykład z bootstrapem ==&lt;br /&gt;
Rozważmy sondę przedwyborczą, mamy dwóch kandydatów na prezydenta. Ankietowano 1500 osób. 840 osób deklarowało poparcie dla kandydata A zaś 660 dla kandydata B. Na ile pewny może być kandydat A swojego zwycięstwa?&lt;br /&gt;
* Jak dokładnie brzmi pytanie? W terminologii przedziałów ufności możemy je sformułować następująco: Jaki jest 95% przedział ufności dla poparcia kandydata A w całej populacji? Czy też innymi słowami: W jakim przedziale na 95% znajduje się proporcja glosujących popierających kandydata A.&lt;br /&gt;
* Nasze najlepsze mniemanie o własnościach &amp;amp;bdquo;świata&amp;amp;rdquo; z którego pochodzą dane otrzymujemy ze zwykłej proporcji. Wynika z niej, że kandydat A ma poparcie 56% zaś kandydat B poparcie 44%  wyborców.&lt;br /&gt;
* Przypiszmy do kandydata A &amp;amp;bdquo;1&amp;amp;rdquo; zaś do B &amp;amp;bdquo;0&amp;amp;rdquo; (w ten sposób tworzymy zmienną losową: oddany głos).&lt;br /&gt;
* Pobranie ankiety modelujemy przez pobranie losowo 1500 próbek z modelu naszego &amp;amp;bdquo;świata&amp;amp;rdquo; czyli wektora złożonego z 56 jedynek i 44 zer. Wynikiem jednej ankiety jest proporcja popierających kandydata A (lub B)&lt;br /&gt;
* Zbieramy rozkład proporcji - musimy w tym celu &amp;amp;bdquo;przeprowadzić&amp;amp;rdquo; wielokrotnie ankietę. Narysujmy histogram. &lt;br /&gt;
* Chcemy znaleźć 95% przedział ufności musimy znaleźć kwantyl 2,5 oraz 97,5.&lt;br /&gt;
Liczby te stanowią poszukiwany przedział ufności. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
x=np.ones(100)&lt;br /&gt;
x[56:]=0&lt;br /&gt;
Nboot=10000&lt;br /&gt;
A=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
    ankieta=randsample(x,1500)&lt;br /&gt;
    A[i]=np.sum(ankieta)/1500.0&lt;br /&gt;
lo = st.scoreatpercentile(A, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(A, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+11*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch) = py.hist(A,bins = biny )&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zadania ==&lt;br /&gt;
=== Przyrost masy w nowej diecie ===&lt;br /&gt;
Producent karmy dla zwierząt chciał przetestować nowy rodzaj karmy. Próbki podawał 12 zwierzakom przez 4 tygodnie. Po tym czasie zanotował następujące przyrosty masy:&lt;br /&gt;
&lt;br /&gt;
15.43, 16.92, 14.43, 12.94, 15.92, 17.42, 18.91, 16.92, 14.93, 14.49, 15.92, 15.43 kg&lt;br /&gt;
&lt;br /&gt;
średni przyrost wynosi 15.80 kg. Producent widzi jednak, że w próbie jest dość znaczny rozrzut pomiędzy poszczególnymi zwierzętami 12,94-18,91 i nie jest pewien czy można reklamować nowy produkt podając średni przyrost 15,8 kg. Podejrzewa, że inna grupa zwierząt może mieć zupełnie inną średnią. &lt;br /&gt;
* Używając powyższych danych znajdź 95% przedział ufności na średni przyrost masy.&lt;br /&gt;
* Wynik zilustruj przy pomocy histogramu.&lt;br /&gt;
* Jaki byłby wynik przy założeniu, że masy zwierząt pochodzą z rozkładu normalnego?&lt;br /&gt;
&lt;br /&gt;
''Odp:''&lt;br /&gt;
: zakładając, że ''x'' pochodzi z rozkładu normalnego:&lt;br /&gt;
: [14,80  16,81];&lt;br /&gt;
: bootstrap: 14,94-16,67.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.array([15.43, 16.92, 14.43, 12.94, 15.92, 17.42, 18.91, 16.92, 14.93, 14.49, 15.92, 15.43])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xsr=X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;średnia&amp;quot;,Xsr)&lt;br /&gt;
&lt;br /&gt;
M=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=xb.mean()&lt;br /&gt;
&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=Xsr,scale=s/N**0.5)&lt;br /&gt;
print('przedzial ufnosci z założenia o normalności: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch)=py.hist(M,bins=biny)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zawartość aluminium w Tebańskich naczyniach. ===&lt;br /&gt;
Zawartość procentowa aluminium w 18 antycznych naczyniach z Teb była następująca:&amp;lt;br/&amp;gt;&lt;br /&gt;
11.4, 13.4, 13.5, 13.8, 13.9, 14.4, 14.5, 15, 15.1, 15.8, 16, 16.3, 16.5, 16.9, 17, 17.2, 17.5, 19.0&amp;lt;br/&amp;gt;&lt;br /&gt;
Jaka jest mediana procentowej zawartości aluminium i jaki jest 95% przedział ufności?&lt;br /&gt;
&lt;br /&gt;
''Odp'':&lt;br /&gt;
:mediana 15,45 i przedział ufności: 14,20 16,70.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.array([11.4, 13.4, 13.5, 13.8, 13.9, 14.4, 14.5, 15, 15.1, 15.8, 16, 16.3, 16.5, 16.9, 17, 17.2, 17.5, 19.0])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xmed=np.median(X)&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;mediana probki&amp;quot;,Xmed)&lt;br /&gt;
&lt;br /&gt;
M=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=np.median(xb)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla mediany (z bootstrapu): %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(M,bins=10)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Średnica drzew ===&lt;br /&gt;
Ogrodnik eksperymentuje z nowym gatunkiem drzew. Posadził 20 sztuk i po dwóch latach zmierzył następujące średnice pni (w cm):&lt;br /&gt;
8.5, 7.6, 9.3, 5.5, 11.4, 6.9, 6.5, 12.9, 8.7, 4.8, 4.2, 8.1, 6.5, 5.8, 6.7, 2.4, 11.1, 7.1, 8.8, 7.2&lt;br /&gt;
* Proszę znaleźć średnią średnicę i 90% przedział ufności dla średniej.&lt;br /&gt;
* Proszę znaleźć medianę i 90% przedział ufności dla mediany.&lt;br /&gt;
* Obydwa wyniki zilustrować przy pomocy histogramów.&lt;br /&gt;
''Odp:''&lt;br /&gt;
: średnia: 7,50 i przedzial ufnosci dla średniej: [6,61  8,41];&lt;br /&gt;
: mediana 7,15 i przedzial ufnosci dla mediany: [6,50  8,50].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source  lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_przedzialem(x,hi,lo):&lt;br /&gt;
	szer_binu = (hi-lo)/10	&lt;br /&gt;
	biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
	(n,bin_x,patch) = py.hist(x,bins = biny );&lt;br /&gt;
	py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
	py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
X=np.array([8.5, 7.6, 9.3, 5.5, 11.4, 6.9, 6.5, 12.9, 8.7, 4.8, 4.2, 8.1, 6.5, 5.8, 6.7, 2.4, 11.1, 7.1, 8.8, 7.2])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.1&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;Średnia próbki&amp;quot;,np.mean(X))&lt;br /&gt;
print(&amp;quot;Mediana próbki&amp;quot;,np.median(X))&lt;br /&gt;
print(&amp;quot;Liczebność próbki&amp;quot;,N)&lt;br /&gt;
&lt;br /&gt;
Sr=np.empty(Nboot)&lt;br /&gt;
Med=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Med[i]=np.median(xb)&lt;br /&gt;
	Sr[i]=np.mean(xb)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Sr, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Sr, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla średniej: %(lo).3f - %(hi).3f'%{'lo':lo,'hi':hi})&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
hist_z_przedzialem(Sr,hi,lo)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Med, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Med, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla mediany: %(lo).3f - %(hi).3f'%{'lo':lo,'hi':hi})&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
hist_z_przedzialem(Med,hi,lo)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Przedział ufności dla proporcji ===&lt;br /&gt;
W badaniach nad cholesterolem u ludzi stwierdzono, że w grupie 135 badanych z wysokim poziomem cholesterolu 10 osób przeszło zawał serca. &lt;br /&gt;
&lt;br /&gt;
''Pytanie'': Jaki jest 95% przedział ufności dla proporcji 10/135?  &lt;br /&gt;
&lt;br /&gt;
* Proszę wykorzystać metodę bootstrapu.&lt;br /&gt;
* Proszę wykorzystać rozkład dwumianowy.&lt;br /&gt;
&lt;br /&gt;
''Odp'': proporcja 10/135 = 0,07 i jej 95% przedział ufności [0,03 0,12].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.zeros(135)&lt;br /&gt;
X[:10]=1&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
&lt;br /&gt;
Proporcja=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Proporcja[i]=np.sum(xb)/N&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Proporcja, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Proporcja, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(Proporcja,bins=np.arange(0,1,1/135)-1/270)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p=10/135&lt;br /&gt;
lo,hi = st.binom.ppf([alfa/2,1-alfa/2],N,p)/N&lt;br /&gt;
print('przedzial ufnosci z rozkładu dwumianowego: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bezrobotni ===&lt;br /&gt;
W próbce 200 osób 7 procent jest bezrobotnych. Określić 95% przedział ufności dla odsetka bezrobotnych w populacji.&lt;br /&gt;
&lt;br /&gt;
''Odp'': Średnia 7% i jej 95% przedział ufności [3,50 10,50].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.zeros(100)&lt;br /&gt;
X[:7]=1&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=200&lt;br /&gt;
&lt;br /&gt;
Proporcja=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Proporcja[i]=np.sum(xb)/N*100 #chcemy procenty i dlatego mnożymy przez 100&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Proporcja, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Proporcja, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(Proporcja,bins=30)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
p=7/100&lt;br /&gt;
lo,hi = st.binom.ppf([alfa/2,1-alfa/2],N,p)/N*100&lt;br /&gt;
print('przedzial ufnosci z rozkładu dwumianowego: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Żywotność baterii ===&lt;br /&gt;
W próbce 20 testowanych baterii stwierdzono średni czas życia 28,85 miesiąca. Określić 95% przedział ufności dla średniej. Wartości dla badanej próbki były następujące:&amp;lt;br&amp;gt;&lt;br /&gt;
30, 32, 31, 28, 31, 29, 29, 24, 30, 31, 28, 28, 32, 31, 24, 23, 31, 27, 27, 31 miesięcy&amp;lt;br&amp;gt;&lt;br /&gt;
Obejrzeć rozkład przy pomocy &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; i zbadać jaki wpływ na przedział ufności ma przyjęcie założenia o normalności rozkładu czasów życia.&lt;br /&gt;
&lt;br /&gt;
''Odp'': Średnia 28,85 i jej 95% przedział ufności [27,65 29,95].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x &lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, density=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Tu w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[:-1]+bins[1:])&lt;br /&gt;
	# wytwarzamy array z centrami binów korzystając z granic słupków&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej mi i wariancji sigma**2 dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_przedzialem(x,hi,lo):&lt;br /&gt;
	szer_binu = (hi-lo)/10	&lt;br /&gt;
	biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
	(n,bin_x,patch) = py.hist(x,bins = biny );&lt;br /&gt;
	py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
	py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x &lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, density=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Tu w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
 &lt;br /&gt;
	bincenters = 0.5*(bins[:-1]+bins[1:])&lt;br /&gt;
	# wytwarzamy array z centrami binów korzystając z granic słupków&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej mi i wariancji sigma**2 dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię&lt;br /&gt;
&lt;br /&gt;
X=np.array([30, 32, 31, 28, 31, 29, 29, 24, 30, 31, 28, 28, 32, 31, 24, 23, 31, 27, 27, 31])&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Średnia próbki&amp;quot;,np.mean(X))&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xsr=X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
N=len(X)&lt;br /&gt;
&lt;br /&gt;
M=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=xb.mean()&lt;br /&gt;
&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=Xsr,scale=s/N**0.5)&lt;br /&gt;
print('przedzial ufnosci z założenia o normalności: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
hist_z_przedzialem(M,hi,lo)&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
histfit(M,20)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pomiary ===&lt;br /&gt;
Mamy 10 pomiarów pewnej wielkości:&amp;lt;br&amp;gt;&lt;br /&gt;
0.02, 0.026, 0.023, 0.017, 0.022, 0.019, 0.018, 0.018, 0.017, 0.022&amp;lt;br&amp;gt;&lt;br /&gt;
Proszę znaleźć średnią i 95% przedział ufności.&lt;br /&gt;
&lt;br /&gt;
''Odp'':Średnia 0,020 i jej 95% przedział ufności [0,0185 0,0220].&lt;br /&gt;
&lt;br /&gt;
Czy pomiarów jest wystarczająco dużo aby sensownie wyznaczyć średnią i przedział ufności?&lt;br /&gt;
&lt;br /&gt;
''Wskazówka'': Obliczyć średnie dla 1 000 000 powtórzeń i obejrzeć histogramy dla 10, 20, 30, 100, i 200 przedziałów.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def randsample(x):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = n)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
dane = np.array([0.02, 0.026, 0.023, 0.017, 0.022, 0.019, 0.018, 0.018, 0.017, 0.022]);&lt;br /&gt;
&lt;br /&gt;
N_rep = 1000000&lt;br /&gt;
srednie = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	proba = randsample(dane)&lt;br /&gt;
	srednie[i] = np.mean(proba)&lt;br /&gt;
&lt;br /&gt;
ci_d = st.scoreatpercentile(srednie, 2.5)&lt;br /&gt;
ci_g = st.scoreatpercentile(srednie, 97.5)&lt;br /&gt;
print('Średnia %(prop).4f i jej 95proc. przedział ufności [%(d).4f %(g).4f]'%{'prop':np.mean(dane),'d':ci_d, 'g': ci_g})&lt;br /&gt;
py.subplot(5,1,1)&lt;br /&gt;
py.hist(srednie,10)&lt;br /&gt;
py.subplot(5,1,2)&lt;br /&gt;
py.hist(srednie,20)&lt;br /&gt;
py.subplot(5,1,3)&lt;br /&gt;
py.hist(srednie,30)&lt;br /&gt;
py.subplot(5,1,4)&lt;br /&gt;
py.hist(srednie,100)&lt;br /&gt;
py.subplot(5,1,5)&lt;br /&gt;
py.hist(srednie,200)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci&amp;diff=8541</id>
		<title>WnioskowanieStatystyczne/ Przedziały ufności</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci&amp;diff=8541"/>
		<updated>2021-02-18T10:25:58Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadanie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Wstęp ==&lt;br /&gt;
Średnia (lub inny parametr) estymowany na podstawie próby pobranej z populacji nie jest równa rzeczywistej wartości tego parametru w populacji. &lt;br /&gt;
* Wylosuj 10 razy 100 liczb z rozkładu normalnego &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt; i oblicz średnią. Czy udało ci się zaobserwować wartość 0?&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
for i in range(10):&lt;br /&gt;
	x=st.norm.rvs(size=100)&lt;br /&gt;
	print(np.mean(x))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Rozbieżność między uzyskanym wynikiem a rzeczywistą średnią populacji zależy od wielkości badanej grupy oraz zmienności badanej cechy w jej obrębie. Jeśli badana grupa jest niewielka i ma dużą zmienność analizowanej cechy wówczas rozbieżność między średnią uzyskaną, a rzeczywistą może być znaczna. Natomiast, jeśli badana grupa jest duża z niewielką zmiennością danych, wówczas uzyskana średnia będzie prawdopodobnie bardzo bliska średniej populacyjnej. Przedział ufności ({{ang|confidence interval &amp;amp;mdash;  CI}}) odzwierciedla zarówno wielkość badanej grupy jak i zmienność analizowanej cechy wewnątrz tej grupy. &lt;br /&gt;
Przedział ufności jest określany z różnym procentem &amp;amp;bdquo;zaufania&amp;amp;rdquo;, np. 90 czy też 95%. Najczęściej używa się 95% przedziału ufności. Oznacza to, że jeśli grupa badana była zgromadzona w sposób losowy to rzeczywisty parametr populacji z 95% pewnością znajduje się w tym przedziale. Innymi słowy, możemy sobie wyobrazić, że mamy dostępne wyniki dowolnie wielu badań analogicznych do analizowanego. Oczekujemy, że w 95% przypadków badana cecha znajduje się wewnątrz wyznaczonego przez nas przedziału ufności. &lt;br /&gt;
&lt;br /&gt;
Pewnych problemów koncepcyjnych nastręcza konstrukcja przedziałów ufności.  Dla danej znanej populacji możemy obliczyć średnią populacji oraz prawdopodobieństwo uzyskania konkretnej wartości średniej przy losowaniu próby o zadanej liczebności z tejże populacji, możemy więc określić prawdopodobieństwo &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, że odległość średniej z próby i średniej z populacji jest &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Mając do dyspozycji tylko próbę możemy albo założyć, że pochodzi ona z jakiegoś znanego rozkładu i wyliczyć z niego wartości krytyczne albo zakładając, że jest ona reprezentatywna możemy metodą bootstrapu &amp;amp;bdquo;wytworzyć&amp;amp;rdquo; wiele innych prób z badanej populacji i oszacować jakie są granice, w które wpada żądana frakcja średnich (np.:90%, 95%).  &lt;br /&gt;
&lt;br /&gt;
''Bootstrap'' jest związany z pobieraniem próby. Najkorzystniejszą sytuacją jest ta, w której dla oszacowania różnych parametrów statystycznych populacji mamy możliwość pobierania z tej populacji wielu prób. Jeśli jest to niemożliwe możemy posłużyć się pobieraniem wielokrotnie prób z tej próby, którą posiadamy. Postępowanie takie jest sensowne pod warunkiem, że próba, która służy nam do generowania innych możliwych pobrań próby jest ''reprezentatywna''. '''W bootstrapie losujemy ze zwracaniem''' (dlaczego?). &amp;lt;!-- Zakładamy, że pobranie elementu o danej wartości nie zmienia prawdopodobieństwa wylosowania ponownie elementu o tej wartości --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przedział ufności dla średniej ==&lt;br /&gt;
===  Przypadek 1: znana wariancja rozkładu ===&lt;br /&gt;
Rozważamy zmienną losową podlegającą rozkładowi &amp;lt;math&amp;gt;N(\mu,\sigma^2)&amp;lt;/math&amp;gt; czyli rozkładowi normalnemu o średniej &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt; i znanym odchyleniu standardowym  &amp;lt;math&amp;gt; \sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
Pobieramy próby tych zmiennych losowych o rozmiarze &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Przypomnijmy, że średnia z takiej próby też może być traktowana jako zmienna losowa.  [http://brain.fuw.edu.pl/edu/STAT:Statystyki_i_estymatory#Estymator_warto.C5.9Bci_oczekiwanej Podlega ona rozkładowi] normalnemu o średniej  &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt; i standardowym odchyleniu &amp;lt;math&amp;gt;\frac{\sigma}{\sqrt{n}}&amp;lt;/math&amp;gt; czyli &amp;lt;math&amp;gt;N\left( \mu,\frac{\sigma^2}{n} \right)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Oznacza to, że zmienna &amp;lt;math&amp;gt;\frac{\bar x - \mu}{\sigma/\sqrt{n}}  &amp;lt;/math&amp;gt; podlega rozkładowi &amp;lt;math&amp;gt; N(0,1)&amp;lt;/math&amp;gt; czyli &amp;lt;math&amp;gt; Z&amp;lt;/math&amp;gt;.  Konstrukcja przedziału ufności dla średniej polega zatem na znalezieniu takich wartości &amp;lt;math&amp;gt;z_{\alpha/2}&amp;lt;/math&amp;gt;, że:&lt;br /&gt;
: &amp;lt;math&amp;gt; P \left(  \left|\frac{\bar x - \mu}{\sigma/\sqrt{n}} \right| \le z_{\alpha/2}\right) = 1-\alpha &amp;lt;/math&amp;gt; &lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt; (1-\alpha)*100&amp;lt;/math&amp;gt;% :&lt;br /&gt;
: &amp;lt;math&amp;gt; \left[ \bar x - z_{\alpha/2}\frac{\sigma}{\sqrt n} ,\;\;\; \bar x+ z_{\alpha/2}\frac{\sigma}{\sqrt n} \right] &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Przykład ====&lt;br /&gt;
Wyciągamy losową próbę &amp;lt;math&amp;gt; (n = 25)&amp;lt;/math&amp;gt;  z populacji o rozkładzie normalnym. Dostajemy średnią z próby &amp;lt;math&amp;gt; \bar x = 122&amp;lt;/math&amp;gt;. Załóżmy, że znamy standardowe odchylenie populacji &amp;lt;math&amp;gt; \sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Oblicz przedział ufności 95% dla średniej populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Co zrobić aby zmniejszyć obliczony przedział 10-krotnie?&lt;br /&gt;
&lt;br /&gt;
Korzystając z tablic znajdujemy &amp;lt;math&amp;gt; z_{\alpha/2} = z_{2,5\%} = -1,96&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
: Wartość tą możemy uzyskać wołając w pythonie: &lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.norm.ppf(0.025)&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; &lt;br /&gt;
\bar x \pm 1,96 \frac{\sigma}{\sqrt{n}} = 122 \pm 1,96\cdot\frac{20}{\sqrt{25}} = 122 \pm 7,84 = [\mathrm{114,16} \;\;\; 129,84]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy być pewni na 95%, że nieznana średnia populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;  znajduje się pomiędzy 114,16 a 129,84. Jeśli chcemy zmniejszyć przedział ufności 10-krotnie, musimy pobrać 100 razy większą próbę tj. ''n'' = 2500.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: Pracując z modułem scipy.stats mamy do dyspozycji rozkłady normalne &amp;lt;math&amp;gt;N(\mu,\sigma)&amp;lt;/math&amp;gt;  o dowolnych parametrach &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;. &lt;br /&gt;
: Możemy więc uzyskać interesujący nas przedział ufności przy pomocy pojedynczego wywołania:&lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.norm.ppf([0.025, 0.975],loc = 122, scale = 20.0/25**0.5)&amp;lt;/source&amp;gt;  gdzie  &amp;lt;tt&amp;gt;loc = &amp;lt;/tt&amp;gt; &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; oraz &amp;lt;tt&amp;gt;scale = &amp;lt;/tt&amp;gt;&amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Importer win musi zbadać średnią zawartość alkoholu w nowej partii win francuskich. Z doświadczenia z poprzednimi gatunkami wina, przyjmuje on, że standardowe odchylenie w populacji wynosi 1,2%. Importer wybrał losową próbę 60 butelek nowego wina i otrzymał średnią z próby 9,3%. Znaleźć przedział ufności 90% dla średniej zawartości alkoholu w nowej partii win.&lt;br /&gt;
&lt;br /&gt;
''Odp.'': [9,0452 9,5548].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
sigma=1.2&lt;br /&gt;
N=60&lt;br /&gt;
x_sr=9.3&lt;br /&gt;
sigma_sr=sigma/N**0.5&lt;br /&gt;
alfa=0.1&lt;br /&gt;
&lt;br /&gt;
#korzystając ze wzoru&lt;br /&gt;
print(st.norm.ppf([alfa/2,1-alfa/2]) * sigma_sr + x_sr)&lt;br /&gt;
#lub korzystając z rozkładu o zadanych parametrach&lt;br /&gt;
print(st.norm.ppf([alfa/2,1-alfa/2], loc=x_sr, scale=sigma_sr) )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przypadek 2: nieznana wariancja rozkładu ===&lt;br /&gt;
Sytuacja zmienia się jeśli zakładamy, że  próba pochodzi z rozkładu normalnego o śreniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; i nieznanej wariancji.&lt;br /&gt;
Musimy wówczas zamiast wariancji posłużyć się jej estymatorem &amp;lt;math&amp;gt;s^2 = \frac{1}{n-1} \sum_{i=1}^n {\left(x_i-\mu\right)^2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Zmienna losowa &amp;lt;math&amp;gt;\frac{\bar x  - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt; podlega rozkładowi &amp;lt;math&amp;gt;t_{n-1}&amp;lt;/math&amp;gt; (czytaj: rozkładowi ''t'' o ''n''&amp;amp;minus;1 stopniach swobody). Konstrukcja przedziału ufności dla średniej polega zatem na znalezieniu takich wartości &amp;lt;math&amp;gt;t_{\alpha/2}&amp;lt;/math&amp;gt; w rozkładzie ''t'' o ''n''&amp;amp;minus;1 stopniach swobody, że:&lt;br /&gt;
: &amp;lt;math&amp;gt; P \left(  \left|\frac{\bar x - \mu}{s/\sqrt{n}} \right| \le t_{\alpha/2}\right) = 1-\alpha &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt; (1-\alpha)\cdot 100&amp;lt;/math&amp;gt;% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;, gdy nie znamy odchylenia standardowego &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;, a jedynie jego estymatę:&lt;br /&gt;
:: &amp;lt;math&amp;gt; &lt;br /&gt;
\left[ &lt;br /&gt;
\bar x- t_{\frac{\alpha}{2}} \frac{s}{\sqrt{n}}, \,\,\,\,\, \bar x+ t_{\frac{\alpha}{2}} \frac{s}{\sqrt{n}}\right] &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
:gdzie &amp;lt;math&amp;gt; t_{\alpha/2}&amp;lt;/math&amp;gt;  jest wartością, która odcina obszar &amp;amp;alpha;/2 z rozkładu &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt; z ''n''&amp;amp;minus;1 stopniami swobody.&lt;br /&gt;
&lt;br /&gt;
;Uwaga: w Pythonie możemy skorzystać z funkcji modułu &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; do obliczania wartości estymatorów:&lt;br /&gt;
:* ''s''  &amp;lt;tt&amp;gt;numpy.std&amp;lt;/tt&amp;gt; &lt;br /&gt;
:*  &amp;lt;math&amp;gt;\bar x&amp;lt;/math&amp;gt; &amp;lt;tt&amp;gt;numpy.mean&amp;lt;/tt&amp;gt;&lt;br /&gt;
==== Przykład ====&lt;br /&gt;
Lekarz chce zbadać średni czas trwania kuracji tj. od podania leku do ustąpienia objawów w pewnej chorobie. Losowa próba 15 pacjentów dała średni czas &amp;lt;math&amp;gt;\bar x = 10,37&amp;lt;/math&amp;gt;  dnia i odchylenie standardowe &amp;lt;math&amp;gt;s = 3,5&amp;lt;/math&amp;gt;  dnia. Zakładając normalny rozkład w populacji czasów trwania kuracji znaleźć 95% przedział ufności dla średniego czasu trwania kuracji.&lt;br /&gt;
&lt;br /&gt;
Znajdujemy wartość z rozkładu &amp;lt;math&amp;gt; t&amp;lt;/math&amp;gt;  o ''n''&amp;amp;minus;1 (=14) stopniach swobody, która odcina obszar &amp;lt;math&amp;gt; \alpha/2 = 0,025&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt; t_{0,025} = 2,145&amp;lt;/math&amp;gt;.&lt;br /&gt;
: w pythonie: &amp;lt;source lang =python&amp;gt;st.t.ppf(0.025,14)&amp;lt;/source&amp;gt;&lt;br /&gt;
Dostajemy więc &amp;lt;math&amp;gt; \bar x \pm t_{\alpha/2}\frac{s}{\sqrt{n}} = 10,37 \pm 2,145\cdot\frac{3,5}{\sqrt{15}} = [8,\!43\ 12,\!31]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
: Podobnie jak w poprzednim przykładzie możemy też skorzystać z tego, że w scipy.stats definiowane są rozkłady &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o dowolnych parametrach i wykonać całe obliczenia jednym wywołaniem funkcji:&lt;br /&gt;
: &amp;lt;source lang =python&amp;gt;st.t.ppf([0.025, 0.975], 14, loc = 10.37, scale = 3.5/15**0.5)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lekarz może być pewny, że w 95% przypadków od podania leku do ustąpienia objawów upłynie czas pomiędzy 8,43 a 12,31 dnia.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Producent opon rowerowych chce oszacować średni dystans jaki można przejechać na oponie pewnego rodzaju zanim opona się zużyje. Pobrano losową próbę 32 opon, opona jest używana aż do przetarcia i odległość przejechana na każdej oponie jest rejestrowana. Dane (w tysiącach kilometrów) są następujące:&lt;br /&gt;
&lt;br /&gt;
32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, 25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41&lt;br /&gt;
&lt;br /&gt;
Znaleźć 99% przedział ufności dla średniego przebiegu opon tego rodzaju. Zadanie rozwiązać analogicznie jak powyższy przykład.&lt;br /&gt;
&lt;br /&gt;
''Odp'': [ 27,76  33,36].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
X=np.array([32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, 25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41])&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
x_sr = X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
s_sr=s/N**0.5&lt;br /&gt;
&lt;br /&gt;
print(st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=x_sr,scale=s_sr))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zadanie to można rozwiązać także w oparciu o bootstrap, wykorzystując funkcję zwracającą wartość zadanego [http://brain.fuw.edu.pl/edu/WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Kwantyle kwantyla] dla danego rozkładu. Rozkład jest tu zadany empirycznie w postaci zbioru.&lt;br /&gt;
: &amp;lt;source lang = python&amp;gt; st.scoreatpercentile(zbiór, kwantyl) &amp;lt;/source&amp;gt;&lt;br /&gt;
Proszę zwrócić uwagę na rozbieżności w wynikach. Z czego one wynikają?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
# rozwiązanie przez bootstrap&lt;br /&gt;
 &lt;br /&gt;
def randsample(x):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = n)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
 &lt;br /&gt;
N_rep = 100000&lt;br /&gt;
x = np.array([32, 33, 28, 37, 29, 30, 25, 27, 39, 40, 26, 26, 27, 30, 25, 30, 31, 29, 24, 36, &lt;br /&gt;
25, 37, 37, 20, 22, 35, 23, 28, 30, 36, 40, 41])&lt;br /&gt;
 &lt;br /&gt;
r = np.zeros((N_rep,1))&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	x_boot = randsample(x)&lt;br /&gt;
	r[i] = np.mean(x_boot)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, 0.5) #uwaga: ta funkcja jako arg. bierze procenty a nie ułamki dziesiętne!&lt;br /&gt;
ci_g = st.scoreatpercentile(r, 99.5)&lt;br /&gt;
print('Z bootstrapu: ', ci_d, '-', ci_g)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przedział ufności dla wariancji ==&lt;br /&gt;
Zauważmy, że:&lt;br /&gt;
:&amp;lt;math&amp;gt; \frac{\sum_{i=1}^N\left(x_i-\bar{x}\right)^2}{\sigma^2}&amp;lt;/math&amp;gt; &lt;br /&gt;
podlega rozkładowi &amp;lt;math&amp;gt; \chi^2_{N-1}&amp;lt;/math&amp;gt;  o ''N''&amp;amp;minus;1 stopniach swobody, zaś nieobciążony estymator wariancji to&lt;br /&gt;
:&amp;lt;math&amp;gt;  s^2=\frac{1}{N-1}\sum_{i=1}^N \left(x_i-\bar{x}\right)^2 &amp;lt;/math&amp;gt; &lt;br /&gt;
Zatem zmienna losowa &lt;br /&gt;
:&amp;lt;math&amp;gt;  \frac{s^2(N-1)}{\sigma^2}&amp;lt;/math&amp;gt; &lt;br /&gt;
także podlega rozkładowi &amp;lt;math&amp;gt; \chi^2_{N-1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Aby znaleźć &amp;lt;math&amp;gt;(1-\alpha) &amp;lt;/math&amp;gt;100% przedział ufności dla wariancji, musimy wyznaczyć &lt;br /&gt;
takie wartości krytyczne &amp;lt;math&amp;gt; \chi^2_{N-1,\alpha/2}&amp;lt;/math&amp;gt; &lt;br /&gt;
oraz  &amp;lt;math&amp;gt; \chi^2_{N-1,1-\alpha/2}&amp;lt;/math&amp;gt; aby:&lt;br /&gt;
:&amp;lt;math&amp;gt;P\left( \chi^2_{N-1,\alpha/2} &amp;lt; \frac{s^2(N-1)}{\sigma^2}&amp;lt; \chi^2_{N-1,1-\alpha/2} \right) = 1-\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2_{N-1,\alpha/2}&amp;lt;/math&amp;gt; jest wartością, która odcina na lewo obszar &amp;amp;alpha;/2 z rozkładu chi-kwadrat z ''n''&amp;amp;minus;1 stopniami swobody. &amp;lt;math&amp;gt;\chi^2_{N-1,1-\alpha/2}&amp;lt;/math&amp;gt;  jest wartością, która odcina na prawo obszar &amp;amp;alpha;/2 z rozkładu chi-kwadrat z ''n''&amp;amp;minus;1 stopniami swobody (lub równoważnie: odcina na lewo obszar 1&amp;amp;minus;&amp;amp;alpha;/2).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Powyższe wyrażenie jest równoważne:&lt;br /&gt;
:&amp;lt;math&amp;gt;P\left( \frac{(N-1)s^2}{\chi^2_{N-1,1-\alpha/2}} &amp;lt; \sigma^2&amp;lt; \frac{(N-1)s^2}{\chi^2_{n-1,\alpha/2}} \right) = 1-\alpha&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zatem przedział ufności &amp;lt;math&amp;gt;(1-\alpha)*100&amp;lt;/math&amp;gt; % dla wariancji populacji &amp;lt;math&amp;gt; \sigma^2&amp;lt;/math&amp;gt;, gdy rozkład populacji jest normalny:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\left[\frac{(n-1)s^2}{\chi^2_{N-1,1-\alpha/2}}, \;\; \frac{(n-1)s^2}{\chi^2_{N-1,\alpha/2}} \right]&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
Automat do kawy nalewa kawę do kubków. Jeśli średnia porcja kawy w kubku odbiega od normy, maszynę można wyregulować. Jeśli jednak wariancja porcji kawy jest zbyt duża, maszyna wymaga reperacji. Od czasu do czasu przeprowadzana jest kontrola wariancji porcji kawy. Odbywa się to poprzez wybór losowej próby napełnionych kubków i policzenie wariancji próby. Losowa próba 30 kubków dała wariancję próby &amp;lt;math&amp;gt; s^2 = 18,54&amp;lt;/math&amp;gt;. Obliczyć 95% przedział ufności dla wariancji populacji &amp;lt;math&amp;gt; \sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
''Wskazówka: rozkład'' &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; ''dostępny jest w module scipy.stats jako '' &amp;lt;tt&amp;gt;chi2&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''Odp'': [11,759 33,505].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
n = 30&lt;br /&gt;
s2 = 18.54&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
&lt;br /&gt;
chi_kryt_d = st.chi2.ppf(1-alfa/2, df=n-1)&lt;br /&gt;
chi_kryt_g = st.chi2.ppf(alfa/2, df=n-1)&lt;br /&gt;
&lt;br /&gt;
ci_d = (n-1)*s2/chi_kryt_d&lt;br /&gt;
ci_g = (n-1)*s2/chi_kryt_g&lt;br /&gt;
print('przedział ufności: %(d).3f %(g).3f'%{'d':ci_d, 'g':ci_g})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rozmiar próby ==&lt;br /&gt;
&lt;br /&gt;
Gdy pobieramy próbę, często chcielibyśmy znać minimalny rozmiar próby, który zapewni nam żądaną precyzję wyniku.&lt;br /&gt;
&lt;br /&gt;
Musimy odpowiedzieć sobie na trzy pytania:&lt;br /&gt;
* Jak nasze oszacowanie nieznanego parametru ma być bliskie prawdziwej wartości? Odpowiedź oznaczmy &amp;lt;math&amp;gt; D&amp;lt;/math&amp;gt;  (dystans).&lt;br /&gt;
* Jaki chcemy mieć poziom ufności, że nasze oszacowanie i prawdziwa wartość parametru są od siebie oddalone o nie więcej niż ''D''?&lt;br /&gt;
* Jakie jest oszacowanie wariancji w populacji?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jeśli nie znamy odpowiedzi na pkt. 3 przeprowadzamy tzw. ''pilot study'' i szacujemy &amp;lt;math&amp;gt; \sigma&amp;lt;/math&amp;gt; na podstawie odchylenia std. próby. &lt;br /&gt;
&lt;br /&gt;
Średnia &amp;lt;math&amp;gt;\bar x&amp;lt;/math&amp;gt; podlega rozkładowi normalnemu &amp;lt;math&amp;gt;N(\mu,\sigma^2/\sqrt{n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
Wymagana odległość pomiędzy &amp;lt;math&amp;gt;\bar x -\mu =D&amp;lt;/math&amp;gt;. Korzystając z transformacji do rozkładu standardowego ''Z'' możemy zapisać &amp;lt;math&amp;gt;\bar x = \mu +z \sigma/\sqrt{n}&amp;lt;/math&amp;gt;. Podstawiając do poprzedniego wyrażenia otrzymujemy &lt;br /&gt;
minimalny rozmiar próby potrzebny do oszacowania średniej populacji &amp;lt;math&amp;gt; \mu&amp;lt;/math&amp;gt;, który wynosi:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
n=\frac{z_{\alpha/2}^2\sigma^2}{D^2}&lt;br /&gt;
&amp;lt;/math&amp;gt; &lt;br /&gt;
W przypadku nieznajomości &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; korzystamy z jej [http://brain.fuw.edu.pl/edu/index.php/WnioskowanieStatystyczne/Statystyki_i_estymatory nieobciążonego estymatora] &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
Biuro podróży chce oszacować średnią ilość pieniędzy wydaną na wakacje przez osoby korzystające z jego usług. Ludzie przeprowadzający analizę chcieliby móc oszacować średni koszt wakacji z dokładnością do 200 zł na poziomie ufności 95%. Z poprzednich doświadczeń tego biura podróży wynika, że odchylenie standardowe w populacji wynosi &amp;lt;math&amp;gt; \sigma = 400&amp;lt;/math&amp;gt; zł. Jaka będzie minimalna wielkość próby?&lt;br /&gt;
&lt;br /&gt;
''Odp'': &amp;lt;math&amp;gt; n = 15,366&amp;lt;/math&amp;gt; więc wielkość próby wynosi 16 (zaokrąglamy w górę).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
 &lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
 &lt;br /&gt;
alfa = 0.05&lt;br /&gt;
x=np.ones(100)&lt;br /&gt;
x[56:]=0&lt;br /&gt;
Nboot=100000&lt;br /&gt;
A=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
    ankieta=randsample(x,1500)&lt;br /&gt;
    A[i]=np.sum(ankieta)/1500.0&lt;br /&gt;
lo = st.scoreatpercentile(A, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(A, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch) = py.hist(A,bins = biny )&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przykład z bootstrapem ==&lt;br /&gt;
Rozważmy sondę przedwyborczą, mamy dwóch kandydatów na prezydenta. Ankietowano 1500 osób. 840 osób deklarowało poparcie dla kandydata A zaś 660 dla kandydata B. Na ile pewny może być kandydat A swojego zwycięstwa?&lt;br /&gt;
* Jak dokładnie brzmi pytanie? W terminologii przedziałów ufności możemy je sformułować następująco: Jaki jest 95% przedział ufności dla poparcia kandydata A w całej populacji? Czy też innymi słowami: W jakim przedziale na 95% znajduje się proporcja glosujących popierających kandydata A.&lt;br /&gt;
* Nasze najlepsze mniemanie o własnościach &amp;amp;bdquo;świata&amp;amp;rdquo; z którego pochodzą dane otrzymujemy ze zwykłej proporcji. Wynika z niej, że kandydat A ma poparcie 56% zaś kandydat B poparcie 44%  wyborców.&lt;br /&gt;
* Przypiszmy do kandydata A &amp;amp;bdquo;1&amp;amp;rdquo; zaś do B &amp;amp;bdquo;0&amp;amp;rdquo; (w ten sposób tworzymy zmienną losową: oddany głos).&lt;br /&gt;
* Pobranie ankiety modelujemy przez pobranie losowo 1500 próbek z modelu naszego &amp;amp;bdquo;świata&amp;amp;rdquo; czyli wektora złożonego z 56 jedynek i 44 zer. Wynikiem jednej ankiety jest proporcja popierających kandydata A (lub B)&lt;br /&gt;
* Zbieramy rozkład proporcji - musimy w tym celu &amp;amp;bdquo;przeprowadzić&amp;amp;rdquo; wielokrotnie ankietę. Narysujmy histogram. &lt;br /&gt;
* Chcemy znaleźć 95% przedział ufności musimy znaleźć kwantyl 2,5 oraz 97,5.&lt;br /&gt;
Liczby te stanowią poszukiwany przedział ufności. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
x=np.ones(100)&lt;br /&gt;
x[56:]=0&lt;br /&gt;
Nboot=10000&lt;br /&gt;
A=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
    ankieta=randsample(x,1500)&lt;br /&gt;
    A[i]=np.sum(ankieta)/1500.0&lt;br /&gt;
lo = st.scoreatpercentile(A, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(A, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+11*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch) = py.hist(A,bins = biny )&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zadania ==&lt;br /&gt;
=== Przyrost masy w nowej diecie ===&lt;br /&gt;
Producent karmy dla zwierząt chciał przetestować nowy rodzaj karmy. Próbki podawał 12 zwierzakom przez 4 tygodnie. Po tym czasie zanotował następujące przyrosty masy:&lt;br /&gt;
&lt;br /&gt;
15.43, 16.92, 14.43, 12.94, 15.92, 17.42, 18.91, 16.92, 14.93, 14.49, 15.92, 15.43 kg&lt;br /&gt;
&lt;br /&gt;
średni przyrost wynosi 15.80 kg. Producent widzi jednak, że w próbie jest dość znaczny rozrzut pomiędzy poszczególnymi zwierzętami 12,94-18,91 i nie jest pewien czy można reklamować nowy produkt podając średni przyrost 15,8 kg. Podejrzewa, że inna grupa zwierząt może mieć zupełnie inną średnią. &lt;br /&gt;
* Używając powyższych danych znajdź 95% przedział ufności na średni przyrost masy.&lt;br /&gt;
* Wynik zilustruj przy pomocy histogramu.&lt;br /&gt;
* Jaki byłby wynik przy założeniu, że masy zwierząt pochodzą z rozkładu normalnego?&lt;br /&gt;
&lt;br /&gt;
''Odp:''&lt;br /&gt;
: zakładając, że ''x'' pochodzi z rozkładu normalnego:&lt;br /&gt;
: [14,80  16,81];&lt;br /&gt;
: bootstrap: 14,94-16,67.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.array([15.43, 16.92, 14.43, 12.94, 15.92, 17.42, 18.91, 16.92, 14.93, 14.49, 15.92, 15.43])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xsr=X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;średnia&amp;quot;,Xsr)&lt;br /&gt;
&lt;br /&gt;
M=np.zeros(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=xb.mean()&lt;br /&gt;
&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=Xsr,scale=s/N**0.5)&lt;br /&gt;
print('przedzial ufnosci z założenia o normalności: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
szer_binu = (hi-lo)/10&lt;br /&gt;
biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
(n,x,patch)=py.hist(M,bins=biny)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zawartość aluminium w Tebańskich naczyniach. ===&lt;br /&gt;
Zawartość procentowa aluminium w 18 antycznych naczyniach z Teb była następująca:&amp;lt;br/&amp;gt;&lt;br /&gt;
11.4, 13.4, 13.5, 13.8, 13.9, 14.4, 14.5, 15, 15.1, 15.8, 16, 16.3, 16.5, 16.9, 17, 17.2, 17.5, 19.0&amp;lt;br/&amp;gt;&lt;br /&gt;
Jaka jest mediana procentowej zawartości aluminium i jaki jest 95% przedział ufności?&lt;br /&gt;
&lt;br /&gt;
''Odp'':&lt;br /&gt;
:mediana 15,45 i przedział ufności: 14,20 16,70.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.array([11.4, 13.4, 13.5, 13.8, 13.9, 14.4, 14.5, 15, 15.1, 15.8, 16, 16.3, 16.5, 16.9, 17, 17.2, 17.5, 19.0])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xmed=np.median(X)&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;mediana probki&amp;quot;,Xmed)&lt;br /&gt;
&lt;br /&gt;
M=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=np.median(xb)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla mediany (z bootstrapu): %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(M,bins=10)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
py.show()&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Średnica drzew ===&lt;br /&gt;
Ogrodnik eksperymentuje z nowym gatunkiem drzew. Posadził 20 sztuk i po dwóch latach zmierzył następujące średnice pni (w cm):&lt;br /&gt;
8.5, 7.6, 9.3, 5.5, 11.4, 6.9, 6.5, 12.9, 8.7, 4.8, 4.2, 8.1, 6.5, 5.8, 6.7, 2.4, 11.1, 7.1, 8.8, 7.2&lt;br /&gt;
* Proszę znaleźć średnią średnicę i 90% przedział ufności dla średniej.&lt;br /&gt;
* Proszę znaleźć medianę i 90% przedział ufności dla mediany.&lt;br /&gt;
* Obydwa wyniki zilustrować przy pomocy histogramów.&lt;br /&gt;
''Odp:''&lt;br /&gt;
: średnia: 7,50 i przedzial ufnosci dla średniej: [6,61  8,41];&lt;br /&gt;
: mediana 7,15 i przedzial ufnosci dla mediany: [6,50  8,50].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source  lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_przedzialem(x,hi,lo):&lt;br /&gt;
	szer_binu = (hi-lo)/10	&lt;br /&gt;
	biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
	(n,bin_x,patch) = py.hist(x,bins = biny );&lt;br /&gt;
	py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
	py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
X=np.array([8.5, 7.6, 9.3, 5.5, 11.4, 6.9, 6.5, 12.9, 8.7, 4.8, 4.2, 8.1, 6.5, 5.8, 6.7, 2.4, 11.1, 7.1, 8.8, 7.2])&lt;br /&gt;
&lt;br /&gt;
alfa = 0.1&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
print(&amp;quot;Średnia próbki&amp;quot;,np.mean(X))&lt;br /&gt;
print(&amp;quot;Mediana próbki&amp;quot;,np.median(X))&lt;br /&gt;
print(&amp;quot;Liczebność próbki&amp;quot;,N)&lt;br /&gt;
&lt;br /&gt;
Sr=np.empty(Nboot)&lt;br /&gt;
Med=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Med[i]=np.median(xb)&lt;br /&gt;
	Sr[i]=np.mean(xb)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Sr, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Sr, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla średniej: %(lo).3f - %(hi).3f'%{'lo':lo,'hi':hi})&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
hist_z_przedzialem(Sr,hi,lo)&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Med, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Med, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci dla mediany: %(lo).3f - %(hi).3f'%{'lo':lo,'hi':hi})&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
hist_z_przedzialem(Med,hi,lo)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Przedział ufności dla proporcji ===&lt;br /&gt;
W badaniach nad cholesterolem u ludzi stwierdzono, że w grupie 135 badanych z wysokim poziomem cholesterolu 10 osób przeszło zawał serca. &lt;br /&gt;
&lt;br /&gt;
''Pytanie'': Jaki jest 95% przedział ufności dla proporcji 10/135?  &lt;br /&gt;
&lt;br /&gt;
* Proszę wykorzystać metodę bootstrapu.&lt;br /&gt;
* Proszę wykorzystać rozkład dwumianowy.&lt;br /&gt;
&lt;br /&gt;
''Odp'': proporcja 10/135 = 0,07 i jej 95% przedział ufności [0,03 0,12].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.zeros(135)&lt;br /&gt;
X[:10]=1&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=len(X)&lt;br /&gt;
&lt;br /&gt;
Proporcja=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Proporcja[i]=np.sum(xb)/N&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Proporcja, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Proporcja, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(Proporcja,bins=np.arange(0,1,1/135)-1/270)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p=10/135&lt;br /&gt;
lo,hi = st.binom.ppf([alfa/2,1-alfa/2],N,p)/N&lt;br /&gt;
print('przedzial ufnosci z rozkładu dwumianowego: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bezrobotni ===&lt;br /&gt;
W próbce 200 osób 7 procent jest bezrobotnych. Określić 95% przedział ufności dla odsetka bezrobotnych w populacji.&lt;br /&gt;
&lt;br /&gt;
''Odp'': Średnia 7% i jej 95% przedział ufności [3,50 10,50].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
X=np.zeros(100)&lt;br /&gt;
X[:7]=1&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
N=200&lt;br /&gt;
&lt;br /&gt;
Proporcja=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	Proporcja[i]=np.sum(xb)/N*100 #chcemy procenty i dlatego mnożymy przez 100&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(Proporcja, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(Proporcja, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
(n,x,patch)=py.hist(Proporcja,bins=30)&lt;br /&gt;
py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
p=7/100&lt;br /&gt;
lo,hi = st.binom.ppf([alfa/2,1-alfa/2],N,p)/N*100&lt;br /&gt;
print('przedzial ufnosci z rozkładu dwumianowego: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Żywotność baterii ===&lt;br /&gt;
W próbce 20 testowanych baterii stwierdzono średni czas życia 28,85 miesiąca. Określić 95% przedział ufności dla średniej. Wartości dla badanej próbki były następujące:&amp;lt;br&amp;gt;&lt;br /&gt;
30, 32, 31, 28, 31, 29, 29, 24, 30, 31, 28, 28, 32, 31, 24, 23, 31, 27, 27, 31 miesięcy&amp;lt;br&amp;gt;&lt;br /&gt;
Obejrzeć rozkład przy pomocy &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; i zbadać jaki wpływ na przedział ufności ma przyjęcie założenia o normalności rozkładu czasów życia.&lt;br /&gt;
&lt;br /&gt;
''Odp'': Średnia 28,85 i jej 95% przedział ufności [27,65 29,95].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x &lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, density=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Tu w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[:-1]+bins[1:])&lt;br /&gt;
	# wytwarzamy array z centrami binów korzystając z granic słupków&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej mi i wariancji sigma**2 dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_przedzialem(x,hi,lo):&lt;br /&gt;
	szer_binu = (hi-lo)/10	&lt;br /&gt;
	biny = np.arange(lo-10*szer_binu, hi+10*szer_binu, szer_binu)&lt;br /&gt;
	(n,bin_x,patch) = py.hist(x,bins = biny );&lt;br /&gt;
	py.plot([lo, lo] , [0, np.max(n)] ,'r' )&lt;br /&gt;
	py.plot([hi,hi],[0, np.max(n)],'r')&lt;br /&gt;
&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x &lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, density=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Tu w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
 &lt;br /&gt;
	bincenters = 0.5*(bins[:-1]+bins[1:])&lt;br /&gt;
	# wytwarzamy array z centrami binów korzystając z granic słupków&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej mi i wariancji sigma**2 dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię&lt;br /&gt;
&lt;br /&gt;
X=np.array([30, 32, 31, 28, 31, 29, 29, 24, 30, 31, 28, 28, 32, 31, 24, 23, 31, 27, 27, 31])&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Średnia próbki&amp;quot;,np.mean(X))&lt;br /&gt;
&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
Nboot=int(1e5)&lt;br /&gt;
&lt;br /&gt;
Xsr=X.mean()&lt;br /&gt;
s=X.std(ddof=1)&lt;br /&gt;
N=len(X)&lt;br /&gt;
&lt;br /&gt;
M=np.empty(Nboot)&lt;br /&gt;
for i in range(Nboot):&lt;br /&gt;
	xb=randsample(X,N)&lt;br /&gt;
	M[i]=xb.mean()&lt;br /&gt;
&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2,1-alfa/2],df=N-1,loc=Xsr,scale=s/N**0.5)&lt;br /&gt;
print('przedzial ufnosci z założenia o normalności: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
&lt;br /&gt;
lo = st.scoreatpercentile(M, per = alfa/2*100)&lt;br /&gt;
hi = st.scoreatpercentile(M, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedzial ufnosci z bootstrapu: %(lo).3f - %(hi).3f\n'%{'lo':lo,'hi':hi})&lt;br /&gt;
hist_z_przedzialem(M,hi,lo)&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
histfit(M,20)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pomiary ===&lt;br /&gt;
Mamy 10 pomiarów pewnej wielkości:&amp;lt;br&amp;gt;&lt;br /&gt;
0.02, 0.026, 0.023, 0.017, 0.022, 0.019, 0.018, 0.018, 0.017, 0.022&amp;lt;br&amp;gt;&lt;br /&gt;
Proszę znaleźć średnią i 95% przedział ufności.&lt;br /&gt;
&lt;br /&gt;
''Odp'':Średnia 0,020 i jej 95% przedział ufności [0,0185 0,0220].&lt;br /&gt;
&lt;br /&gt;
Czy pomiarów jest wystarczająco dużo aby sensownie wyznaczyć średnią i przedział ufności?&lt;br /&gt;
&lt;br /&gt;
''Wskazówka'': Obliczyć średnie dla 1 000 000 powtórzeń i obejrzeć histogramy dla 10, 20, 30, 100, i 200 przedziałów.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def randsample(x):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = n)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
dane = np.array([0.02, 0.026, 0.023, 0.017, 0.022, 0.019, 0.018, 0.018, 0.017, 0.022]);&lt;br /&gt;
&lt;br /&gt;
N_rep = 1000000&lt;br /&gt;
srednie = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	proba = randsample(dane)&lt;br /&gt;
	srednie[i] = np.mean(proba)&lt;br /&gt;
&lt;br /&gt;
ci_d = st.scoreatpercentile(srednie, 2.5)&lt;br /&gt;
ci_g = st.scoreatpercentile(srednie, 97.5)&lt;br /&gt;
print('Średnia %(prop).4f i jej 95proc. przedział ufności [%(d).4f %(g).4f]'%{'prop':np.mean(dane),'d':ci_d, 'g': ci_g})&lt;br /&gt;
py.subplot(5,1,1)&lt;br /&gt;
py.hist(srednie,10)&lt;br /&gt;
py.subplot(5,1,2)&lt;br /&gt;
py.hist(srednie,20)&lt;br /&gt;
py.subplot(5,1,3)&lt;br /&gt;
py.hist(srednie,30)&lt;br /&gt;
py.subplot(5,1,4)&lt;br /&gt;
py.hist(srednie,100)&lt;br /&gt;
py.subplot(5,1,5)&lt;br /&gt;
py.hist(srednie,200)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8540</id>
		<title>WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8540"/>
		<updated>2021-02-18T10:21:30Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadanie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pojęcia wstępne==&lt;br /&gt;
=== Zmienna losowa===&lt;br /&gt;
;Intuicyjnie: Zmienna losowa to taka zmienna, która przyjmuje pewną konkretną wartość w wyniku przeprowadzenia pomiaru lub eksperymentu. Na przykład zmienną losową jest liczba oczek, która wypada na kostce do gry. Dopóki trzymamy kostkę w ręce to nie wiemy jaką wartość ta zmienna przyjmie, konkretną wartość zmienna ta przyjmuje po rzucie. Jednak w kolejnych rzutach nie wiemy jakie będą jej wartości. &lt;br /&gt;
;Bardziej formalnie:  Zmienna losowa to funkcja przypisująca zdarzeniom elementarnym liczby.&lt;br /&gt;
;Zupełnie formalnie:&lt;br /&gt;
Do formalnej definicji potrzebne jest nam pojęcie przestrzeni probabilistycznej:&lt;br /&gt;
Przestrzeń probabilistyczna to układ trzech elementów &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;, gdzie:&lt;br /&gt;
* &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; jest pewnym zbiorem, zwanym przestrzenią zdarzeń elementarnych,&lt;br /&gt;
* &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest [http://pl.wikipedia.org/wiki/Sigma-ciało &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciałem] podzbiorów zbioru &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;. Elementy tego &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciała nazywane są zdarzeniami losowymi,&lt;br /&gt;
* &amp;lt;math&amp;gt;P: F\rightarrow [0,1]&amp;lt;/math&amp;gt; jest miarą probabilistyczną, tzn.&lt;br /&gt;
** &amp;lt;math&amp;gt;P(A) \ge 0 &amp;lt;/math&amp;gt; dla każdego &amp;lt;math&amp;gt;A \in F&amp;lt;/math&amp;gt;,&lt;br /&gt;
** &amp;lt;math&amp;gt;P(\Omega) = 1&amp;lt;/math&amp;gt;,&lt;br /&gt;
** jeżeli zbiory &amp;lt;math&amp;gt;A_1, A_2,\dots,A_n \in F&amp;lt;/math&amp;gt;  są parami rozłączne, to &amp;lt;math&amp;gt;P\left( \bigcup\limits_{i=1}^{\infty} A_i \right ) = \sum_{i=1}^{\infty} P(A_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Niech  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt; będzie przestrzenią probabilistyczną. '''Zmienną losową''' nazywamy dowolna funkcję &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, określoną na przestrzeni zdarzeń elementarnych &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;, o wartościach ze zbioru liczb rzeczywistych i [http://pl.wikipedia.org/wiki/Funkcja_mierzalna mierzalną] względem przestrzeni  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;. Zmienna losowa jest ciągła jeśli jej zbiór wartości jest ciągły, lub dyskretna, jeśli jej zbiór wartości jest dyskretny.&lt;br /&gt;
&lt;br /&gt;
=== Rozkład prawdopodobieństwa===&lt;br /&gt;
Rozkład prawdopodobieństwa &amp;amp;mdash; (rozkład zmiennej losowej) miara probabilistyczna określona na &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciele podzbiorów zbioru wartości zmiennej losowej, pozwalająca przypisywać prawdopodobieństwa zbiorom wartości tej zmiennej, odpowiadającym zdarzeniom losowym.&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej dyskretnej możemy wprowadzić pojęcie '''funkcji prawdopodobieństwa''':&lt;br /&gt;
&amp;lt;math&amp;gt;P(X=x_i) = p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Przykład: Dla rzutów monetą funkcję prawdopodobieństwa można zobrazować jako tabelkę:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
! Zdarzenie:&lt;br /&gt;
! orzeł&lt;br /&gt;
! reszka&lt;br /&gt;
|-&lt;br /&gt;
|zmienna losowa&lt;br /&gt;
|&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
| prawdopodobieństwo&lt;br /&gt;
| &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; &lt;br /&gt;
| 1/2&lt;br /&gt;
| 1/2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Można też przedstawić ją na wykresie:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta_1.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej ciągłej zamiast funkcji prawdopodobieństwa wprowadzamy '''funkcję gęstości prawdopodobieństwa'''. Jest to funkcja określona na zbiorze liczb rzeczywistych posiadająca następujące własności:&lt;br /&gt;
* jest nieujemna: &amp;lt;math&amp;gt;f(x) \ge 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
* prawdopodobieństwo tego, że zmienna losowa przyjmie wartość z przedziału &amp;lt;math&amp;gt;(a,b]&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; \int_a^b f(x) dx = P(a&amp;lt;X \le b) &amp;lt;/math&amp;gt;&lt;br /&gt;
[[Plik:Funkcja_gestosci_prawdopodobienstwa.png]]&lt;br /&gt;
* Prawdopodobieństwo tego, że zmienna losowa przyjmie dowolną wartość: &amp;lt;math&amp;gt; \int_{-\infty}^{+\infty} f(x) dx = P(-\infty &amp;lt;X \le +\infty) = 1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dystrybuanta ===&lt;br /&gt;
Dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy funkcję &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; określoną na zbiorze liczb rzeczywistych jako:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = P(X \le x)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
czyli wartość dystrybuanty w punkcie &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; jest prawdopodobieństwem, że zmienna losowa przyjmie wartość nie większą niż &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Dla zmiennej dyskretnej:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x)=P(X \le x) = \sum_{x_i&amp;lt;x}{P(X = x_i) } =  \sum_{x_i&amp;lt;x}p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla zmiennej losowej ciągłej z funkcją gęstości prawdopodobieństwa &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = P(X \le x)= \int_{-\infty}^x f(s) ds &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zauważmy ścisły związek dystrybuanty z funkcją prawdopodobieństwa w przypadku dyskretnym i funkcją gęstości prawdopodobieństwa w przypadku ciągłym.&lt;br /&gt;
&lt;br /&gt;
Przykład z monetą:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Momenty ===&lt;br /&gt;
Dla zmiennej losowej można obliczyć momenty zwykłe lub centralne. &lt;br /&gt;
&lt;br /&gt;
;Moment zwykły: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi tej zmiennej. Oblicza się go tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;m_k = E(X^k) =   \sum_{i} {x_i^k p_i}  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; oznacza prawdopodobieństwo, że &amp;lt;math&amp;gt;X = x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt; m_k = E(X^k) =  \int\limits_{-\infty}^{\infty} {x^k f(x)dx}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; jest funkcją gęstości prawdopodobieństwa.&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że pierwszy moment zwykły to średnia.&lt;br /&gt;
&lt;br /&gt;
;Moment centralny: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi funkcji &amp;lt;math&amp;gt;[x_i - E(x_i)]&amp;lt;/math&amp;gt;. Zatem możemy go obliczyć tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left( \left[ X-E(X) \right] ^k \right) =   \sum_{i} {\left[x_i-E(X)\right]^k p_i}  &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left(\left[X-E(X)\right]^k\right) =  \int\limits_{-\infty}^{\infty} {  \left[X-E(X)\right]^k f(x)dx}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uwaga:&lt;br /&gt;
* Drugi moment centralny ma swoją nazwę. Jest to '''wariancja''', często oznaczana przez &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Trzeci moment centralny przydaje się do badania symetrii rozkładu. Przyjmuje on wartość 0 dla zmiennych o rozkładzie symetrycznym, wartości ujemne dla zmiennych o rozkładzie wydłużonym w lewą stronę i wartości dodatnie dla zmiennych o rozkładzie wydłużonym w prawą stronę.  &lt;br /&gt;
* Czwarty moment centralny jest przydatny do konstrukcji miary spłaszczenia rozkładu zmiennej losowej '''kurtozy'''. Definiuje się ją następująco:&lt;br /&gt;
: &amp;lt;math&amp;gt; \mathrm{Kurt} = \frac{\mu_4}{\mu_2^4} - 3 &amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkłady prawdopodobieństwa można podzielić ze względu na wartość kurtozy na rozkłady:&lt;br /&gt;
* mezokurtyczne &amp;amp;mdash; wartość kurtozy wynosi 0, spłaszczenie rozkładu jest podobne do spłaszczenia rozkładu normalnego (dla którego kurtoza wynosi dokładnie 0)&lt;br /&gt;
* leptokurtyczne &amp;amp;mdash; kurtoza jest dodatnia, wartości cechy bardziej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
* platokurtyczne &amp;amp;mdash; kurtoza jest ujemna, wartości cechy mniej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
&lt;br /&gt;
=== Kwantyle ===&lt;br /&gt;
Kwantylem rzędu ''p'', gdzie &amp;lt;math&amp;gt;0 \leqslant p \leqslant 1&amp;lt;/math&amp;gt;, w rozkładzie empirycznym &amp;lt;math&amp;gt; P_{X} &amp;lt;/math&amp;gt;  zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy każdą liczbę &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt;, dla której spełnione są nierówności&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X((-\infty, x_p]) \geqslant p&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
oraz&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X([x_p,\infty)) \geqslant 1-p.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W szczególności, kwantylem rzędu ''p'' jest taka wartość &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; zmiennej losowej, że wartości mniejsze lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej ''p'', zaś wartości większe lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej 1&amp;amp;minus;''p''.&lt;br /&gt;
&lt;br /&gt;
Możemy zatem myśleć o obliczaniu kwantyla tak:&lt;br /&gt;
* zaobserwowaliśmy ''n'' wartości zmiennej losowej,&lt;br /&gt;
* zapiszemy te wartości na liście,&lt;br /&gt;
* następnie listę tę sortujemy w porządku rosnącym,&lt;br /&gt;
* kwantylem rzędu ''p'' jest albo element znajdujący się na liście w pozycji ''np'' jeśli ''np'' jest całkowite albo średnią z elementów położonych najbliżej ''np'' w przeciwnym wypadku.  &lt;br /&gt;
==== Nazwy poszczególnych kwantyli ====&lt;br /&gt;
Kwantyl rzędu 1/2 to inaczej mediana (ściślej zależy to od definicji mediany, przy jej obliczaniu z próbki o parzystej liczbie elementów często stosuje się średnią arytmetyczną dwóch środkowych elementów, szczegóły są w artykule).&amp;lt;br/&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/4, 2/4, 3/4 są inaczej nazywane kwartylami. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/5, 2/5, 3/5, 4/5 to inaczej kwintyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/10, 2/10, ..., 9/10 to inaczej decyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/100, 2/100, ..., 99/100 to inaczej percentyle. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pseudolosowość==&lt;br /&gt;
W obliczeniach numerycznych często korzystamy z liczb &amp;amp;bdquo;losowych&amp;amp;rdquo;. Tak naprawdę sekwencje liczb, których używamy są jedynie pseudolosowe, &lt;br /&gt;
tzn. są wytwarzane w deterministyczny (algorytmiczny) sposób, ale sekwencja generowanych wartości ma pewne cechy losowości. W idealnym przypadku cechą tą jest nieprzewidywalność: na podstawie obserwacji dotychczasowych wartości sekwencji niemożliwe jest podanie kolejnych wartości. W praktyce oznacza to nie możność ustalenie ziarna lub stanu wewnętrznego generatora na podstawie obserwacji dowolnie długiego ciągu wygenerowanych bitów.&lt;br /&gt;
Stan generatora przechowywany jest na zmiennych o skończonej precyzji. Jeśli stan jest przechowywany na &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; bitach to górną granicą na długość unikalnego ciągu liczb jest &amp;lt;math&amp;gt;2^n&amp;lt;/math&amp;gt;. Zazwyczaj unikalna sekwencja jest jednak krótsza. Wynika stąd, że  generatory liczb pseudolosowych mają  okres, po którym sekwencja liczb powtarza się. Podstawowe generatory liczb pseudolosowych wytwarzają liczby podlegające rozkładowi jednostajnemu (płaskiemu).&lt;br /&gt;
&lt;br /&gt;
Istnieją generatory &amp;amp;bdquo;prawdziwych&amp;amp;rdquo; liczb losowych, które są osobnymi urządzeniami. Liczy przez nie dostarczane są pewnymi parametrami jakichś procesów fizycznych, przebiegających w tych urządzeniach (zależnie od producenta). Do naszych zastosowań w zupełności wystarczą liczby generowane przez algorytmy komputerowe.&lt;br /&gt;
&lt;br /&gt;
Proste generatory liczb pseudolosowych można otrzymać jako funkcje używające operacji dzielenia modulo (generatory kongruencyjne):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{n+1}=f(x_n,x_{n-1}, ..., x_{n-k})\mod M&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zakładamy, że argumentami funkcji &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; są liczby całkowite ze zbioru &amp;lt;math&amp;gt;{0, 1, ...,M-1}&amp;lt;/math&amp;gt;. Dla ustalenia uwagi mogą to być generatory liniowe typu: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; x_{n+1}= (ax_{n} + c )\mod M&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład generatora liniowego ===&lt;br /&gt;
Dla przykładu zaimplementujmy jeden taki generator:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N=1):&lt;br /&gt;
    '''Przykład generatora liniowego. &lt;br /&gt;
       funkcja zwraca liczby pseudolosowe z przedziału [0,1)&lt;br /&gt;
       x - ziarno, &lt;br /&gt;
       N - ile liczb zwrócić'''&lt;br /&gt;
    m=8191&lt;br /&gt;
    a=101&lt;br /&gt;
    c=1731&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i]= x/m&lt;br /&gt;
    return y    &lt;br /&gt;
x=gen(23,100000)&lt;br /&gt;
py.hist(x)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Liczby &amp;lt;tt&amp;gt; m, a, c&amp;lt;/tt&amp;gt; są parametrami generatora. Liczba &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;, od której startuje generator nazywana jest ziarnem generatora {{ang|seed}}.&lt;br /&gt;
Funkcja &amp;lt;tt&amp;gt;py.hist()&amp;lt;/tt&amp;gt; zlicza i wyrysowuje histogram (czy wiemy co to jest histogram?).&lt;br /&gt;
* Wywołaj funkcję &amp;lt;tt&amp;gt;gen&amp;lt;/tt&amp;gt; dla tego samego ziarna kilka razy zaobserwuj powtarzalność wartości.&lt;br /&gt;
&lt;br /&gt;
W module &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; mamy do dyspozycji generator liczb pseudolosowych oparty na algorytmie [http://pl.wikipedia.org/wiki/Mersenne_Twister  Mersenne Twister ]&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
kod demonstrujacy pseudolosowosc&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import numpy as np&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(5)&lt;br /&gt;
&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
y=np.random.random(5)&lt;br /&gt;
print('x:', x)&lt;br /&gt;
print('y:', y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Zaobserwuj powtarzalność wartości.&lt;br /&gt;
* Wygeneruj i wykreśl 200 kolejnych liczb pseudolosowych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(200)&lt;br /&gt;
&lt;br /&gt;
py.plot(x,'.')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testy jakości===&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Dla wyżej wymienionych generatorów, proszę wykonać następujące testy:&lt;br /&gt;
* zobrazować rozkład prawdopodobieństwa (narysować histogram);&lt;br /&gt;
&amp;lt;!-- Tymczasowo wylaczane przez RK 14.02.2013 * test zgodności momentów &amp;amp;mdash; czy momenty obliczone dla wygenerowanych liczb są takie jak przewiduje teoria;--&amp;gt;&lt;br /&gt;
* test korelacji na rysunku: sporządzić wykres gdzie na jednej osi są wartości &amp;lt;math&amp;gt;x_n&amp;lt;/math&amp;gt; na drugiej zaś wartości &amp;lt;math&amp;gt;x_{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Tymczasowo wylaczone przez RK 14.02.2013 # momenty dla rozkładu jednostajnego [0, 1]&lt;br /&gt;
# mu = 0.5&lt;br /&gt;
# var = 1/12&lt;br /&gt;
# kurtoza -6/5&lt;br /&gt;
mu=np.mean(x)&lt;br /&gt;
var = np.sum((x - mu)**2)/N&lt;br /&gt;
kurtoza = np.sum((x-mu)**4)/N/var**2-3&lt;br /&gt;
print u'wartości teoretyczne:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':0.5,'v':1.0/12,'k':-6.0/5}&lt;br /&gt;
print u'wartości z próby:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':mu,'v':var,'k':kurtoza} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N):&lt;br /&gt;
    m=8765132137&lt;br /&gt;
    a=42347&lt;br /&gt;
    c=1731&lt;br /&gt;
&lt;br /&gt;
    ## warto porównać wynik dla poniższych parametrów&lt;br /&gt;
    #m=8191&lt;br /&gt;
    #a=101&lt;br /&gt;
    #a=107&lt;br /&gt;
&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i] = x/m&lt;br /&gt;
    return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=10000&lt;br /&gt;
x=gen(23,N)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.hist(x,30,normed = True)&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(x[:-1],x[1:],'.')&lt;br /&gt;
py.xlabel('x_n')&lt;br /&gt;
py.ylabel('x_{n+1}')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Bardziej wyczerpujące baterie testów jakości generatorów można znaleźć na przykład w:&lt;br /&gt;
* http://csrc.nist.gov/groups/ST/toolkit/rng/index.html&lt;br /&gt;
* http://www.phy.duke.edu/~rgb/General/rand_rate.php&lt;br /&gt;
&lt;br /&gt;
== Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; ==&lt;br /&gt;
=== Wstęp ===&lt;br /&gt;
Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; są zaimplementowane jako dwie klasy: &amp;lt;tt&amp;gt;stats.rv_continuous&amp;lt;/tt&amp;gt;  (bazuje na niej ponad 80 typów rozkładów ciągłych zmiennych losowych) i &amp;lt;tt&amp;gt;stats.rv_discrete&amp;lt;/tt&amp;gt; (bazuje na niej 10 typów rozkładów dyskretnych zmiennych losowych). Aktualną listę dostępnych rozkładów można uzyskać np. przy pomocy następującego skryptu:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
from scipy import stats&lt;br /&gt;
dc= [d for d in dir(stats) if isinstance(getattr(stats,d), stats.rv_continuous)]&lt;br /&gt;
print(dc)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Przykładowo: zmienne losowe o rozkładzie normalnym są reprezentowane przez klasę &amp;lt;tt&amp;gt;norm&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Funkcje przydatne do pracy ze zmiennymi losowymi dostępne są jako metody ===&lt;br /&gt;
&lt;br /&gt;
Obiekty reprezentujące zmienne losowe podlegające konkretnym rozkładom posiadają następujące metody:&lt;br /&gt;
* &amp;lt;tt&amp;gt;rvs&amp;lt;/tt&amp;gt;: '''generator zmiennych losowych''' danego typu;&lt;br /&gt;
* &amp;lt;tt&amp;gt;cdf&amp;lt;/tt&amp;gt;: '''dystrybuanta''' (ang. Cumulative Distribution Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;ppf&amp;lt;/tt&amp;gt;: '''funkcja odwrotna do dystrybuanty''' (ang. Percent Point Function (Inverse of CDF));&lt;br /&gt;
* &amp;lt;tt&amp;gt;stats&amp;lt;/tt&amp;gt;: zwraca '''momenty centralne rozkładu''' (średnią, wariancję, skośność i kurtozę);&lt;br /&gt;
* &amp;lt;tt&amp;gt;moment&amp;lt;/tt&amp;gt;: zwraca niecentralne momenty rozkładu.&lt;br /&gt;
* &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt;: '''funkcja gęstości prawdopodobieństwa''' (ang. Probability Density Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;pmf&amp;lt;/tt&amp;gt; dla rozkładów dyskretnych  &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt; jest zamienione na '''funkcję prawdopodobieństwa''' (ang. probability mass function; ''masa'' przez analogię z gęstością masy i masą punktową);&lt;br /&gt;
* &amp;lt;tt&amp;gt;sf&amp;lt;/tt&amp;gt;: funkcja przeżycia (ang. Survival Function) (1&amp;amp;minus;CDF);&lt;br /&gt;
* &amp;lt;tt&amp;gt;isf&amp;lt;/tt&amp;gt;: funkcja odwrotna do funkcji przetrwania (ang. Inverse Survival Function (Inverse of SF));&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Zobaczmy działanie tych metod dla zmiennych losowych z rozkładu normalnego:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
x = st.norm.rvs(size=10000)&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
py.hist(x,bins=bins)&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zmienne losowe mogą być używane na jeden z dwóch sposobów: można podawać wszystkie parametry opisujące rozkład w każdym wywołaniu metody, albo wytworzyć obiekt reprezentujący rozkład o konkretnych parametrach (w dokumentacji &amp;lt;tt&amp;gt;scipy&amp;lt;/tt&amp;gt; jest to nazywane zamrażaniem parametrów rozkładu, ang. ''freezing'')&lt;br /&gt;
Jako przykład zobaczmy funkcję odwrotną do dystrybuanty rozkładu normalnego N(2, 9): &lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; import scipy.stats as st&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.norm.ppf(0.05, loc=2, scale=3))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; my_norm = st.norm(loc=2,scale=3)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(my_norm.ppf(0.05))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
&lt;br /&gt;
=== Pomoc do poszczególnych rozkładów ===&lt;br /&gt;
Pełną dokumentację każdego rozkładu mamy dostępną w postaci docstringów. Dla przykładu:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
help(st.nct)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
wypisuje pełną informację z docstring o niecentralnym rozkładzie ''t''.&lt;br /&gt;
Podstawowe informacje można uzyskać wypisując treść pola &amp;lt;tt&amp;gt;extradoc&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.nct.extradoc)&lt;br /&gt;
 Non-central Student T distribution&lt;br /&gt;
 df**(df/2) * gamma(df+1)&lt;br /&gt;
 nct.pdf(x,df,nc) = --------------------------------------------------&lt;br /&gt;
 2**df*exp(nc**2/2)*(df+x**2)**(df/2) * gamma(df/2)&lt;br /&gt;
 for df &amp;gt; 0, nc &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Wypisz pomoc dla (centralnego) rozkładu ''t'' i sprawdź jakie parametry on przyjmuje. Wybierz dowolnie ich wartości, a następnie posiłkując się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład|przykładem]]:&lt;br /&gt;
# Wygeneruj 10000 liczb z rozkładu ''t'' i narysuj ich histogram.&lt;br /&gt;
# Wykreśl gęstość prawdopodobieństwa tego rozkładu.&lt;br /&gt;
# Wykreśl dystrybuantę.&lt;br /&gt;
# Wykreśl funkcję odwrotną do dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=10000       # ile liczb generujemy&lt;br /&gt;
&lt;br /&gt;
# przykładowe parametry rozkładu&lt;br /&gt;
df = 3        # liczba stopni swobody&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
x = st.t.rvs(size=N, df=df)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;) #histtype=&amp;quot;step&amp;quot; daje nam przezroczysty histogram&lt;br /&gt;
x = st.norm.rvs(size=N)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.t.pdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y,'g')&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.t.cdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z,'g')&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
 &lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.t.ppf(os_p, df=df)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f,'g')&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
py.legend([&amp;quot;Rozkład t-Studenta&amp;quot;,&amp;quot;Rozkład normalny&amp;quot;])&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Statystyki i estymatory ===&lt;br /&gt;
Estymator jest statystyką służącą do szacowania pewnej wielkości (np. parametru) na podstawie próby losowej (np. danych eksperymentalnych). Na wykładzie poznaliśmy m.in. takie statystki jak [[WnioskowanieStatystyczne/Momenty|wartość oczekiwana, wariancja i mediana]], z których ostatnia jest szczególnym przypadkiem [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Kwantyle|kwantylu]]. Moduły numpy oraz scipy.stats umożliwiają łatwe estymowanie niektórych statystyk, a także obliczanie ich rzeczywistych wartości, jeśli znamy parametry rozkładu.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jako przykład niech posłuży poniższy kod, w którym szukamy wartości estymatorów wartości oczekiwanej oraz wariancji rozkładu normalnego na podstawie próby losowej, a wynik porównujemy z wartościami rzeczywistymi:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
m=2&lt;br /&gt;
s=0.5&lt;br /&gt;
rozklad = st.norm(m,s) #definiujemy rozkład normalny&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()  # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
var  = rozklad.var()   # rzeczywiste odchylenie standardow&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)  # estymowana wartość oczekiwana&lt;br /&gt;
var_est  = np.var(x)   # estymowana wariancja&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem wygeneruj próby losowe dla następujących rozkładów:&lt;br /&gt;
# Rozkład normalny &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; = 100, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; = 2.&lt;br /&gt;
# Rozkład dwumianowy p = 0.4, n =10.&lt;br /&gt;
# Rozkład poissona &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; = 4.&lt;br /&gt;
# Rozkład jednostajny na przedziale [2, 6).&lt;br /&gt;
Następnie estymuj na ich podstawie wartości poniższych statystyk i porównaj je z wartościami obliczonymi na podstawie znanych parametrów rozkładu:&lt;br /&gt;
# Wartość oczekiwana.&lt;br /&gt;
# Odchylenie standardowe.&lt;br /&gt;
# Wariancja.&lt;br /&gt;
# Mediana.&lt;br /&gt;
# Kurtoza.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
Poniżej znajduje się przykładowe rozwiązanie dla rozkładu dwumianowego. Aby uzyskać rozwiązanie dla pozostałych rozkładów wystarczy dostosować pierwszą część kodu, gdzie definiowany jest rozkład.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
n=10&lt;br /&gt;
p=0.4&lt;br /&gt;
rozklad = st.binom(n,p) #definiujemy nasz rozkład&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
# dalsza część jest jest niezależna od rodzaju rozkładu, który zdefiniowaliśmy powyżej&lt;br /&gt;
###########################################################################################&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()           # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
std  = rozklad.std()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
var  = rozklad.var()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
med  = rozklad.median()         # rzeczywista mediana&lt;br /&gt;
kurt = float(rozklad.stats('k'))# rzecz. kurtoza (funkcja zwraca jednoelementową tablicę&lt;br /&gt;
                                # numpy.ndarray, więc trzeba ją ręcznie zrzutować na float)&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)     # estymowana wartość oczekiwana&lt;br /&gt;
std_est  = np.std(x)      # estymowane odchylenie standardowe&lt;br /&gt;
var_est  = np.var(x)      # estymowana wariancja&lt;br /&gt;
med_est  = np.median(x)   # estymowana mediana&lt;br /&gt;
kurt_est = st.kurtosis(x) # estymowana kurtoza&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Odchylenie standardowe rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(std,std_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
print(&amp;quot;Mediana rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(med,med_est))&lt;br /&gt;
print(&amp;quot;Kurtoza rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(kurt,kurt_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generowanie zmiennych losowych podlegającym różnym rozkładom prawdopodobieństwa ==&lt;br /&gt;
Podstawowe typy generatorów liczb losowych wytwarzają liczby losowe podlegające rozkładowi jednostajnemu. Zastanowimy sie teraz jak mając zmienne losowe z rozkładu jednostajnego wytworzyć zmienne losowe o innych rozkładach.&lt;br /&gt;
=== Rozkład dwumianowy ===&lt;br /&gt;
Zmienna losowa, która zlicza liczbę sukcesów &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; próbach, gdzie &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest prawdopodobieństwem sukcesu w pojedynczej próbie, podlega rozkładowi dwumianowemu&lt;br /&gt;
[[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_dwumianowy więcej o rozkładzie dwumianowym]]: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_n(k)=\left(  &lt;br /&gt;
\begin{array}{c} &lt;br /&gt;
n \\&lt;br /&gt;
k&lt;br /&gt;
\end{array} &lt;br /&gt;
\right) p^kq^{n-k}=\frac{n!}{k!(n-k)!}p^kq^{n-k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Jak z rozkładu jednostajnego wytworzyć zmienne losowe o rozkładzie dwumianowym?''&lt;br /&gt;
* Wykonać symulację!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_binom(n,p,N):&lt;br /&gt;
	'''funkcja zwracająca zmienną losową z rozkładu dwumianowego: &lt;br /&gt;
	ilość sukcesów w n próbach przy prawdopodobieństwie sukcesu p&lt;br /&gt;
	parametry:&lt;br /&gt;
		n: liczba prób&lt;br /&gt;
		p: prawdopodobieństwo sukcesu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będącymi liczbami sukcesów&lt;br /&gt;
	'''&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję n liczb z rozkładu jednostajnego [0,1) i jako sukcesy&lt;br /&gt;
	#traktuję wylosowanie liczby nie większej niż p&lt;br /&gt;
	r=np.random.rand(N,n)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
n=20&lt;br /&gt;
N=100000&lt;br /&gt;
p=0.8&lt;br /&gt;
x = gen_binom(n,p,N)&lt;br /&gt;
bins =range(22) #granice binów&lt;br /&gt;
py.hist(x,bins)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Z oszacowań agencji wynika, że średnio 2 z 3 reklam spotyka się z pozytywnym odzewem. Akcja marketingowa obejmuje 12 reklam. Niech &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; oznacza liczbę reklam skutecznych. Czy &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi dwumianowemu?&lt;br /&gt;
Jakie jest prawdopodobieństwo, że 10 reklam będzie skutecznych?&lt;br /&gt;
Prawdopodobieństwo obliczyć ze wzoru oraz korzystając z symulacji.&lt;br /&gt;
&lt;br /&gt;
Wskazówka informacje o zmiennych z rozkładu dwumianowego (&amp;lt;tt&amp;gt;binom&amp;lt;/tt&amp;gt;) można uzyskać tak:&lt;br /&gt;
 # &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
 #   Binomial distribution&lt;br /&gt;
 #&lt;br /&gt;
 #   Counts the number of successes in *n* independent&lt;br /&gt;
 #   trials when the probability of success each time is *pr*.&lt;br /&gt;
 #&lt;br /&gt;
 #   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
 #   for k in {0,1,...,n}&lt;br /&gt;
Odp: ''p'' = 0,127&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
p=2/3 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n=12   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
&lt;br /&gt;
# ze wzoru &lt;br /&gt;
&lt;br /&gt;
# &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
#   Binomial distribution&lt;br /&gt;
#&lt;br /&gt;
#   Counts the number of successes in *n* independent&lt;br /&gt;
#   trials when the probability of success each time is *pr*.&lt;br /&gt;
#&lt;br /&gt;
#   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
#   for k in {0,1,...,n}&lt;br /&gt;
p_wz = st.binom.pmf(10,n,p)&lt;br /&gt;
print(p_wz)&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =100000 # liczba powtórzeń symulacji&lt;br /&gt;
k = np.zeros(N_powt)&lt;br /&gt;
for i in range(N_powt):&lt;br /&gt;
	r = rnd.random(size=n) # symulowana akcja reklamowa &lt;br /&gt;
	k[i]=np.sum(r&amp;lt;=p)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k==10)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Na egzaminie testowym jest 30 pytań. Na każde pytanie są podane cztery możliwe odpowiedzi, z czego tylko jedna jest prawdziwa. Za prawidłową odpowiedź student otrzymuje 1 punkt a za fałszywą &amp;amp;minus;0,5 punktu. Próg zaliczenia wynosi 15 punktów. Oblicz prawdopodobieństwo, że udzielając czysto losowych odpowiedzi student zaliczy egzamin.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
Liczba prawidłowych odpowiedzi w teście może być potraktowana jako liczba sukcesów k w n = 30 próbach. Prawdopodobieństwo sukcesu pojedynczego zdarzenia (prawidłowa odpowiedź na jedno pytanie) wynosi p = 1/4. Ze względu na obecność ujemnych punktów za fałszywe odpowiedzi zmienia się efektywna liczba punktów wymaganych do zaliczenia zgodnie z równaniem:&lt;br /&gt;
k-0.5*(30-k) = 15&lt;br /&gt;
co daje k = 20&lt;br /&gt;
Zatem problem redukuje się do wyznaczenia prawdopodobieństwa co najmniej 20 sukcesów w 30 próbach, przy czym prawdopodobieństwo sukcesu w 1 próbie wynosi p=1/4:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
p = 1./4 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n = 30   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
k_kryt = 20&lt;br /&gt;
# ze wzoru &lt;br /&gt;
p_wz = np.sum(st.binom.pmf(range(k_kryt,n+1),n,p))&lt;br /&gt;
print(p_wz)&lt;br /&gt;
&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =10000000 # liczba powtórzeń symulacji&lt;br /&gt;
r = np.random.random(size=(n,N_powt)) # symulowany test &lt;br /&gt;
k = np.sum(r&amp;lt;=p,0)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k&amp;gt;=20)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład Poissona ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(k)=\frac{\mu^k e^{-\mu}}{k!}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkładowi Poissona podlegają zmienne losowe zliczające w jednostce czasu liczbę zdarzeń o niskim prawdopodobieństwie zajścia. Np. liczba rozpadów promieniotwórczych na jednostkę czasu [[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_Poissona więcej o rozkładzie Poissona]]&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Lekarz pełniący dyżur w szpitalu jest wzywany do pacjentów średnio 3 razy w ciągu nocy. Załóżmy, że liczba wezwań na noc podlega rozkładowi Poissona. Jakie jest prawdopodobieństwo, że noc upłynie lekarzowi spokojnie?&lt;br /&gt;
U nas &amp;lt;math&amp;gt;\mu=3&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt; więc&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(0) = \frac{3^0e^{-3}}{0!} = e^{-3} = 0,0498&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jak ze zmiennych podlegających rozkładowi jednostajnemu uzyskać zmienne podlegające rozkładowi Poissona?&lt;br /&gt;
&lt;br /&gt;
Wykonać symulację wynikającą z następujących spostrzeżeń:&lt;br /&gt;
&lt;br /&gt;
* Weźmy jednostkę czasu. Ma w niej zachodzić średnio &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; zdarzeń. &lt;br /&gt;
* Podzielmy jednostkę czasu na ''NT'' odcinków o jednakowej długości. &lt;br /&gt;
* Prawdopodobieństwo, że zdarzenie zajdzie w konkretnym odcinku jest &amp;lt;math&amp;gt;p=\frac{\mu}{NT}&amp;lt;/math&amp;gt; Takie prawdopodobieństwo ma też wylosowanie przy pomocy generatora liczb z rozkładu jednostajnego [0,1) liczby nie większej niż ''p''. &lt;br /&gt;
* Zatem, aby wytworzyć jedną liczbę z rozkładu Poissona można policzyć ile spośród ''NT'' liczb z rozkładu jednostajnego [0,1) jest nie większych niż ''p''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
def gen_poiss(mi,NT,N):&lt;br /&gt;
	'''funkcja zwracająca zmienne losowe z rozkładu poissona: &lt;br /&gt;
	średnia ilość zdarzeń o niskim prawdopodobieństwie w jednostce czasu&lt;br /&gt;
	parametry:&lt;br /&gt;
		mi: średnia liczba zdarzeń&lt;br /&gt;
		NT: liczba odcinków czasu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będących zliczeniami zdarzeń&lt;br /&gt;
	'''&lt;br /&gt;
	p = float(mi)/NT&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję NT liczb z rozkładu jednostajnego [0,1) i jako zajście zdarzenia&lt;br /&gt;
	# traktuję wylosowanie liczby nie większej niż p. Ilość zdarzeń to liczba z rozkładu Poissona&lt;br /&gt;
	r=np.random.rand(N,NT)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
 &lt;br /&gt;
# kod testujący&lt;br /&gt;
mi=4&lt;br /&gt;
N=100000&lt;br /&gt;
NT = 10000&lt;br /&gt;
x = gen_poiss(mi,NT,N)&lt;br /&gt;
bins =np.arange(int(x.max()+1))-0.5&lt;br /&gt;
py.hist(x,bins,normed=True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# porównanie z generatorami scipy.stats&lt;br /&gt;
p=mi/NT&lt;br /&gt;
k=np.arange(x.max()+1)&lt;br /&gt;
B=st.binom.pmf(k,NT,p)&lt;br /&gt;
py.plot(k,B,'ro')&lt;br /&gt;
P=st.poisson.pmf(k,mi)&lt;br /&gt;
py.plot(k,P,'go')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład normalny i Centralne Twierdzenie Graniczne ===&lt;br /&gt;
Gęstość prawdopodobieństwa [[WnioskowanieStatystyczne/Rozklady-przyklady#Rozk.C5.82ad_Gaussa| rozkładu normalnego]] dana jest wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{ -\frac{(x-\mu)^2}{2 \sigma^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie: &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; &amp;amp;mdash; średnia, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; &amp;amp;mdash; odchylenie standardowe (&amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; &amp;amp;mdash; wariancja).&lt;br /&gt;
&lt;br /&gt;
Jeden ze  sposóbw wytwarzania zmiennych losowych o rozkładzie normalnym  polega na zastosowaniu [[WnioskowanieStatystyczne/CLT| Centralnego Twierdzenia Granicznego]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;X=\frac{\sqrt{12}}{\sqrt{N}}\left(\sum_{n=1}^N Y_n -\frac{N}{2}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; zmienna losowa z rozkładu jednostajnego &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;&lt;br /&gt;
W granicy dużych &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; rozkład zmiennej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; dąży do rozkładu normalnego &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt;, która zwraca liczbę losową ''X'' otrzymaną zgodnie powyższym wzorem  przez sumowanie &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt; liczb z rozkładu jednostajnego.&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG(N, N_liczb)&amp;lt;/tt&amp;gt; korzystającą z &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt; i zwracającą zadaną ilość liczb &amp;lt;tt&amp;gt;N_liczb&amp;lt;/tt&amp;gt;&lt;br /&gt;
* narysować histogramy 10 000 liczb &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; uzyskanych kolejno dla &amp;lt;math&amp;gt;N={1,2,...,12}&amp;lt;/math&amp;gt;&lt;br /&gt;
* Jakie parametry charakteryzują rozkład do którego zbiegają sumy? Przy każdym z powyższych histogramów wypisz średnią i wariancję z próby (funkcje &amp;lt;tt&amp;gt;np.mean&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;np.var&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
 &lt;br /&gt;
def gen_CTG_1(N):&lt;br /&gt;
	'''Funkcja generująca pojedynczą zmienną losową będącą sumą N liczb z rozkładu jednostajnego [0,1)&lt;br /&gt;
	pomnożoną przez czynnik normujący zapewniający wariancję równą 1.&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		jedną liczbę losową'''&lt;br /&gt;
	X = np.sqrt(12/N) * (np.sum(rnd.random(N)) - N/2)&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
def gen_CTG(N,N_liczb):&lt;br /&gt;
	'''Funkcja zwraca wektor (tablicę) zmiennych losowych będących sumami N liczb z rozkładu jednostajnego [0,1).&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
		N_liczb: ilość liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N_liczb losowych'''&lt;br /&gt;
&lt;br /&gt;
	X=np.zeros(N_liczb)&lt;br /&gt;
&lt;br /&gt;
	for i in range(N_liczb):&lt;br /&gt;
		X[i] = gen_CTG_1(N)&lt;br /&gt;
&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
Nmax=12&lt;br /&gt;
&lt;br /&gt;
for N in range(1,Nmax+1):&lt;br /&gt;
	X=gen_CTG(N,N_liczb)&lt;br /&gt;
	py.subplot(3,4,N)&lt;br /&gt;
	bins = np.arange(-4,4,0.1)&lt;br /&gt;
	py.hist(X,bins=bins,normed=True)&lt;br /&gt;
	py.title(&amp;quot;N=%i, µ=%.2g, σ²=%.2g&amp;quot;%(N, X.mean(), X.var(ddof=1)))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie: transformacja rozkładu normalnego ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozkład o średniej 0 i wariancji 1 (notacja  &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;) jest nazywany rozkładem standardowym i często jest oznaczany literą &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Dokonując odpowiedniej transformacji można z rozkładu &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; uzyskać dowolny inny rozkład normalny. &lt;br /&gt;
&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować 100000 zmiennych losowych z rozkładu &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.rvs(loc=0, scale=1, size=100000)&amp;lt;/tt&amp;gt;) &lt;br /&gt;
* przetransformować je do zmiennych losowych &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt;. &lt;br /&gt;
* narysować histogramy zmiennych przed i po transformacji.&lt;br /&gt;
* narysować rozkład gęstości prawdopodobieństwa dla rozkładu &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.pdf(...)&amp;lt;/tt&amp;gt;) .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
Z=st.norm.rvs(loc=0,scale=1,size=100000) #losowanie liczb z rozkładu N(0,1) (czyli Z)&lt;br /&gt;
&lt;br /&gt;
std=9&lt;br /&gt;
mu=2&lt;br /&gt;
X=Z*std+mu #transformacja do σ=9, µ=2&lt;br /&gt;
&lt;br /&gt;
szerokosc_binu=0.5&lt;br /&gt;
bins=np.arange(-40,40.5,szerokosc_binu) #te same granice binów dla obu histogramów&lt;br /&gt;
&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(Z,bins=bins,normed=True,label=&amp;quot;histogram przed transformacją&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(Z.mean(),Z.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(X,bins=bins,normed=True,label=&amp;quot;histogram po transformacji&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
PDF=st.norm.pdf(bins,loc=mu,scale=std) #modelowa gęstość prawdopodobieństwa dla σ=9, µ=2&lt;br /&gt;
py.plot(bins+szerokosc_binu/2,PDF,&amp;quot;ro&amp;quot;,label=&amp;quot;gęstość prawd.&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(X.mean(),X.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Transformacja Boxa-Mullera====&lt;br /&gt;
To inna popularna metoda  metoda generowania liczb losowych o rozkładzie normalnym, na podstawie dwóch wartości zmiennej o rozkładzie jednostajnym na przedziale [0,1) http://en.wikipedia.org/wiki/Box-Muller_transform,  ale nie będziemy się nią tu szerzej zajmować.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Producent silników twierdzi, że jego silniki mają średnią moc 220 KM, a odchylenie standardowe wynosi 15 KM. Potencjalny klient testuje 100 silników. Jakie jest prawdopodobieństwo, że średnia z próby będzie mniejsza niż 217 KM?&lt;br /&gt;
&lt;br /&gt;
Przypomnijmy, że z CTG dla dużych liczebności próby  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\bar x \sim N(\mu,\sigma^2/n)&amp;lt;/math&amp;gt; [[WnioskowanieStatystyczne/Statystyki_i_estymatory#Estymator_warto.C5.9Bci_oczekiwanej|(dowód)]]. Zatem szukamy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( Z&amp;lt;\frac{217-\mu}{\frac{\sigma}{ \sqrt{n}}} \right)  = P\left( Z&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}} \right)=P(Z&amp;lt;-2)=0,0228&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.norm.cdf(-2)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu normalnego: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
sig=15&lt;br /&gt;
N_prob=100&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e4)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadania====&lt;br /&gt;
Teraz kilka najprostszych zadań dotyczących rozkładu normalnego:&lt;br /&gt;
* Znajdźmy prawdopodobieństwo, że ''Z'' &amp;lt; &amp;amp;minus;2,47. Proszę zrobić to na dwa sposoby: raz z użyciem wygenerowanych zmiennych z rozkładu normalnego, drugi raz z użyciem dystrybuanty   &amp;lt;tt&amp;gt;norm.cdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
[Odp: ''p'' = 0,0068]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = -2.47&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(Z &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf(z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znaleźć prawdopodobieństwo ''P''(|''Z''| &amp;lt; 2)&lt;br /&gt;
[Odp:  ''p'' = 0,9545]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = 2&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(np.abs(Z) &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf( z_crit, loc=0, scale=1) - st.norm.cdf( -z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Koncentracja zanieczyszczeń w półprzewodniku używanym do produkcji procesorów podlega rozkładowi normalnemu o średniej 127 cząsteczek na milion i odchyleniu standardowemu 22. Półprzewodnik może zostać użyty jedynie gdy koncentracja zanieczyszczeń spada poniżej 150 cząstek na milion. Jaka proporcja półprzewodników nadaje się do użycia?&lt;br /&gt;
Prawdopodobieństwo obliczyć korzystając z dystrybuanty rozkładu normalnego oraz z symulacji.&lt;br /&gt;
[Odp: ''p'' = 0,852]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu=127&lt;br /&gt;
sig=22&lt;br /&gt;
m_kryt=150&lt;br /&gt;
p=st.norm.cdf(m_kryt, loc = mu, scale = sig )&lt;br /&gt;
print('proporcja odczytana z dystrybuanty rozkładu normalnego: %4g' %p)&lt;br /&gt;
# symulacja&lt;br /&gt;
N_prob=10000&lt;br /&gt;
seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
p = sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
bins = np.arange(60,200,5)&lt;br /&gt;
h=py.hist(seria,bins);&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %.4g' %p1)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład t ===&lt;br /&gt;
&lt;br /&gt;
Gdy nie znamy wariancji populacji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; używamy w jego miejsce estymatora wariancji próby &amp;lt;math&amp;gt;s^2&amp;lt;/math&amp;gt; danego wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s^2 =\frac{\sum(\bar x - x_i)^2}{n-1} &amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie ''n'' &amp;amp;mdash; rozmiar próby&lt;br /&gt;
&lt;br /&gt;
Wtedy rozkład &amp;lt;math&amp;gt;Y=\frac{\bar X -\mu}{\frac{s}{\sqrt{n}}}&amp;lt;/math&amp;gt; nie podlega rozkładowi normalnemu. Jeśli populacja &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi normalnemu to &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; podlega  [[WnioskowanieStatystyczne/Test_t |rozkładowi ''t'' ]] z  ''n''&amp;amp;minus;1 stopniami swobody.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy na symulacji co to zmienia. Proszę obejrzeć wyniki dla kilku wartości &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
N=3&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
mu=2&lt;br /&gt;
sigma=1&lt;br /&gt;
&lt;br /&gt;
y_wyidealizowane=np.zeros(N_liczb)&lt;br /&gt;
m_populacji=np.zeros(N_liczb)&lt;br /&gt;
s_populacji=np.zeros(N_liczb)&lt;br /&gt;
y_estymowane=np.zeros(N_liczb)&lt;br /&gt;
m_estymowane=np.zeros(N_liczb)&lt;br /&gt;
s_estymowane=np.zeros(N_liczb)&lt;br /&gt;
for i in range(N_liczb):&lt;br /&gt;
    x=st.norm.rvs(loc=mu,scale=sigma,size=N)&lt;br /&gt;
    m_populacji[i]=mu&lt;br /&gt;
    s_populacji[i]=sigma/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    m_estymowane[i]=np.mean(x)&lt;br /&gt;
    s_estymowane[i]=np.std(x,ddof=1)/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    y_wyidealizowane[i]=(m_estymowane[i]-mu)/(s_populacji[i])&lt;br /&gt;
    y_estymowane[i]=(m_estymowane[i]-mu)/(s_estymowane[i])&lt;br /&gt;
 &lt;br /&gt;
py.subplot(311)&lt;br /&gt;
py.title(u'średnia (wartość oczekiwana)')&lt;br /&gt;
py.plot(m_estymowane,label=&amp;quot;estymowana&amp;quot;)&lt;br /&gt;
py.plot(m_populacji,'r',label=&amp;quot;populacji&amp;quot;)&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(312)&lt;br /&gt;
py.title('odchylenie standardowe')&lt;br /&gt;
py.plot(s_estymowane,label=&amp;quot;estymowane&amp;quot;)&lt;br /&gt;
py.plot(s_populacji,'r',label='populacji')&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(325)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji wyidealizowanej')&lt;br /&gt;
py.hist(y_wyidealizowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.subplot(326)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji estymowanej')&lt;br /&gt;
py.hist(y_estymowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Dział kontroli jakości producenta silników testuje 10 egzemplarzy silnika nowego typu. Uzyskano wartość średnią 220 KM oraz odchylenie standardowe równe 15 KM. Jakie jest prawdopodobieństwo, że klient, który zamówi 100 silników, otrzyma partię, w której średnia będzie mniejsza niż 217 KM? Wykonaj obliczenia oraz symulację. Porównaj wynik z wcześniejszym [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład_5|przykładem]], gdzie znaliśmy odchylenie standardowe z innego źródła (nie było ono estymowane z próby).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- =====Rozwiązanie=====&lt;br /&gt;
&lt;br /&gt;
Tym razem spoglądamy na problem z punktu widzenia działu kontroli jakości, dla którego zarówno średnia, jak i odchylenie standardowe są wartościami estymowanymi z próby. Zatem szukamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( t&amp;lt;\frac{217-\mu}{\frac{s}{ \sqrt{n_{klient}}}}, df=n_{kontrola}-1 \right) = P\left( t&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}}, df=10-1 \right)=&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;P(t&amp;lt;-2, df=9) = 0,0383&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.t.cdf(-2,df=9)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu t-Studenta: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
s=15&lt;br /&gt;
N_prob_kontrola= 10 #liczba silników skontrolowana przez dział kontroli jakości&lt;br /&gt;
N_prob_klient  =100 #liczba silników kupowanych przez klienta&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e5)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.t.rvs(df=N_prob_kontrola-1,loc=mu, scale=s, size=N_prob_klient)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inne rozkłady uzyskiwane przez transformacje ===&lt;br /&gt;
====Metoda odwracania dystrybuanty====&lt;br /&gt;
&amp;lt;!--[http://wazniak.mimuw.edu.pl/index.php?title=Rachunek_prawdopodobieństwa_i_statystyka/Wykład_14:_Komputerowe_metody_statystyki]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Niech &amp;lt;math&amp;gt;\xi&amp;lt;/math&amp;gt; będzie zmienną losową o rozkładzie jednostajnym na przedziale &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;. Jej dystrybuanta &amp;lt;math&amp;gt;J&amp;lt;/math&amp;gt; dana jest więc worem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
J(x) = P(\xi \le x) = \left\{ &lt;br /&gt;
\begin{array}{lrl}&lt;br /&gt;
0 &amp;amp; \mathrm{dla} &amp;amp;   x&amp;lt;0\\&lt;br /&gt;
x &amp;amp; \mathrm{dla} &amp;amp;   0 \le x &amp;lt;1 \\&lt;br /&gt;
1 &amp;amp; \mathrm{dla} &amp;amp;   1 \le x &lt;br /&gt;
\end{array}&lt;br /&gt;
\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
oraz niech &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; będzie dystrybuantą interesującego nas rozkładu. Jeśli &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest funkcją odwracalną to zmienna losowa zdefiniowana jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\eta = F^{-1}(\xi) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jest zmienną losową podlegającą rozkładowi o dystrybuancie &amp;lt;math&amp;gt; F&amp;lt;/math&amp;gt;.&lt;br /&gt;
Własność tę łatwo sprawdzić. Ponieważ dla każdego &amp;lt;math&amp;gt;x \in R &amp;lt;/math&amp;gt; mamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(\eta \le x) = P(F^{-1} (\xi) \le x)  = P(\xi \le F(x)) = F(x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
więc &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;  jest dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;\eta&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Czyli jeśli znamy dystrybuantę interesującego nas rozkładu prawdopodobieństwa i dystrybuanta ta jest odwracalna, to możemy generować liczby z rozkładu o dystrybuancie &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Przykład==== &lt;br /&gt;
Wygenerować liczby pseudolosowe z rozkładu wykładniczego o gęstości prawdopodobieństwa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x) = \lambda e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
* Znajdujemy dystrybuantę tego rozkładu:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = 1-e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znajdujemy funkcję odwrotną do dystrybuanty:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;G(u)=F^{-1}(u) = -\frac{1}{\lambda}\ln(1-u) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Generujemy liczby losowe &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; z przedziału &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt; i stosujemy transformację &amp;lt;math&amp;gt;G(u)&amp;lt;/math&amp;gt;&lt;br /&gt;
* Test generowanego rozkładu robimy przez porównanie dystrybuanty teoretycznej i empirycznej. Proszę zwrócić uwagę na funkcję estymującą dystrybuantę empiryczną&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_wykladniczy(lam, N):&lt;br /&gt;
	'''funkcja zwraca N liczb z rozkładu wykładniczego o parametrze lam&lt;br /&gt;
	korzystając z metody odwracania dystrybuanty&lt;br /&gt;
	Dystrybuanta rozkładu wykładniczego: F(x) = 1- exp(-lam*x)&lt;br /&gt;
	Funkcja do niej odwrotna: G(u) = -1/lam ln(1-u)'''&lt;br /&gt;
&lt;br /&gt;
	u = np.random.random(N)&lt;br /&gt;
	return -1.0/lam* np.log(1.-u)&lt;br /&gt;
	&lt;br /&gt;
def dystrybuanta(X,od=0, do=4, krok=0.05):&lt;br /&gt;
	'''funkcja zwraca dystrybuantę empiryczną &lt;br /&gt;
	zmiennej X na przedziale (od, do) z krokiem krok'''&lt;br /&gt;
	&lt;br /&gt;
	os_x = np.arange(od,do,krok)&lt;br /&gt;
	nx = len(os_x)&lt;br /&gt;
	N_liczb = len(X)&lt;br /&gt;
	D=np.zeros(nx) #wyzerowany wektor na naszą dystrybuantę&lt;br /&gt;
	for i in range(nx):&lt;br /&gt;
		D[i] = sum(X &amp;lt;= os_x[i])/N_liczb&lt;br /&gt;
	return (os_x, D)&lt;br /&gt;
	&lt;br /&gt;
# testujemy: narysujemy dystrybuantę oczekiwaną i empiryczną&lt;br /&gt;
lam=3&lt;br /&gt;
N=10000&lt;br /&gt;
&lt;br /&gt;
x = np.arange(0,4,0.01)&lt;br /&gt;
F = 1-np.exp(-lam*x)&lt;br /&gt;
X = gen_wykladniczy(lam, N)&lt;br /&gt;
(os_x, F_emp) = dystrybuanta(X,od=0, do=4, krok=0.1)&lt;br /&gt;
py.plot(x,F,'r',label = 'dystrybuanta teoretyczna')&lt;br /&gt;
py.plot(os_x, F_emp,'.b', label = 'dystrybuanta empiryczna')&lt;br /&gt;
py.legend()&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że nie zawsze jest łatwo wyznaczyć efektywnie  &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; &amp;amp;mdash; jest tak na przykład w przypadku rozkładu normalnego. W takich sytuacjach można szukać przybliżonej wartości &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt;, rozwiązując numerycznie równanie:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)=u&amp;lt;/math&amp;gt;, co sprowadza się do znalezienia miejsc zerowych funkcji &amp;lt;math&amp;gt;H(x)=F(x)-u&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem napisz funkcję ''MyGen(N)'' dla rozkładu, którego funkcja gęstości prawdopodobieństwa jest dana wzorem:&lt;br /&gt;
&amp;lt;math&amp;gt; f(x) = \frac{1}{\pi (1+x^{2})} &amp;lt;/math&amp;gt;&lt;br /&gt;
Następnie narysuj dla niego dystrybuantę i dystrybuantę empiryczną na przedziale [-10, 10].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
#f(x) = 1/(π(1+x²))             -- f. gęstości prawdopodobieństwa&lt;br /&gt;
#zatem F(x) = arctg(x)/π + 1/2  -- dystrybuanta&lt;br /&gt;
#zatem F⁻¹(x) = tg(π(x-1/2))    -- f. odwrotna do dystrybuanty&lt;br /&gt;
&lt;br /&gt;
def MyGen(size=1):&lt;br /&gt;
	x=np.random.random(size) # liczby z generatora jednostajnego na przedziale [0,1)&lt;br /&gt;
	y=np.tan(np.pi*(x-1/2))  # korzystamy z metody odwracania dystrybuanty&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
x=MyGen(int(1e6))&lt;br /&gt;
bins=np.linspace(-10,10,101)&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step')&lt;br /&gt;
py.plot(bins,1./(np.pi*(1+bins**2)),'r')&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step',cumulative=True)&lt;br /&gt;
py.plot(bins,np.arctan(bins)/np.pi+0.5,'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8539</id>
		<title>WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8539"/>
		<updated>2021-02-18T10:21:12Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadania */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pojęcia wstępne==&lt;br /&gt;
=== Zmienna losowa===&lt;br /&gt;
;Intuicyjnie: Zmienna losowa to taka zmienna, która przyjmuje pewną konkretną wartość w wyniku przeprowadzenia pomiaru lub eksperymentu. Na przykład zmienną losową jest liczba oczek, która wypada na kostce do gry. Dopóki trzymamy kostkę w ręce to nie wiemy jaką wartość ta zmienna przyjmie, konkretną wartość zmienna ta przyjmuje po rzucie. Jednak w kolejnych rzutach nie wiemy jakie będą jej wartości. &lt;br /&gt;
;Bardziej formalnie:  Zmienna losowa to funkcja przypisująca zdarzeniom elementarnym liczby.&lt;br /&gt;
;Zupełnie formalnie:&lt;br /&gt;
Do formalnej definicji potrzebne jest nam pojęcie przestrzeni probabilistycznej:&lt;br /&gt;
Przestrzeń probabilistyczna to układ trzech elementów &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;, gdzie:&lt;br /&gt;
* &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; jest pewnym zbiorem, zwanym przestrzenią zdarzeń elementarnych,&lt;br /&gt;
* &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest [http://pl.wikipedia.org/wiki/Sigma-ciało &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciałem] podzbiorów zbioru &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;. Elementy tego &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciała nazywane są zdarzeniami losowymi,&lt;br /&gt;
* &amp;lt;math&amp;gt;P: F\rightarrow [0,1]&amp;lt;/math&amp;gt; jest miarą probabilistyczną, tzn.&lt;br /&gt;
** &amp;lt;math&amp;gt;P(A) \ge 0 &amp;lt;/math&amp;gt; dla każdego &amp;lt;math&amp;gt;A \in F&amp;lt;/math&amp;gt;,&lt;br /&gt;
** &amp;lt;math&amp;gt;P(\Omega) = 1&amp;lt;/math&amp;gt;,&lt;br /&gt;
** jeżeli zbiory &amp;lt;math&amp;gt;A_1, A_2,\dots,A_n \in F&amp;lt;/math&amp;gt;  są parami rozłączne, to &amp;lt;math&amp;gt;P\left( \bigcup\limits_{i=1}^{\infty} A_i \right ) = \sum_{i=1}^{\infty} P(A_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Niech  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt; będzie przestrzenią probabilistyczną. '''Zmienną losową''' nazywamy dowolna funkcję &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, określoną na przestrzeni zdarzeń elementarnych &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;, o wartościach ze zbioru liczb rzeczywistych i [http://pl.wikipedia.org/wiki/Funkcja_mierzalna mierzalną] względem przestrzeni  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;. Zmienna losowa jest ciągła jeśli jej zbiór wartości jest ciągły, lub dyskretna, jeśli jej zbiór wartości jest dyskretny.&lt;br /&gt;
&lt;br /&gt;
=== Rozkład prawdopodobieństwa===&lt;br /&gt;
Rozkład prawdopodobieństwa &amp;amp;mdash; (rozkład zmiennej losowej) miara probabilistyczna określona na &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciele podzbiorów zbioru wartości zmiennej losowej, pozwalająca przypisywać prawdopodobieństwa zbiorom wartości tej zmiennej, odpowiadającym zdarzeniom losowym.&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej dyskretnej możemy wprowadzić pojęcie '''funkcji prawdopodobieństwa''':&lt;br /&gt;
&amp;lt;math&amp;gt;P(X=x_i) = p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Przykład: Dla rzutów monetą funkcję prawdopodobieństwa można zobrazować jako tabelkę:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
! Zdarzenie:&lt;br /&gt;
! orzeł&lt;br /&gt;
! reszka&lt;br /&gt;
|-&lt;br /&gt;
|zmienna losowa&lt;br /&gt;
|&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
| prawdopodobieństwo&lt;br /&gt;
| &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; &lt;br /&gt;
| 1/2&lt;br /&gt;
| 1/2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Można też przedstawić ją na wykresie:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta_1.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej ciągłej zamiast funkcji prawdopodobieństwa wprowadzamy '''funkcję gęstości prawdopodobieństwa'''. Jest to funkcja określona na zbiorze liczb rzeczywistych posiadająca następujące własności:&lt;br /&gt;
* jest nieujemna: &amp;lt;math&amp;gt;f(x) \ge 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
* prawdopodobieństwo tego, że zmienna losowa przyjmie wartość z przedziału &amp;lt;math&amp;gt;(a,b]&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; \int_a^b f(x) dx = P(a&amp;lt;X \le b) &amp;lt;/math&amp;gt;&lt;br /&gt;
[[Plik:Funkcja_gestosci_prawdopodobienstwa.png]]&lt;br /&gt;
* Prawdopodobieństwo tego, że zmienna losowa przyjmie dowolną wartość: &amp;lt;math&amp;gt; \int_{-\infty}^{+\infty} f(x) dx = P(-\infty &amp;lt;X \le +\infty) = 1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dystrybuanta ===&lt;br /&gt;
Dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy funkcję &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; określoną na zbiorze liczb rzeczywistych jako:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = P(X \le x)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
czyli wartość dystrybuanty w punkcie &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; jest prawdopodobieństwem, że zmienna losowa przyjmie wartość nie większą niż &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Dla zmiennej dyskretnej:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x)=P(X \le x) = \sum_{x_i&amp;lt;x}{P(X = x_i) } =  \sum_{x_i&amp;lt;x}p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla zmiennej losowej ciągłej z funkcją gęstości prawdopodobieństwa &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = P(X \le x)= \int_{-\infty}^x f(s) ds &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zauważmy ścisły związek dystrybuanty z funkcją prawdopodobieństwa w przypadku dyskretnym i funkcją gęstości prawdopodobieństwa w przypadku ciągłym.&lt;br /&gt;
&lt;br /&gt;
Przykład z monetą:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Momenty ===&lt;br /&gt;
Dla zmiennej losowej można obliczyć momenty zwykłe lub centralne. &lt;br /&gt;
&lt;br /&gt;
;Moment zwykły: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi tej zmiennej. Oblicza się go tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;m_k = E(X^k) =   \sum_{i} {x_i^k p_i}  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; oznacza prawdopodobieństwo, że &amp;lt;math&amp;gt;X = x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt; m_k = E(X^k) =  \int\limits_{-\infty}^{\infty} {x^k f(x)dx}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; jest funkcją gęstości prawdopodobieństwa.&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że pierwszy moment zwykły to średnia.&lt;br /&gt;
&lt;br /&gt;
;Moment centralny: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi funkcji &amp;lt;math&amp;gt;[x_i - E(x_i)]&amp;lt;/math&amp;gt;. Zatem możemy go obliczyć tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left( \left[ X-E(X) \right] ^k \right) =   \sum_{i} {\left[x_i-E(X)\right]^k p_i}  &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left(\left[X-E(X)\right]^k\right) =  \int\limits_{-\infty}^{\infty} {  \left[X-E(X)\right]^k f(x)dx}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uwaga:&lt;br /&gt;
* Drugi moment centralny ma swoją nazwę. Jest to '''wariancja''', często oznaczana przez &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Trzeci moment centralny przydaje się do badania symetrii rozkładu. Przyjmuje on wartość 0 dla zmiennych o rozkładzie symetrycznym, wartości ujemne dla zmiennych o rozkładzie wydłużonym w lewą stronę i wartości dodatnie dla zmiennych o rozkładzie wydłużonym w prawą stronę.  &lt;br /&gt;
* Czwarty moment centralny jest przydatny do konstrukcji miary spłaszczenia rozkładu zmiennej losowej '''kurtozy'''. Definiuje się ją następująco:&lt;br /&gt;
: &amp;lt;math&amp;gt; \mathrm{Kurt} = \frac{\mu_4}{\mu_2^4} - 3 &amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkłady prawdopodobieństwa można podzielić ze względu na wartość kurtozy na rozkłady:&lt;br /&gt;
* mezokurtyczne &amp;amp;mdash; wartość kurtozy wynosi 0, spłaszczenie rozkładu jest podobne do spłaszczenia rozkładu normalnego (dla którego kurtoza wynosi dokładnie 0)&lt;br /&gt;
* leptokurtyczne &amp;amp;mdash; kurtoza jest dodatnia, wartości cechy bardziej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
* platokurtyczne &amp;amp;mdash; kurtoza jest ujemna, wartości cechy mniej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
&lt;br /&gt;
=== Kwantyle ===&lt;br /&gt;
Kwantylem rzędu ''p'', gdzie &amp;lt;math&amp;gt;0 \leqslant p \leqslant 1&amp;lt;/math&amp;gt;, w rozkładzie empirycznym &amp;lt;math&amp;gt; P_{X} &amp;lt;/math&amp;gt;  zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy każdą liczbę &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt;, dla której spełnione są nierówności&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X((-\infty, x_p]) \geqslant p&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
oraz&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X([x_p,\infty)) \geqslant 1-p.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W szczególności, kwantylem rzędu ''p'' jest taka wartość &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; zmiennej losowej, że wartości mniejsze lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej ''p'', zaś wartości większe lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej 1&amp;amp;minus;''p''.&lt;br /&gt;
&lt;br /&gt;
Możemy zatem myśleć o obliczaniu kwantyla tak:&lt;br /&gt;
* zaobserwowaliśmy ''n'' wartości zmiennej losowej,&lt;br /&gt;
* zapiszemy te wartości na liście,&lt;br /&gt;
* następnie listę tę sortujemy w porządku rosnącym,&lt;br /&gt;
* kwantylem rzędu ''p'' jest albo element znajdujący się na liście w pozycji ''np'' jeśli ''np'' jest całkowite albo średnią z elementów położonych najbliżej ''np'' w przeciwnym wypadku.  &lt;br /&gt;
==== Nazwy poszczególnych kwantyli ====&lt;br /&gt;
Kwantyl rzędu 1/2 to inaczej mediana (ściślej zależy to od definicji mediany, przy jej obliczaniu z próbki o parzystej liczbie elementów często stosuje się średnią arytmetyczną dwóch środkowych elementów, szczegóły są w artykule).&amp;lt;br/&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/4, 2/4, 3/4 są inaczej nazywane kwartylami. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/5, 2/5, 3/5, 4/5 to inaczej kwintyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/10, 2/10, ..., 9/10 to inaczej decyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/100, 2/100, ..., 99/100 to inaczej percentyle. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pseudolosowość==&lt;br /&gt;
W obliczeniach numerycznych często korzystamy z liczb &amp;amp;bdquo;losowych&amp;amp;rdquo;. Tak naprawdę sekwencje liczb, których używamy są jedynie pseudolosowe, &lt;br /&gt;
tzn. są wytwarzane w deterministyczny (algorytmiczny) sposób, ale sekwencja generowanych wartości ma pewne cechy losowości. W idealnym przypadku cechą tą jest nieprzewidywalność: na podstawie obserwacji dotychczasowych wartości sekwencji niemożliwe jest podanie kolejnych wartości. W praktyce oznacza to nie możność ustalenie ziarna lub stanu wewnętrznego generatora na podstawie obserwacji dowolnie długiego ciągu wygenerowanych bitów.&lt;br /&gt;
Stan generatora przechowywany jest na zmiennych o skończonej precyzji. Jeśli stan jest przechowywany na &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; bitach to górną granicą na długość unikalnego ciągu liczb jest &amp;lt;math&amp;gt;2^n&amp;lt;/math&amp;gt;. Zazwyczaj unikalna sekwencja jest jednak krótsza. Wynika stąd, że  generatory liczb pseudolosowych mają  okres, po którym sekwencja liczb powtarza się. Podstawowe generatory liczb pseudolosowych wytwarzają liczby podlegające rozkładowi jednostajnemu (płaskiemu).&lt;br /&gt;
&lt;br /&gt;
Istnieją generatory &amp;amp;bdquo;prawdziwych&amp;amp;rdquo; liczb losowych, które są osobnymi urządzeniami. Liczy przez nie dostarczane są pewnymi parametrami jakichś procesów fizycznych, przebiegających w tych urządzeniach (zależnie od producenta). Do naszych zastosowań w zupełności wystarczą liczby generowane przez algorytmy komputerowe.&lt;br /&gt;
&lt;br /&gt;
Proste generatory liczb pseudolosowych można otrzymać jako funkcje używające operacji dzielenia modulo (generatory kongruencyjne):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{n+1}=f(x_n,x_{n-1}, ..., x_{n-k})\mod M&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zakładamy, że argumentami funkcji &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; są liczby całkowite ze zbioru &amp;lt;math&amp;gt;{0, 1, ...,M-1}&amp;lt;/math&amp;gt;. Dla ustalenia uwagi mogą to być generatory liniowe typu: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; x_{n+1}= (ax_{n} + c )\mod M&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład generatora liniowego ===&lt;br /&gt;
Dla przykładu zaimplementujmy jeden taki generator:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N=1):&lt;br /&gt;
    '''Przykład generatora liniowego. &lt;br /&gt;
       funkcja zwraca liczby pseudolosowe z przedziału [0,1)&lt;br /&gt;
       x - ziarno, &lt;br /&gt;
       N - ile liczb zwrócić'''&lt;br /&gt;
    m=8191&lt;br /&gt;
    a=101&lt;br /&gt;
    c=1731&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i]= x/m&lt;br /&gt;
    return y    &lt;br /&gt;
x=gen(23,100000)&lt;br /&gt;
py.hist(x)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Liczby &amp;lt;tt&amp;gt; m, a, c&amp;lt;/tt&amp;gt; są parametrami generatora. Liczba &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;, od której startuje generator nazywana jest ziarnem generatora {{ang|seed}}.&lt;br /&gt;
Funkcja &amp;lt;tt&amp;gt;py.hist()&amp;lt;/tt&amp;gt; zlicza i wyrysowuje histogram (czy wiemy co to jest histogram?).&lt;br /&gt;
* Wywołaj funkcję &amp;lt;tt&amp;gt;gen&amp;lt;/tt&amp;gt; dla tego samego ziarna kilka razy zaobserwuj powtarzalność wartości.&lt;br /&gt;
&lt;br /&gt;
W module &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; mamy do dyspozycji generator liczb pseudolosowych oparty na algorytmie [http://pl.wikipedia.org/wiki/Mersenne_Twister  Mersenne Twister ]&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
kod demonstrujacy pseudolosowosc&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import numpy as np&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(5)&lt;br /&gt;
&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
y=np.random.random(5)&lt;br /&gt;
print('x:', x)&lt;br /&gt;
print('y:', y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Zaobserwuj powtarzalność wartości.&lt;br /&gt;
* Wygeneruj i wykreśl 200 kolejnych liczb pseudolosowych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(200)&lt;br /&gt;
&lt;br /&gt;
py.plot(x,'.')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testy jakości===&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Dla wyżej wymienionych generatorów, proszę wykonać następujące testy:&lt;br /&gt;
* zobrazować rozkład prawdopodobieństwa (narysować histogram);&lt;br /&gt;
&amp;lt;!-- Tymczasowo wylaczane przez RK 14.02.2013 * test zgodności momentów &amp;amp;mdash; czy momenty obliczone dla wygenerowanych liczb są takie jak przewiduje teoria;--&amp;gt;&lt;br /&gt;
* test korelacji na rysunku: sporządzić wykres gdzie na jednej osi są wartości &amp;lt;math&amp;gt;x_n&amp;lt;/math&amp;gt; na drugiej zaś wartości &amp;lt;math&amp;gt;x_{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Tymczasowo wylaczone przez RK 14.02.2013 # momenty dla rozkładu jednostajnego [0, 1]&lt;br /&gt;
# mu = 0.5&lt;br /&gt;
# var = 1/12&lt;br /&gt;
# kurtoza -6/5&lt;br /&gt;
mu=np.mean(x)&lt;br /&gt;
var = np.sum((x - mu)**2)/N&lt;br /&gt;
kurtoza = np.sum((x-mu)**4)/N/var**2-3&lt;br /&gt;
print u'wartości teoretyczne:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':0.5,'v':1.0/12,'k':-6.0/5}&lt;br /&gt;
print u'wartości z próby:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':mu,'v':var,'k':kurtoza} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N):&lt;br /&gt;
    m=8765132137&lt;br /&gt;
    a=42347&lt;br /&gt;
    c=1731&lt;br /&gt;
&lt;br /&gt;
    ## warto porównać wynik dla poniższych parametrów&lt;br /&gt;
    #m=8191&lt;br /&gt;
    #a=101&lt;br /&gt;
    #a=107&lt;br /&gt;
&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i] = x/m&lt;br /&gt;
    return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=10000&lt;br /&gt;
x=gen(23,N)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.hist(x,30,normed = True)&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(x[:-1],x[1:],'.')&lt;br /&gt;
py.xlabel('x_n')&lt;br /&gt;
py.ylabel('x_{n+1}')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Bardziej wyczerpujące baterie testów jakości generatorów można znaleźć na przykład w:&lt;br /&gt;
* http://csrc.nist.gov/groups/ST/toolkit/rng/index.html&lt;br /&gt;
* http://www.phy.duke.edu/~rgb/General/rand_rate.php&lt;br /&gt;
&lt;br /&gt;
== Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; ==&lt;br /&gt;
=== Wstęp ===&lt;br /&gt;
Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; są zaimplementowane jako dwie klasy: &amp;lt;tt&amp;gt;stats.rv_continuous&amp;lt;/tt&amp;gt;  (bazuje na niej ponad 80 typów rozkładów ciągłych zmiennych losowych) i &amp;lt;tt&amp;gt;stats.rv_discrete&amp;lt;/tt&amp;gt; (bazuje na niej 10 typów rozkładów dyskretnych zmiennych losowych). Aktualną listę dostępnych rozkładów można uzyskać np. przy pomocy następującego skryptu:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
from scipy import stats&lt;br /&gt;
dc= [d for d in dir(stats) if isinstance(getattr(stats,d), stats.rv_continuous)]&lt;br /&gt;
print(dc)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Przykładowo: zmienne losowe o rozkładzie normalnym są reprezentowane przez klasę &amp;lt;tt&amp;gt;norm&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Funkcje przydatne do pracy ze zmiennymi losowymi dostępne są jako metody ===&lt;br /&gt;
&lt;br /&gt;
Obiekty reprezentujące zmienne losowe podlegające konkretnym rozkładom posiadają następujące metody:&lt;br /&gt;
* &amp;lt;tt&amp;gt;rvs&amp;lt;/tt&amp;gt;: '''generator zmiennych losowych''' danego typu;&lt;br /&gt;
* &amp;lt;tt&amp;gt;cdf&amp;lt;/tt&amp;gt;: '''dystrybuanta''' (ang. Cumulative Distribution Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;ppf&amp;lt;/tt&amp;gt;: '''funkcja odwrotna do dystrybuanty''' (ang. Percent Point Function (Inverse of CDF));&lt;br /&gt;
* &amp;lt;tt&amp;gt;stats&amp;lt;/tt&amp;gt;: zwraca '''momenty centralne rozkładu''' (średnią, wariancję, skośność i kurtozę);&lt;br /&gt;
* &amp;lt;tt&amp;gt;moment&amp;lt;/tt&amp;gt;: zwraca niecentralne momenty rozkładu.&lt;br /&gt;
* &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt;: '''funkcja gęstości prawdopodobieństwa''' (ang. Probability Density Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;pmf&amp;lt;/tt&amp;gt; dla rozkładów dyskretnych  &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt; jest zamienione na '''funkcję prawdopodobieństwa''' (ang. probability mass function; ''masa'' przez analogię z gęstością masy i masą punktową);&lt;br /&gt;
* &amp;lt;tt&amp;gt;sf&amp;lt;/tt&amp;gt;: funkcja przeżycia (ang. Survival Function) (1&amp;amp;minus;CDF);&lt;br /&gt;
* &amp;lt;tt&amp;gt;isf&amp;lt;/tt&amp;gt;: funkcja odwrotna do funkcji przetrwania (ang. Inverse Survival Function (Inverse of SF));&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Zobaczmy działanie tych metod dla zmiennych losowych z rozkładu normalnego:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
x = st.norm.rvs(size=10000)&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
py.hist(x,bins=bins)&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zmienne losowe mogą być używane na jeden z dwóch sposobów: można podawać wszystkie parametry opisujące rozkład w każdym wywołaniu metody, albo wytworzyć obiekt reprezentujący rozkład o konkretnych parametrach (w dokumentacji &amp;lt;tt&amp;gt;scipy&amp;lt;/tt&amp;gt; jest to nazywane zamrażaniem parametrów rozkładu, ang. ''freezing'')&lt;br /&gt;
Jako przykład zobaczmy funkcję odwrotną do dystrybuanty rozkładu normalnego N(2, 9): &lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; import scipy.stats as st&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.norm.ppf(0.05, loc=2, scale=3))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; my_norm = st.norm(loc=2,scale=3)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(my_norm.ppf(0.05))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
&lt;br /&gt;
=== Pomoc do poszczególnych rozkładów ===&lt;br /&gt;
Pełną dokumentację każdego rozkładu mamy dostępną w postaci docstringów. Dla przykładu:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
help(st.nct)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
wypisuje pełną informację z docstring o niecentralnym rozkładzie ''t''.&lt;br /&gt;
Podstawowe informacje można uzyskać wypisując treść pola &amp;lt;tt&amp;gt;extradoc&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.nct.extradoc)&lt;br /&gt;
 Non-central Student T distribution&lt;br /&gt;
 df**(df/2) * gamma(df+1)&lt;br /&gt;
 nct.pdf(x,df,nc) = --------------------------------------------------&lt;br /&gt;
 2**df*exp(nc**2/2)*(df+x**2)**(df/2) * gamma(df/2)&lt;br /&gt;
 for df &amp;gt; 0, nc &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Wypisz pomoc dla (centralnego) rozkładu ''t'' i sprawdź jakie parametry on przyjmuje. Wybierz dowolnie ich wartości, a następnie posiłkując się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład|przykładem]]:&lt;br /&gt;
# Wygeneruj 10000 liczb z rozkładu ''t'' i narysuj ich histogram.&lt;br /&gt;
# Wykreśl gęstość prawdopodobieństwa tego rozkładu.&lt;br /&gt;
# Wykreśl dystrybuantę.&lt;br /&gt;
# Wykreśl funkcję odwrotną do dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=10000       # ile liczb generujemy&lt;br /&gt;
&lt;br /&gt;
# przykładowe parametry rozkładu&lt;br /&gt;
df = 3        # liczba stopni swobody&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
x = st.t.rvs(size=N, df=df)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;) #histtype=&amp;quot;step&amp;quot; daje nam przezroczysty histogram&lt;br /&gt;
x = st.norm.rvs(size=N)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.t.pdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y,'g')&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.t.cdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z,'g')&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
 &lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.t.ppf(os_p, df=df)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f,'g')&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
py.legend([&amp;quot;Rozkład t-Studenta&amp;quot;,&amp;quot;Rozkład normalny&amp;quot;])&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Statystyki i estymatory ===&lt;br /&gt;
Estymator jest statystyką służącą do szacowania pewnej wielkości (np. parametru) na podstawie próby losowej (np. danych eksperymentalnych). Na wykładzie poznaliśmy m.in. takie statystki jak [[WnioskowanieStatystyczne/Momenty|wartość oczekiwana, wariancja i mediana]], z których ostatnia jest szczególnym przypadkiem [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Kwantyle|kwantylu]]. Moduły numpy oraz scipy.stats umożliwiają łatwe estymowanie niektórych statystyk, a także obliczanie ich rzeczywistych wartości, jeśli znamy parametry rozkładu.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jako przykład niech posłuży poniższy kod, w którym szukamy wartości estymatorów wartości oczekiwanej oraz wariancji rozkładu normalnego na podstawie próby losowej, a wynik porównujemy z wartościami rzeczywistymi:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
m=2&lt;br /&gt;
s=0.5&lt;br /&gt;
rozklad = st.norm(m,s) #definiujemy rozkład normalny&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()  # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
var  = rozklad.var()   # rzeczywiste odchylenie standardow&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)  # estymowana wartość oczekiwana&lt;br /&gt;
var_est  = np.var(x)   # estymowana wariancja&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem wygeneruj próby losowe dla następujących rozkładów:&lt;br /&gt;
# Rozkład normalny &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; = 100, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; = 2.&lt;br /&gt;
# Rozkład dwumianowy p = 0.4, n =10.&lt;br /&gt;
# Rozkład poissona &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; = 4.&lt;br /&gt;
# Rozkład jednostajny na przedziale [2, 6).&lt;br /&gt;
Następnie estymuj na ich podstawie wartości poniższych statystyk i porównaj je z wartościami obliczonymi na podstawie znanych parametrów rozkładu:&lt;br /&gt;
# Wartość oczekiwana.&lt;br /&gt;
# Odchylenie standardowe.&lt;br /&gt;
# Wariancja.&lt;br /&gt;
# Mediana.&lt;br /&gt;
# Kurtoza.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
Poniżej znajduje się przykładowe rozwiązanie dla rozkładu dwumianowego. Aby uzyskać rozwiązanie dla pozostałych rozkładów wystarczy dostosować pierwszą część kodu, gdzie definiowany jest rozkład.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
n=10&lt;br /&gt;
p=0.4&lt;br /&gt;
rozklad = st.binom(n,p) #definiujemy nasz rozkład&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
# dalsza część jest jest niezależna od rodzaju rozkładu, który zdefiniowaliśmy powyżej&lt;br /&gt;
###########################################################################################&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()           # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
std  = rozklad.std()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
var  = rozklad.var()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
med  = rozklad.median()         # rzeczywista mediana&lt;br /&gt;
kurt = float(rozklad.stats('k'))# rzecz. kurtoza (funkcja zwraca jednoelementową tablicę&lt;br /&gt;
                                # numpy.ndarray, więc trzeba ją ręcznie zrzutować na float)&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)     # estymowana wartość oczekiwana&lt;br /&gt;
std_est  = np.std(x)      # estymowane odchylenie standardowe&lt;br /&gt;
var_est  = np.var(x)      # estymowana wariancja&lt;br /&gt;
med_est  = np.median(x)   # estymowana mediana&lt;br /&gt;
kurt_est = st.kurtosis(x) # estymowana kurtoza&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Odchylenie standardowe rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(std,std_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
print(&amp;quot;Mediana rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(med,med_est))&lt;br /&gt;
print(&amp;quot;Kurtoza rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(kurt,kurt_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generowanie zmiennych losowych podlegającym różnym rozkładom prawdopodobieństwa ==&lt;br /&gt;
Podstawowe typy generatorów liczb losowych wytwarzają liczby losowe podlegające rozkładowi jednostajnemu. Zastanowimy sie teraz jak mając zmienne losowe z rozkładu jednostajnego wytworzyć zmienne losowe o innych rozkładach.&lt;br /&gt;
=== Rozkład dwumianowy ===&lt;br /&gt;
Zmienna losowa, która zlicza liczbę sukcesów &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; próbach, gdzie &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest prawdopodobieństwem sukcesu w pojedynczej próbie, podlega rozkładowi dwumianowemu&lt;br /&gt;
[[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_dwumianowy więcej o rozkładzie dwumianowym]]: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_n(k)=\left(  &lt;br /&gt;
\begin{array}{c} &lt;br /&gt;
n \\&lt;br /&gt;
k&lt;br /&gt;
\end{array} &lt;br /&gt;
\right) p^kq^{n-k}=\frac{n!}{k!(n-k)!}p^kq^{n-k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Jak z rozkładu jednostajnego wytworzyć zmienne losowe o rozkładzie dwumianowym?''&lt;br /&gt;
* Wykonać symulację!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_binom(n,p,N):&lt;br /&gt;
	'''funkcja zwracająca zmienną losową z rozkładu dwumianowego: &lt;br /&gt;
	ilość sukcesów w n próbach przy prawdopodobieństwie sukcesu p&lt;br /&gt;
	parametry:&lt;br /&gt;
		n: liczba prób&lt;br /&gt;
		p: prawdopodobieństwo sukcesu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będącymi liczbami sukcesów&lt;br /&gt;
	'''&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję n liczb z rozkładu jednostajnego [0,1) i jako sukcesy&lt;br /&gt;
	#traktuję wylosowanie liczby nie większej niż p&lt;br /&gt;
	r=np.random.rand(N,n)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
n=20&lt;br /&gt;
N=100000&lt;br /&gt;
p=0.8&lt;br /&gt;
x = gen_binom(n,p,N)&lt;br /&gt;
bins =range(22) #granice binów&lt;br /&gt;
py.hist(x,bins)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Z oszacowań agencji wynika, że średnio 2 z 3 reklam spotyka się z pozytywnym odzewem. Akcja marketingowa obejmuje 12 reklam. Niech &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; oznacza liczbę reklam skutecznych. Czy &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi dwumianowemu?&lt;br /&gt;
Jakie jest prawdopodobieństwo, że 10 reklam będzie skutecznych?&lt;br /&gt;
Prawdopodobieństwo obliczyć ze wzoru oraz korzystając z symulacji.&lt;br /&gt;
&lt;br /&gt;
Wskazówka informacje o zmiennych z rozkładu dwumianowego (&amp;lt;tt&amp;gt;binom&amp;lt;/tt&amp;gt;) można uzyskać tak:&lt;br /&gt;
 # &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
 #   Binomial distribution&lt;br /&gt;
 #&lt;br /&gt;
 #   Counts the number of successes in *n* independent&lt;br /&gt;
 #   trials when the probability of success each time is *pr*.&lt;br /&gt;
 #&lt;br /&gt;
 #   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
 #   for k in {0,1,...,n}&lt;br /&gt;
Odp: ''p'' = 0,127&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
p=2/3 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n=12   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
&lt;br /&gt;
# ze wzoru &lt;br /&gt;
&lt;br /&gt;
# &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
#   Binomial distribution&lt;br /&gt;
#&lt;br /&gt;
#   Counts the number of successes in *n* independent&lt;br /&gt;
#   trials when the probability of success each time is *pr*.&lt;br /&gt;
#&lt;br /&gt;
#   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
#   for k in {0,1,...,n}&lt;br /&gt;
p_wz = st.binom.pmf(10,n,p)&lt;br /&gt;
print(p_wz)&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =100000 # liczba powtórzeń symulacji&lt;br /&gt;
k = np.zeros(N_powt)&lt;br /&gt;
for i in range(N_powt):&lt;br /&gt;
	r = rnd.random(size=n) # symulowana akcja reklamowa &lt;br /&gt;
	k[i]=np.sum(r&amp;lt;=p)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k==10)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Na egzaminie testowym jest 30 pytań. Na każde pytanie są podane cztery możliwe odpowiedzi, z czego tylko jedna jest prawdziwa. Za prawidłową odpowiedź student otrzymuje 1 punkt a za fałszywą &amp;amp;minus;0,5 punktu. Próg zaliczenia wynosi 15 punktów. Oblicz prawdopodobieństwo, że udzielając czysto losowych odpowiedzi student zaliczy egzamin.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
Liczba prawidłowych odpowiedzi w teście może być potraktowana jako liczba sukcesów k w n = 30 próbach. Prawdopodobieństwo sukcesu pojedynczego zdarzenia (prawidłowa odpowiedź na jedno pytanie) wynosi p = 1/4. Ze względu na obecność ujemnych punktów za fałszywe odpowiedzi zmienia się efektywna liczba punktów wymaganych do zaliczenia zgodnie z równaniem:&lt;br /&gt;
k-0.5*(30-k) = 15&lt;br /&gt;
co daje k = 20&lt;br /&gt;
Zatem problem redukuje się do wyznaczenia prawdopodobieństwa co najmniej 20 sukcesów w 30 próbach, przy czym prawdopodobieństwo sukcesu w 1 próbie wynosi p=1/4:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
p = 1./4 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n = 30   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
k_kryt = 20&lt;br /&gt;
# ze wzoru &lt;br /&gt;
p_wz = np.sum(st.binom.pmf(range(k_kryt,n+1),n,p))&lt;br /&gt;
print(p_wz)&lt;br /&gt;
&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =10000000 # liczba powtórzeń symulacji&lt;br /&gt;
r = np.random.random(size=(n,N_powt)) # symulowany test &lt;br /&gt;
k = np.sum(r&amp;lt;=p,0)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k&amp;gt;=20)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład Poissona ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(k)=\frac{\mu^k e^{-\mu}}{k!}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkładowi Poissona podlegają zmienne losowe zliczające w jednostce czasu liczbę zdarzeń o niskim prawdopodobieństwie zajścia. Np. liczba rozpadów promieniotwórczych na jednostkę czasu [[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_Poissona więcej o rozkładzie Poissona]]&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Lekarz pełniący dyżur w szpitalu jest wzywany do pacjentów średnio 3 razy w ciągu nocy. Załóżmy, że liczba wezwań na noc podlega rozkładowi Poissona. Jakie jest prawdopodobieństwo, że noc upłynie lekarzowi spokojnie?&lt;br /&gt;
U nas &amp;lt;math&amp;gt;\mu=3&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt; więc&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(0) = \frac{3^0e^{-3}}{0!} = e^{-3} = 0,0498&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jak ze zmiennych podlegających rozkładowi jednostajnemu uzyskać zmienne podlegające rozkładowi Poissona?&lt;br /&gt;
&lt;br /&gt;
Wykonać symulację wynikającą z następujących spostrzeżeń:&lt;br /&gt;
&lt;br /&gt;
* Weźmy jednostkę czasu. Ma w niej zachodzić średnio &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; zdarzeń. &lt;br /&gt;
* Podzielmy jednostkę czasu na ''NT'' odcinków o jednakowej długości. &lt;br /&gt;
* Prawdopodobieństwo, że zdarzenie zajdzie w konkretnym odcinku jest &amp;lt;math&amp;gt;p=\frac{\mu}{NT}&amp;lt;/math&amp;gt; Takie prawdopodobieństwo ma też wylosowanie przy pomocy generatora liczb z rozkładu jednostajnego [0,1) liczby nie większej niż ''p''. &lt;br /&gt;
* Zatem, aby wytworzyć jedną liczbę z rozkładu Poissona można policzyć ile spośród ''NT'' liczb z rozkładu jednostajnego [0,1) jest nie większych niż ''p''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
def gen_poiss(mi,NT,N):&lt;br /&gt;
	'''funkcja zwracająca zmienne losowe z rozkładu poissona: &lt;br /&gt;
	średnia ilość zdarzeń o niskim prawdopodobieństwie w jednostce czasu&lt;br /&gt;
	parametry:&lt;br /&gt;
		mi: średnia liczba zdarzeń&lt;br /&gt;
		NT: liczba odcinków czasu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będących zliczeniami zdarzeń&lt;br /&gt;
	'''&lt;br /&gt;
	p = float(mi)/NT&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję NT liczb z rozkładu jednostajnego [0,1) i jako zajście zdarzenia&lt;br /&gt;
	# traktuję wylosowanie liczby nie większej niż p. Ilość zdarzeń to liczba z rozkładu Poissona&lt;br /&gt;
	r=np.random.rand(N,NT)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
 &lt;br /&gt;
# kod testujący&lt;br /&gt;
mi=4&lt;br /&gt;
N=100000&lt;br /&gt;
NT = 10000&lt;br /&gt;
x = gen_poiss(mi,NT,N)&lt;br /&gt;
bins =np.arange(int(x.max()+1))-0.5&lt;br /&gt;
py.hist(x,bins,normed=True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# porównanie z generatorami scipy.stats&lt;br /&gt;
p=mi/NT&lt;br /&gt;
k=np.arange(x.max()+1)&lt;br /&gt;
B=st.binom.pmf(k,NT,p)&lt;br /&gt;
py.plot(k,B,'ro')&lt;br /&gt;
P=st.poisson.pmf(k,mi)&lt;br /&gt;
py.plot(k,P,'go')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład normalny i Centralne Twierdzenie Graniczne ===&lt;br /&gt;
Gęstość prawdopodobieństwa [[WnioskowanieStatystyczne/Rozklady-przyklady#Rozk.C5.82ad_Gaussa| rozkładu normalnego]] dana jest wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{ -\frac{(x-\mu)^2}{2 \sigma^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie: &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; &amp;amp;mdash; średnia, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; &amp;amp;mdash; odchylenie standardowe (&amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; &amp;amp;mdash; wariancja).&lt;br /&gt;
&lt;br /&gt;
Jeden ze  sposóbw wytwarzania zmiennych losowych o rozkładzie normalnym  polega na zastosowaniu [[WnioskowanieStatystyczne/CLT| Centralnego Twierdzenia Granicznego]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;X=\frac{\sqrt{12}}{\sqrt{N}}\left(\sum_{n=1}^N Y_n -\frac{N}{2}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; zmienna losowa z rozkładu jednostajnego &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;&lt;br /&gt;
W granicy dużych &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; rozkład zmiennej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; dąży do rozkładu normalnego &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt;, która zwraca liczbę losową ''X'' otrzymaną zgodnie powyższym wzorem  przez sumowanie &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt; liczb z rozkładu jednostajnego.&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG(N, N_liczb)&amp;lt;/tt&amp;gt; korzystającą z &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt; i zwracającą zadaną ilość liczb &amp;lt;tt&amp;gt;N_liczb&amp;lt;/tt&amp;gt;&lt;br /&gt;
* narysować histogramy 10 000 liczb &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; uzyskanych kolejno dla &amp;lt;math&amp;gt;N={1,2,...,12}&amp;lt;/math&amp;gt;&lt;br /&gt;
* Jakie parametry charakteryzują rozkład do którego zbiegają sumy? Przy każdym z powyższych histogramów wypisz średnią i wariancję z próby (funkcje &amp;lt;tt&amp;gt;np.mean&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;np.var&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
 &lt;br /&gt;
def gen_CTG_1(N):&lt;br /&gt;
	'''Funkcja generująca pojedynczą zmienną losową będącą sumą N liczb z rozkładu jednostajnego [0,1)&lt;br /&gt;
	pomnożoną przez czynnik normujący zapewniający wariancję równą 1.&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		jedną liczbę losową'''&lt;br /&gt;
	X = np.sqrt(12/N) * (np.sum(rnd.random(N)) - N/2)&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
def gen_CTG(N,N_liczb):&lt;br /&gt;
	'''Funkcja zwraca wektor (tablicę) zmiennych losowych będących sumami N liczb z rozkładu jednostajnego [0,1).&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
		N_liczb: ilość liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N_liczb losowych'''&lt;br /&gt;
&lt;br /&gt;
	X=np.zeros(N_liczb)&lt;br /&gt;
&lt;br /&gt;
	for i in range(N_liczb):&lt;br /&gt;
		X[i] = gen_CTG_1(N)&lt;br /&gt;
&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
Nmax=12&lt;br /&gt;
&lt;br /&gt;
for N in range(1,Nmax+1):&lt;br /&gt;
	X=gen_CTG(N,N_liczb)&lt;br /&gt;
	py.subplot(3,4,N)&lt;br /&gt;
	bins = np.arange(-4,4,0.1)&lt;br /&gt;
	py.hist(X,bins=bins,normed=True)&lt;br /&gt;
	py.title(&amp;quot;N=%i, µ=%.2g, σ²=%.2g&amp;quot;%(N, X.mean(), X.var(ddof=1)))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie: transformacja rozkładu normalnego ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozkład o średniej 0 i wariancji 1 (notacja  &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;) jest nazywany rozkładem standardowym i często jest oznaczany literą &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Dokonując odpowiedniej transformacji można z rozkładu &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; uzyskać dowolny inny rozkład normalny. &lt;br /&gt;
&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować 100000 zmiennych losowych z rozkładu &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.rvs(loc=0, scale=1, size=100000)&amp;lt;/tt&amp;gt;) &lt;br /&gt;
* przetransformować je do zmiennych losowych &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt;. &lt;br /&gt;
* narysować histogramy zmiennych przed i po transformacji.&lt;br /&gt;
* narysować rozkład gęstości prawdopodobieństwa dla rozkładu &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.pdf(...)&amp;lt;/tt&amp;gt;) .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
Z=st.norm.rvs(loc=0,scale=1,size=100000) #losowanie liczb z rozkładu N(0,1) (czyli Z)&lt;br /&gt;
&lt;br /&gt;
std=9&lt;br /&gt;
mu=2&lt;br /&gt;
X=Z*std+mu #transformacja do σ=9, µ=2&lt;br /&gt;
&lt;br /&gt;
szerokosc_binu=0.5&lt;br /&gt;
bins=np.arange(-40,40.5,szerokosc_binu) #te same granice binów dla obu histogramów&lt;br /&gt;
&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(Z,bins=bins,normed=True,label=&amp;quot;histogram przed transformacją&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(Z.mean(),Z.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(X,bins=bins,normed=True,label=&amp;quot;histogram po transformacji&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
PDF=st.norm.pdf(bins,loc=mu,scale=std) #modelowa gęstość prawdopodobieństwa dla σ=9, µ=2&lt;br /&gt;
py.plot(bins+szerokosc_binu/2,PDF,&amp;quot;ro&amp;quot;,label=&amp;quot;gęstość prawd.&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(X.mean(),X.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Transformacja Boxa-Mullera====&lt;br /&gt;
To inna popularna metoda  metoda generowania liczb losowych o rozkładzie normalnym, na podstawie dwóch wartości zmiennej o rozkładzie jednostajnym na przedziale [0,1) http://en.wikipedia.org/wiki/Box-Muller_transform,  ale nie będziemy się nią tu szerzej zajmować.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Producent silników twierdzi, że jego silniki mają średnią moc 220 KM, a odchylenie standardowe wynosi 15 KM. Potencjalny klient testuje 100 silników. Jakie jest prawdopodobieństwo, że średnia z próby będzie mniejsza niż 217 KM?&lt;br /&gt;
&lt;br /&gt;
Przypomnijmy, że z CTG dla dużych liczebności próby  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\bar x \sim N(\mu,\sigma^2/n)&amp;lt;/math&amp;gt; [[WnioskowanieStatystyczne/Statystyki_i_estymatory#Estymator_warto.C5.9Bci_oczekiwanej|(dowód)]]. Zatem szukamy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( Z&amp;lt;\frac{217-\mu}{\frac{\sigma}{ \sqrt{n}}} \right)  = P\left( Z&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}} \right)=P(Z&amp;lt;-2)=0,0228&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.norm.cdf(-2)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu normalnego: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
sig=15&lt;br /&gt;
N_prob=100&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e4)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadania====&lt;br /&gt;
Teraz kilka najprostszych zadań dotyczących rozkładu normalnego:&lt;br /&gt;
* Znajdźmy prawdopodobieństwo, że ''Z'' &amp;lt; &amp;amp;minus;2,47. Proszę zrobić to na dwa sposoby: raz z użyciem wygenerowanych zmiennych z rozkładu normalnego, drugi raz z użyciem dystrybuanty   &amp;lt;tt&amp;gt;norm.cdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
[Odp: ''p'' = 0,0068]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = -2.47&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(Z &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf(z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znaleźć prawdopodobieństwo ''P''(|''Z''| &amp;lt; 2)&lt;br /&gt;
[Odp:  ''p'' = 0,9545]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = 2&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(np.abs(Z) &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf( z_crit, loc=0, scale=1) - st.norm.cdf( -z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Koncentracja zanieczyszczeń w półprzewodniku używanym do produkcji procesorów podlega rozkładowi normalnemu o średniej 127 cząsteczek na milion i odchyleniu standardowemu 22. Półprzewodnik może zostać użyty jedynie gdy koncentracja zanieczyszczeń spada poniżej 150 cząstek na milion. Jaka proporcja półprzewodników nadaje się do użycia?&lt;br /&gt;
Prawdopodobieństwo obliczyć korzystając z dystrybuanty rozkładu normalnego oraz z symulacji.&lt;br /&gt;
[Odp: ''p'' = 0,852]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu=127&lt;br /&gt;
sig=22&lt;br /&gt;
m_kryt=150&lt;br /&gt;
p=st.norm.cdf(m_kryt, loc = mu, scale = sig )&lt;br /&gt;
print('proporcja odczytana z dystrybuanty rozkładu normalnego: %4g' %p)&lt;br /&gt;
# symulacja&lt;br /&gt;
N_prob=10000&lt;br /&gt;
seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
p = sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
bins = np.arange(60,200,5)&lt;br /&gt;
h=py.hist(seria,bins);&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %.4g' %p1)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład t ===&lt;br /&gt;
&lt;br /&gt;
Gdy nie znamy wariancji populacji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; używamy w jego miejsce estymatora wariancji próby &amp;lt;math&amp;gt;s^2&amp;lt;/math&amp;gt; danego wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s^2 =\frac{\sum(\bar x - x_i)^2}{n-1} &amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie ''n'' &amp;amp;mdash; rozmiar próby&lt;br /&gt;
&lt;br /&gt;
Wtedy rozkład &amp;lt;math&amp;gt;Y=\frac{\bar X -\mu}{\frac{s}{\sqrt{n}}}&amp;lt;/math&amp;gt; nie podlega rozkładowi normalnemu. Jeśli populacja &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi normalnemu to &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; podlega  [[WnioskowanieStatystyczne/Test_t |rozkładowi ''t'' ]] z  ''n''&amp;amp;minus;1 stopniami swobody.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy na symulacji co to zmienia. Proszę obejrzeć wyniki dla kilku wartości &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
N=3&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
mu=2&lt;br /&gt;
sigma=1&lt;br /&gt;
&lt;br /&gt;
y_wyidealizowane=np.zeros(N_liczb)&lt;br /&gt;
m_populacji=np.zeros(N_liczb)&lt;br /&gt;
s_populacji=np.zeros(N_liczb)&lt;br /&gt;
y_estymowane=np.zeros(N_liczb)&lt;br /&gt;
m_estymowane=np.zeros(N_liczb)&lt;br /&gt;
s_estymowane=np.zeros(N_liczb)&lt;br /&gt;
for i in range(N_liczb):&lt;br /&gt;
    x=st.norm.rvs(loc=mu,scale=sigma,size=N)&lt;br /&gt;
    m_populacji[i]=mu&lt;br /&gt;
    s_populacji[i]=sigma/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    m_estymowane[i]=np.mean(x)&lt;br /&gt;
    s_estymowane[i]=np.std(x,ddof=1)/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    y_wyidealizowane[i]=(m_estymowane[i]-mu)/(s_populacji[i])&lt;br /&gt;
    y_estymowane[i]=(m_estymowane[i]-mu)/(s_estymowane[i])&lt;br /&gt;
 &lt;br /&gt;
py.subplot(311)&lt;br /&gt;
py.title(u'średnia (wartość oczekiwana)')&lt;br /&gt;
py.plot(m_estymowane,label=&amp;quot;estymowana&amp;quot;)&lt;br /&gt;
py.plot(m_populacji,'r',label=&amp;quot;populacji&amp;quot;)&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(312)&lt;br /&gt;
py.title('odchylenie standardowe')&lt;br /&gt;
py.plot(s_estymowane,label=&amp;quot;estymowane&amp;quot;)&lt;br /&gt;
py.plot(s_populacji,'r',label='populacji')&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(325)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji wyidealizowanej')&lt;br /&gt;
py.hist(y_wyidealizowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.subplot(326)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji estymowanej')&lt;br /&gt;
py.hist(y_estymowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Dział kontroli jakości producenta silników testuje 10 egzemplarzy silnika nowego typu. Uzyskano wartość średnią 220 KM oraz odchylenie standardowe równe 15 KM. Jakie jest prawdopodobieństwo, że klient, który zamówi 100 silników, otrzyma partię, w której średnia będzie mniejsza niż 217 KM? Wykonaj obliczenia oraz symulację. Porównaj wynik z wcześniejszym [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład_5|przykładem]], gdzie znaliśmy odchylenie standardowe z innego źródła (nie było ono estymowane z próby).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- =====Rozwiązanie=====&lt;br /&gt;
&lt;br /&gt;
Tym razem spoglądamy na problem z punktu widzenia działu kontroli jakości, dla którego zarówno średnia, jak i odchylenie standardowe są wartościami estymowanymi z próby. Zatem szukamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( t&amp;lt;\frac{217-\mu}{\frac{s}{ \sqrt{n_{klient}}}}, df=n_{kontrola}-1 \right) = P\left( t&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}}, df=10-1 \right)=&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;P(t&amp;lt;-2, df=9) = 0,0383&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.t.cdf(-2,df=9)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu t-Studenta: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
s=15&lt;br /&gt;
N_prob_kontrola= 10 #liczba silników skontrolowana przez dział kontroli jakości&lt;br /&gt;
N_prob_klient  =100 #liczba silników kupowanych przez klienta&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e5)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.t.rvs(df=N_prob_kontrola-1,loc=mu, scale=s, size=N_prob_klient)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inne rozkłady uzyskiwane przez transformacje ===&lt;br /&gt;
====Metoda odwracania dystrybuanty====&lt;br /&gt;
&amp;lt;!--[http://wazniak.mimuw.edu.pl/index.php?title=Rachunek_prawdopodobieństwa_i_statystyka/Wykład_14:_Komputerowe_metody_statystyki]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Niech &amp;lt;math&amp;gt;\xi&amp;lt;/math&amp;gt; będzie zmienną losową o rozkładzie jednostajnym na przedziale &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;. Jej dystrybuanta &amp;lt;math&amp;gt;J&amp;lt;/math&amp;gt; dana jest więc worem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
J(x) = P(\xi \le x) = \left\{ &lt;br /&gt;
\begin{array}{lrl}&lt;br /&gt;
0 &amp;amp; \mathrm{dla} &amp;amp;   x&amp;lt;0\\&lt;br /&gt;
x &amp;amp; \mathrm{dla} &amp;amp;   0 \le x &amp;lt;1 \\&lt;br /&gt;
1 &amp;amp; \mathrm{dla} &amp;amp;   1 \le x &lt;br /&gt;
\end{array}&lt;br /&gt;
\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
oraz niech &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; będzie dystrybuantą interesującego nas rozkładu. Jeśli &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest funkcją odwracalną to zmienna losowa zdefiniowana jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\eta = F^{-1}(\xi) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jest zmienną losową podlegającą rozkładowi o dystrybuancie &amp;lt;math&amp;gt; F&amp;lt;/math&amp;gt;.&lt;br /&gt;
Własność tę łatwo sprawdzić. Ponieważ dla każdego &amp;lt;math&amp;gt;x \in R &amp;lt;/math&amp;gt; mamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(\eta \le x) = P(F^{-1} (\xi) \le x)  = P(\xi \le F(x)) = F(x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
więc &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;  jest dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;\eta&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Czyli jeśli znamy dystrybuantę interesującego nas rozkładu prawdopodobieństwa i dystrybuanta ta jest odwracalna, to możemy generować liczby z rozkładu o dystrybuancie &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Przykład==== &lt;br /&gt;
Wygenerować liczby pseudolosowe z rozkładu wykładniczego o gęstości prawdopodobieństwa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x) = \lambda e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
* Znajdujemy dystrybuantę tego rozkładu:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = 1-e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znajdujemy funkcję odwrotną do dystrybuanty:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;G(u)=F^{-1}(u) = -\frac{1}{\lambda}\ln(1-u) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Generujemy liczby losowe &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; z przedziału &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt; i stosujemy transformację &amp;lt;math&amp;gt;G(u)&amp;lt;/math&amp;gt;&lt;br /&gt;
* Test generowanego rozkładu robimy przez porównanie dystrybuanty teoretycznej i empirycznej. Proszę zwrócić uwagę na funkcję estymującą dystrybuantę empiryczną&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_wykladniczy(lam, N):&lt;br /&gt;
	'''funkcja zwraca N liczb z rozkładu wykładniczego o parametrze lam&lt;br /&gt;
	korzystając z metody odwracania dystrybuanty&lt;br /&gt;
	Dystrybuanta rozkładu wykładniczego: F(x) = 1- exp(-lam*x)&lt;br /&gt;
	Funkcja do niej odwrotna: G(u) = -1/lam ln(1-u)'''&lt;br /&gt;
&lt;br /&gt;
	u = np.random.random(N)&lt;br /&gt;
	return -1.0/lam* np.log(1.-u)&lt;br /&gt;
	&lt;br /&gt;
def dystrybuanta(X,od=0, do=4, krok=0.05):&lt;br /&gt;
	'''funkcja zwraca dystrybuantę empiryczną &lt;br /&gt;
	zmiennej X na przedziale (od, do) z krokiem krok'''&lt;br /&gt;
	&lt;br /&gt;
	os_x = np.arange(od,do,krok)&lt;br /&gt;
	nx = len(os_x)&lt;br /&gt;
	N_liczb = len(X)&lt;br /&gt;
	D=np.zeros(nx) #wyzerowany wektor na naszą dystrybuantę&lt;br /&gt;
	for i in range(nx):&lt;br /&gt;
		D[i] = sum(X &amp;lt;= os_x[i])/N_liczb&lt;br /&gt;
	return (os_x, D)&lt;br /&gt;
	&lt;br /&gt;
# testujemy: narysujemy dystrybuantę oczekiwaną i empiryczną&lt;br /&gt;
lam=3&lt;br /&gt;
N=10000&lt;br /&gt;
&lt;br /&gt;
x = np.arange(0,4,0.01)&lt;br /&gt;
F = 1-np.exp(-lam*x)&lt;br /&gt;
X = gen_wykladniczy(lam, N)&lt;br /&gt;
(os_x, F_emp) = dystrybuanta(X,od=0, do=4, krok=0.1)&lt;br /&gt;
py.plot(x,F,'r',label = 'dystrybuanta teoretyczna')&lt;br /&gt;
py.plot(os_x, F_emp,'.b', label = 'dystrybuanta empiryczna')&lt;br /&gt;
py.legend()&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że nie zawsze jest łatwo wyznaczyć efektywnie  &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; &amp;amp;mdash; jest tak na przykład w przypadku rozkładu normalnego. W takich sytuacjach można szukać przybliżonej wartości &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt;, rozwiązując numerycznie równanie:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)=u&amp;lt;/math&amp;gt;, co sprowadza się do znalezienia miejsc zerowych funkcji &amp;lt;math&amp;gt;H(x)=F(x)-u&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem napisz funkcję ''MyGen(N)'' dla rozkładu, którego funkcja gęstości prawdopodobieństwa jest dana wzorem:&lt;br /&gt;
&amp;lt;math&amp;gt; f(x) = \frac{1}{\pi (1+x^{2})} &amp;lt;/math&amp;gt;&lt;br /&gt;
Następnie narysuj dla niego dystrybuantę i dystrybuantę empiryczną na przedziale [-10, 10].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
#f(x) = 1/(π(1+x²))             -- f. gęstości prawdopodobieństwa&lt;br /&gt;
#zatem F(x) = arctg(x)/π + 1/2  -- dystrybuanta&lt;br /&gt;
#zatem F⁻¹(x) = tg(π(x-1/2))    -- f. odwrotna do dystrybuanty&lt;br /&gt;
&lt;br /&gt;
def MyGen(size=1):&lt;br /&gt;
	x=np.random.random(size) # liczby z generatora jednostajnego na przedziale [0,1)&lt;br /&gt;
	y=np.tan(np.pi*(x-1/2))  # korzystamy z metody odwracania dystrybuanty&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
x=MyGen(int(1e6))&lt;br /&gt;
bins=np.linspace(-10,10,101)&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step')&lt;br /&gt;
py.plot(bins,1./(np.pi*(1+bins**2)),'r')&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step',cumulative=True)&lt;br /&gt;
py.plot(bins,np.arctan(bins)/np.pi+0.5,'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8538</id>
		<title>WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8538"/>
		<updated>2021-02-18T10:21:06Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadanie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pojęcia wstępne==&lt;br /&gt;
=== Zmienna losowa===&lt;br /&gt;
;Intuicyjnie: Zmienna losowa to taka zmienna, która przyjmuje pewną konkretną wartość w wyniku przeprowadzenia pomiaru lub eksperymentu. Na przykład zmienną losową jest liczba oczek, która wypada na kostce do gry. Dopóki trzymamy kostkę w ręce to nie wiemy jaką wartość ta zmienna przyjmie, konkretną wartość zmienna ta przyjmuje po rzucie. Jednak w kolejnych rzutach nie wiemy jakie będą jej wartości. &lt;br /&gt;
;Bardziej formalnie:  Zmienna losowa to funkcja przypisująca zdarzeniom elementarnym liczby.&lt;br /&gt;
;Zupełnie formalnie:&lt;br /&gt;
Do formalnej definicji potrzebne jest nam pojęcie przestrzeni probabilistycznej:&lt;br /&gt;
Przestrzeń probabilistyczna to układ trzech elementów &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;, gdzie:&lt;br /&gt;
* &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; jest pewnym zbiorem, zwanym przestrzenią zdarzeń elementarnych,&lt;br /&gt;
* &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest [http://pl.wikipedia.org/wiki/Sigma-ciało &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciałem] podzbiorów zbioru &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;. Elementy tego &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciała nazywane są zdarzeniami losowymi,&lt;br /&gt;
* &amp;lt;math&amp;gt;P: F\rightarrow [0,1]&amp;lt;/math&amp;gt; jest miarą probabilistyczną, tzn.&lt;br /&gt;
** &amp;lt;math&amp;gt;P(A) \ge 0 &amp;lt;/math&amp;gt; dla każdego &amp;lt;math&amp;gt;A \in F&amp;lt;/math&amp;gt;,&lt;br /&gt;
** &amp;lt;math&amp;gt;P(\Omega) = 1&amp;lt;/math&amp;gt;,&lt;br /&gt;
** jeżeli zbiory &amp;lt;math&amp;gt;A_1, A_2,\dots,A_n \in F&amp;lt;/math&amp;gt;  są parami rozłączne, to &amp;lt;math&amp;gt;P\left( \bigcup\limits_{i=1}^{\infty} A_i \right ) = \sum_{i=1}^{\infty} P(A_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Niech  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt; będzie przestrzenią probabilistyczną. '''Zmienną losową''' nazywamy dowolna funkcję &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, określoną na przestrzeni zdarzeń elementarnych &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;, o wartościach ze zbioru liczb rzeczywistych i [http://pl.wikipedia.org/wiki/Funkcja_mierzalna mierzalną] względem przestrzeni  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;. Zmienna losowa jest ciągła jeśli jej zbiór wartości jest ciągły, lub dyskretna, jeśli jej zbiór wartości jest dyskretny.&lt;br /&gt;
&lt;br /&gt;
=== Rozkład prawdopodobieństwa===&lt;br /&gt;
Rozkład prawdopodobieństwa &amp;amp;mdash; (rozkład zmiennej losowej) miara probabilistyczna określona na &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciele podzbiorów zbioru wartości zmiennej losowej, pozwalająca przypisywać prawdopodobieństwa zbiorom wartości tej zmiennej, odpowiadającym zdarzeniom losowym.&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej dyskretnej możemy wprowadzić pojęcie '''funkcji prawdopodobieństwa''':&lt;br /&gt;
&amp;lt;math&amp;gt;P(X=x_i) = p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Przykład: Dla rzutów monetą funkcję prawdopodobieństwa można zobrazować jako tabelkę:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
! Zdarzenie:&lt;br /&gt;
! orzeł&lt;br /&gt;
! reszka&lt;br /&gt;
|-&lt;br /&gt;
|zmienna losowa&lt;br /&gt;
|&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
| prawdopodobieństwo&lt;br /&gt;
| &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; &lt;br /&gt;
| 1/2&lt;br /&gt;
| 1/2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Można też przedstawić ją na wykresie:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta_1.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej ciągłej zamiast funkcji prawdopodobieństwa wprowadzamy '''funkcję gęstości prawdopodobieństwa'''. Jest to funkcja określona na zbiorze liczb rzeczywistych posiadająca następujące własności:&lt;br /&gt;
* jest nieujemna: &amp;lt;math&amp;gt;f(x) \ge 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
* prawdopodobieństwo tego, że zmienna losowa przyjmie wartość z przedziału &amp;lt;math&amp;gt;(a,b]&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; \int_a^b f(x) dx = P(a&amp;lt;X \le b) &amp;lt;/math&amp;gt;&lt;br /&gt;
[[Plik:Funkcja_gestosci_prawdopodobienstwa.png]]&lt;br /&gt;
* Prawdopodobieństwo tego, że zmienna losowa przyjmie dowolną wartość: &amp;lt;math&amp;gt; \int_{-\infty}^{+\infty} f(x) dx = P(-\infty &amp;lt;X \le +\infty) = 1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dystrybuanta ===&lt;br /&gt;
Dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy funkcję &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; określoną na zbiorze liczb rzeczywistych jako:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = P(X \le x)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
czyli wartość dystrybuanty w punkcie &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; jest prawdopodobieństwem, że zmienna losowa przyjmie wartość nie większą niż &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Dla zmiennej dyskretnej:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x)=P(X \le x) = \sum_{x_i&amp;lt;x}{P(X = x_i) } =  \sum_{x_i&amp;lt;x}p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla zmiennej losowej ciągłej z funkcją gęstości prawdopodobieństwa &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = P(X \le x)= \int_{-\infty}^x f(s) ds &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zauważmy ścisły związek dystrybuanty z funkcją prawdopodobieństwa w przypadku dyskretnym i funkcją gęstości prawdopodobieństwa w przypadku ciągłym.&lt;br /&gt;
&lt;br /&gt;
Przykład z monetą:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Momenty ===&lt;br /&gt;
Dla zmiennej losowej można obliczyć momenty zwykłe lub centralne. &lt;br /&gt;
&lt;br /&gt;
;Moment zwykły: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi tej zmiennej. Oblicza się go tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;m_k = E(X^k) =   \sum_{i} {x_i^k p_i}  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; oznacza prawdopodobieństwo, że &amp;lt;math&amp;gt;X = x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt; m_k = E(X^k) =  \int\limits_{-\infty}^{\infty} {x^k f(x)dx}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; jest funkcją gęstości prawdopodobieństwa.&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że pierwszy moment zwykły to średnia.&lt;br /&gt;
&lt;br /&gt;
;Moment centralny: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi funkcji &amp;lt;math&amp;gt;[x_i - E(x_i)]&amp;lt;/math&amp;gt;. Zatem możemy go obliczyć tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left( \left[ X-E(X) \right] ^k \right) =   \sum_{i} {\left[x_i-E(X)\right]^k p_i}  &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left(\left[X-E(X)\right]^k\right) =  \int\limits_{-\infty}^{\infty} {  \left[X-E(X)\right]^k f(x)dx}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uwaga:&lt;br /&gt;
* Drugi moment centralny ma swoją nazwę. Jest to '''wariancja''', często oznaczana przez &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Trzeci moment centralny przydaje się do badania symetrii rozkładu. Przyjmuje on wartość 0 dla zmiennych o rozkładzie symetrycznym, wartości ujemne dla zmiennych o rozkładzie wydłużonym w lewą stronę i wartości dodatnie dla zmiennych o rozkładzie wydłużonym w prawą stronę.  &lt;br /&gt;
* Czwarty moment centralny jest przydatny do konstrukcji miary spłaszczenia rozkładu zmiennej losowej '''kurtozy'''. Definiuje się ją następująco:&lt;br /&gt;
: &amp;lt;math&amp;gt; \mathrm{Kurt} = \frac{\mu_4}{\mu_2^4} - 3 &amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkłady prawdopodobieństwa można podzielić ze względu na wartość kurtozy na rozkłady:&lt;br /&gt;
* mezokurtyczne &amp;amp;mdash; wartość kurtozy wynosi 0, spłaszczenie rozkładu jest podobne do spłaszczenia rozkładu normalnego (dla którego kurtoza wynosi dokładnie 0)&lt;br /&gt;
* leptokurtyczne &amp;amp;mdash; kurtoza jest dodatnia, wartości cechy bardziej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
* platokurtyczne &amp;amp;mdash; kurtoza jest ujemna, wartości cechy mniej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
&lt;br /&gt;
=== Kwantyle ===&lt;br /&gt;
Kwantylem rzędu ''p'', gdzie &amp;lt;math&amp;gt;0 \leqslant p \leqslant 1&amp;lt;/math&amp;gt;, w rozkładzie empirycznym &amp;lt;math&amp;gt; P_{X} &amp;lt;/math&amp;gt;  zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy każdą liczbę &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt;, dla której spełnione są nierówności&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X((-\infty, x_p]) \geqslant p&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
oraz&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X([x_p,\infty)) \geqslant 1-p.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W szczególności, kwantylem rzędu ''p'' jest taka wartość &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; zmiennej losowej, że wartości mniejsze lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej ''p'', zaś wartości większe lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej 1&amp;amp;minus;''p''.&lt;br /&gt;
&lt;br /&gt;
Możemy zatem myśleć o obliczaniu kwantyla tak:&lt;br /&gt;
* zaobserwowaliśmy ''n'' wartości zmiennej losowej,&lt;br /&gt;
* zapiszemy te wartości na liście,&lt;br /&gt;
* następnie listę tę sortujemy w porządku rosnącym,&lt;br /&gt;
* kwantylem rzędu ''p'' jest albo element znajdujący się na liście w pozycji ''np'' jeśli ''np'' jest całkowite albo średnią z elementów położonych najbliżej ''np'' w przeciwnym wypadku.  &lt;br /&gt;
==== Nazwy poszczególnych kwantyli ====&lt;br /&gt;
Kwantyl rzędu 1/2 to inaczej mediana (ściślej zależy to od definicji mediany, przy jej obliczaniu z próbki o parzystej liczbie elementów często stosuje się średnią arytmetyczną dwóch środkowych elementów, szczegóły są w artykule).&amp;lt;br/&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/4, 2/4, 3/4 są inaczej nazywane kwartylami. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/5, 2/5, 3/5, 4/5 to inaczej kwintyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/10, 2/10, ..., 9/10 to inaczej decyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/100, 2/100, ..., 99/100 to inaczej percentyle. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pseudolosowość==&lt;br /&gt;
W obliczeniach numerycznych często korzystamy z liczb &amp;amp;bdquo;losowych&amp;amp;rdquo;. Tak naprawdę sekwencje liczb, których używamy są jedynie pseudolosowe, &lt;br /&gt;
tzn. są wytwarzane w deterministyczny (algorytmiczny) sposób, ale sekwencja generowanych wartości ma pewne cechy losowości. W idealnym przypadku cechą tą jest nieprzewidywalność: na podstawie obserwacji dotychczasowych wartości sekwencji niemożliwe jest podanie kolejnych wartości. W praktyce oznacza to nie możność ustalenie ziarna lub stanu wewnętrznego generatora na podstawie obserwacji dowolnie długiego ciągu wygenerowanych bitów.&lt;br /&gt;
Stan generatora przechowywany jest na zmiennych o skończonej precyzji. Jeśli stan jest przechowywany na &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; bitach to górną granicą na długość unikalnego ciągu liczb jest &amp;lt;math&amp;gt;2^n&amp;lt;/math&amp;gt;. Zazwyczaj unikalna sekwencja jest jednak krótsza. Wynika stąd, że  generatory liczb pseudolosowych mają  okres, po którym sekwencja liczb powtarza się. Podstawowe generatory liczb pseudolosowych wytwarzają liczby podlegające rozkładowi jednostajnemu (płaskiemu).&lt;br /&gt;
&lt;br /&gt;
Istnieją generatory &amp;amp;bdquo;prawdziwych&amp;amp;rdquo; liczb losowych, które są osobnymi urządzeniami. Liczy przez nie dostarczane są pewnymi parametrami jakichś procesów fizycznych, przebiegających w tych urządzeniach (zależnie od producenta). Do naszych zastosowań w zupełności wystarczą liczby generowane przez algorytmy komputerowe.&lt;br /&gt;
&lt;br /&gt;
Proste generatory liczb pseudolosowych można otrzymać jako funkcje używające operacji dzielenia modulo (generatory kongruencyjne):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{n+1}=f(x_n,x_{n-1}, ..., x_{n-k})\mod M&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zakładamy, że argumentami funkcji &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; są liczby całkowite ze zbioru &amp;lt;math&amp;gt;{0, 1, ...,M-1}&amp;lt;/math&amp;gt;. Dla ustalenia uwagi mogą to być generatory liniowe typu: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; x_{n+1}= (ax_{n} + c )\mod M&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład generatora liniowego ===&lt;br /&gt;
Dla przykładu zaimplementujmy jeden taki generator:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N=1):&lt;br /&gt;
    '''Przykład generatora liniowego. &lt;br /&gt;
       funkcja zwraca liczby pseudolosowe z przedziału [0,1)&lt;br /&gt;
       x - ziarno, &lt;br /&gt;
       N - ile liczb zwrócić'''&lt;br /&gt;
    m=8191&lt;br /&gt;
    a=101&lt;br /&gt;
    c=1731&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i]= x/m&lt;br /&gt;
    return y    &lt;br /&gt;
x=gen(23,100000)&lt;br /&gt;
py.hist(x)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Liczby &amp;lt;tt&amp;gt; m, a, c&amp;lt;/tt&amp;gt; są parametrami generatora. Liczba &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;, od której startuje generator nazywana jest ziarnem generatora {{ang|seed}}.&lt;br /&gt;
Funkcja &amp;lt;tt&amp;gt;py.hist()&amp;lt;/tt&amp;gt; zlicza i wyrysowuje histogram (czy wiemy co to jest histogram?).&lt;br /&gt;
* Wywołaj funkcję &amp;lt;tt&amp;gt;gen&amp;lt;/tt&amp;gt; dla tego samego ziarna kilka razy zaobserwuj powtarzalność wartości.&lt;br /&gt;
&lt;br /&gt;
W module &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; mamy do dyspozycji generator liczb pseudolosowych oparty na algorytmie [http://pl.wikipedia.org/wiki/Mersenne_Twister  Mersenne Twister ]&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
kod demonstrujacy pseudolosowosc&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import numpy as np&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(5)&lt;br /&gt;
&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
y=np.random.random(5)&lt;br /&gt;
print('x:', x)&lt;br /&gt;
print('y:', y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Zaobserwuj powtarzalność wartości.&lt;br /&gt;
* Wygeneruj i wykreśl 200 kolejnych liczb pseudolosowych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(200)&lt;br /&gt;
&lt;br /&gt;
py.plot(x,'.')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testy jakości===&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Dla wyżej wymienionych generatorów, proszę wykonać następujące testy:&lt;br /&gt;
* zobrazować rozkład prawdopodobieństwa (narysować histogram);&lt;br /&gt;
&amp;lt;!-- Tymczasowo wylaczane przez RK 14.02.2013 * test zgodności momentów &amp;amp;mdash; czy momenty obliczone dla wygenerowanych liczb są takie jak przewiduje teoria;--&amp;gt;&lt;br /&gt;
* test korelacji na rysunku: sporządzić wykres gdzie na jednej osi są wartości &amp;lt;math&amp;gt;x_n&amp;lt;/math&amp;gt; na drugiej zaś wartości &amp;lt;math&amp;gt;x_{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Tymczasowo wylaczone przez RK 14.02.2013 # momenty dla rozkładu jednostajnego [0, 1]&lt;br /&gt;
# mu = 0.5&lt;br /&gt;
# var = 1/12&lt;br /&gt;
# kurtoza -6/5&lt;br /&gt;
mu=np.mean(x)&lt;br /&gt;
var = np.sum((x - mu)**2)/N&lt;br /&gt;
kurtoza = np.sum((x-mu)**4)/N/var**2-3&lt;br /&gt;
print u'wartości teoretyczne:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':0.5,'v':1.0/12,'k':-6.0/5}&lt;br /&gt;
print u'wartości z próby:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':mu,'v':var,'k':kurtoza} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N):&lt;br /&gt;
    m=8765132137&lt;br /&gt;
    a=42347&lt;br /&gt;
    c=1731&lt;br /&gt;
&lt;br /&gt;
    ## warto porównać wynik dla poniższych parametrów&lt;br /&gt;
    #m=8191&lt;br /&gt;
    #a=101&lt;br /&gt;
    #a=107&lt;br /&gt;
&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i] = x/m&lt;br /&gt;
    return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=10000&lt;br /&gt;
x=gen(23,N)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.hist(x,30,normed = True)&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(x[:-1],x[1:],'.')&lt;br /&gt;
py.xlabel('x_n')&lt;br /&gt;
py.ylabel('x_{n+1}')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Bardziej wyczerpujące baterie testów jakości generatorów można znaleźć na przykład w:&lt;br /&gt;
* http://csrc.nist.gov/groups/ST/toolkit/rng/index.html&lt;br /&gt;
* http://www.phy.duke.edu/~rgb/General/rand_rate.php&lt;br /&gt;
&lt;br /&gt;
== Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; ==&lt;br /&gt;
=== Wstęp ===&lt;br /&gt;
Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; są zaimplementowane jako dwie klasy: &amp;lt;tt&amp;gt;stats.rv_continuous&amp;lt;/tt&amp;gt;  (bazuje na niej ponad 80 typów rozkładów ciągłych zmiennych losowych) i &amp;lt;tt&amp;gt;stats.rv_discrete&amp;lt;/tt&amp;gt; (bazuje na niej 10 typów rozkładów dyskretnych zmiennych losowych). Aktualną listę dostępnych rozkładów można uzyskać np. przy pomocy następującego skryptu:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
from scipy import stats&lt;br /&gt;
dc= [d for d in dir(stats) if isinstance(getattr(stats,d), stats.rv_continuous)]&lt;br /&gt;
print(dc)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Przykładowo: zmienne losowe o rozkładzie normalnym są reprezentowane przez klasę &amp;lt;tt&amp;gt;norm&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Funkcje przydatne do pracy ze zmiennymi losowymi dostępne są jako metody ===&lt;br /&gt;
&lt;br /&gt;
Obiekty reprezentujące zmienne losowe podlegające konkretnym rozkładom posiadają następujące metody:&lt;br /&gt;
* &amp;lt;tt&amp;gt;rvs&amp;lt;/tt&amp;gt;: '''generator zmiennych losowych''' danego typu;&lt;br /&gt;
* &amp;lt;tt&amp;gt;cdf&amp;lt;/tt&amp;gt;: '''dystrybuanta''' (ang. Cumulative Distribution Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;ppf&amp;lt;/tt&amp;gt;: '''funkcja odwrotna do dystrybuanty''' (ang. Percent Point Function (Inverse of CDF));&lt;br /&gt;
* &amp;lt;tt&amp;gt;stats&amp;lt;/tt&amp;gt;: zwraca '''momenty centralne rozkładu''' (średnią, wariancję, skośność i kurtozę);&lt;br /&gt;
* &amp;lt;tt&amp;gt;moment&amp;lt;/tt&amp;gt;: zwraca niecentralne momenty rozkładu.&lt;br /&gt;
* &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt;: '''funkcja gęstości prawdopodobieństwa''' (ang. Probability Density Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;pmf&amp;lt;/tt&amp;gt; dla rozkładów dyskretnych  &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt; jest zamienione na '''funkcję prawdopodobieństwa''' (ang. probability mass function; ''masa'' przez analogię z gęstością masy i masą punktową);&lt;br /&gt;
* &amp;lt;tt&amp;gt;sf&amp;lt;/tt&amp;gt;: funkcja przeżycia (ang. Survival Function) (1&amp;amp;minus;CDF);&lt;br /&gt;
* &amp;lt;tt&amp;gt;isf&amp;lt;/tt&amp;gt;: funkcja odwrotna do funkcji przetrwania (ang. Inverse Survival Function (Inverse of SF));&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Zobaczmy działanie tych metod dla zmiennych losowych z rozkładu normalnego:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
x = st.norm.rvs(size=10000)&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
py.hist(x,bins=bins)&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zmienne losowe mogą być używane na jeden z dwóch sposobów: można podawać wszystkie parametry opisujące rozkład w każdym wywołaniu metody, albo wytworzyć obiekt reprezentujący rozkład o konkretnych parametrach (w dokumentacji &amp;lt;tt&amp;gt;scipy&amp;lt;/tt&amp;gt; jest to nazywane zamrażaniem parametrów rozkładu, ang. ''freezing'')&lt;br /&gt;
Jako przykład zobaczmy funkcję odwrotną do dystrybuanty rozkładu normalnego N(2, 9): &lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; import scipy.stats as st&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.norm.ppf(0.05, loc=2, scale=3))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; my_norm = st.norm(loc=2,scale=3)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(my_norm.ppf(0.05))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
&lt;br /&gt;
=== Pomoc do poszczególnych rozkładów ===&lt;br /&gt;
Pełną dokumentację każdego rozkładu mamy dostępną w postaci docstringów. Dla przykładu:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
help(st.nct)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
wypisuje pełną informację z docstring o niecentralnym rozkładzie ''t''.&lt;br /&gt;
Podstawowe informacje można uzyskać wypisując treść pola &amp;lt;tt&amp;gt;extradoc&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.nct.extradoc)&lt;br /&gt;
 Non-central Student T distribution&lt;br /&gt;
 df**(df/2) * gamma(df+1)&lt;br /&gt;
 nct.pdf(x,df,nc) = --------------------------------------------------&lt;br /&gt;
 2**df*exp(nc**2/2)*(df+x**2)**(df/2) * gamma(df/2)&lt;br /&gt;
 for df &amp;gt; 0, nc &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Wypisz pomoc dla (centralnego) rozkładu ''t'' i sprawdź jakie parametry on przyjmuje. Wybierz dowolnie ich wartości, a następnie posiłkując się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład|przykładem]]:&lt;br /&gt;
# Wygeneruj 10000 liczb z rozkładu ''t'' i narysuj ich histogram.&lt;br /&gt;
# Wykreśl gęstość prawdopodobieństwa tego rozkładu.&lt;br /&gt;
# Wykreśl dystrybuantę.&lt;br /&gt;
# Wykreśl funkcję odwrotną do dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=10000       # ile liczb generujemy&lt;br /&gt;
&lt;br /&gt;
# przykładowe parametry rozkładu&lt;br /&gt;
df = 3        # liczba stopni swobody&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
x = st.t.rvs(size=N, df=df)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;) #histtype=&amp;quot;step&amp;quot; daje nam przezroczysty histogram&lt;br /&gt;
x = st.norm.rvs(size=N)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.t.pdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y,'g')&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.t.cdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z,'g')&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
 &lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.t.ppf(os_p, df=df)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f,'g')&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
py.legend([&amp;quot;Rozkład t-Studenta&amp;quot;,&amp;quot;Rozkład normalny&amp;quot;])&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Statystyki i estymatory ===&lt;br /&gt;
Estymator jest statystyką służącą do szacowania pewnej wielkości (np. parametru) na podstawie próby losowej (np. danych eksperymentalnych). Na wykładzie poznaliśmy m.in. takie statystki jak [[WnioskowanieStatystyczne/Momenty|wartość oczekiwana, wariancja i mediana]], z których ostatnia jest szczególnym przypadkiem [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Kwantyle|kwantylu]]. Moduły numpy oraz scipy.stats umożliwiają łatwe estymowanie niektórych statystyk, a także obliczanie ich rzeczywistych wartości, jeśli znamy parametry rozkładu.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jako przykład niech posłuży poniższy kod, w którym szukamy wartości estymatorów wartości oczekiwanej oraz wariancji rozkładu normalnego na podstawie próby losowej, a wynik porównujemy z wartościami rzeczywistymi:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
m=2&lt;br /&gt;
s=0.5&lt;br /&gt;
rozklad = st.norm(m,s) #definiujemy rozkład normalny&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()  # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
var  = rozklad.var()   # rzeczywiste odchylenie standardow&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)  # estymowana wartość oczekiwana&lt;br /&gt;
var_est  = np.var(x)   # estymowana wariancja&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem wygeneruj próby losowe dla następujących rozkładów:&lt;br /&gt;
# Rozkład normalny &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; = 100, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; = 2.&lt;br /&gt;
# Rozkład dwumianowy p = 0.4, n =10.&lt;br /&gt;
# Rozkład poissona &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; = 4.&lt;br /&gt;
# Rozkład jednostajny na przedziale [2, 6).&lt;br /&gt;
Następnie estymuj na ich podstawie wartości poniższych statystyk i porównaj je z wartościami obliczonymi na podstawie znanych parametrów rozkładu:&lt;br /&gt;
# Wartość oczekiwana.&lt;br /&gt;
# Odchylenie standardowe.&lt;br /&gt;
# Wariancja.&lt;br /&gt;
# Mediana.&lt;br /&gt;
# Kurtoza.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
Poniżej znajduje się przykładowe rozwiązanie dla rozkładu dwumianowego. Aby uzyskać rozwiązanie dla pozostałych rozkładów wystarczy dostosować pierwszą część kodu, gdzie definiowany jest rozkład.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
n=10&lt;br /&gt;
p=0.4&lt;br /&gt;
rozklad = st.binom(n,p) #definiujemy nasz rozkład&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
# dalsza część jest jest niezależna od rodzaju rozkładu, który zdefiniowaliśmy powyżej&lt;br /&gt;
###########################################################################################&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()           # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
std  = rozklad.std()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
var  = rozklad.var()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
med  = rozklad.median()         # rzeczywista mediana&lt;br /&gt;
kurt = float(rozklad.stats('k'))# rzecz. kurtoza (funkcja zwraca jednoelementową tablicę&lt;br /&gt;
                                # numpy.ndarray, więc trzeba ją ręcznie zrzutować na float)&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)     # estymowana wartość oczekiwana&lt;br /&gt;
std_est  = np.std(x)      # estymowane odchylenie standardowe&lt;br /&gt;
var_est  = np.var(x)      # estymowana wariancja&lt;br /&gt;
med_est  = np.median(x)   # estymowana mediana&lt;br /&gt;
kurt_est = st.kurtosis(x) # estymowana kurtoza&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Odchylenie standardowe rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(std,std_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
print(&amp;quot;Mediana rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(med,med_est))&lt;br /&gt;
print(&amp;quot;Kurtoza rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(kurt,kurt_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generowanie zmiennych losowych podlegającym różnym rozkładom prawdopodobieństwa ==&lt;br /&gt;
Podstawowe typy generatorów liczb losowych wytwarzają liczby losowe podlegające rozkładowi jednostajnemu. Zastanowimy sie teraz jak mając zmienne losowe z rozkładu jednostajnego wytworzyć zmienne losowe o innych rozkładach.&lt;br /&gt;
=== Rozkład dwumianowy ===&lt;br /&gt;
Zmienna losowa, która zlicza liczbę sukcesów &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; próbach, gdzie &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest prawdopodobieństwem sukcesu w pojedynczej próbie, podlega rozkładowi dwumianowemu&lt;br /&gt;
[[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_dwumianowy więcej o rozkładzie dwumianowym]]: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_n(k)=\left(  &lt;br /&gt;
\begin{array}{c} &lt;br /&gt;
n \\&lt;br /&gt;
k&lt;br /&gt;
\end{array} &lt;br /&gt;
\right) p^kq^{n-k}=\frac{n!}{k!(n-k)!}p^kq^{n-k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Jak z rozkładu jednostajnego wytworzyć zmienne losowe o rozkładzie dwumianowym?''&lt;br /&gt;
* Wykonać symulację!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_binom(n,p,N):&lt;br /&gt;
	'''funkcja zwracająca zmienną losową z rozkładu dwumianowego: &lt;br /&gt;
	ilość sukcesów w n próbach przy prawdopodobieństwie sukcesu p&lt;br /&gt;
	parametry:&lt;br /&gt;
		n: liczba prób&lt;br /&gt;
		p: prawdopodobieństwo sukcesu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będącymi liczbami sukcesów&lt;br /&gt;
	'''&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję n liczb z rozkładu jednostajnego [0,1) i jako sukcesy&lt;br /&gt;
	#traktuję wylosowanie liczby nie większej niż p&lt;br /&gt;
	r=np.random.rand(N,n)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
n=20&lt;br /&gt;
N=100000&lt;br /&gt;
p=0.8&lt;br /&gt;
x = gen_binom(n,p,N)&lt;br /&gt;
bins =range(22) #granice binów&lt;br /&gt;
py.hist(x,bins)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Z oszacowań agencji wynika, że średnio 2 z 3 reklam spotyka się z pozytywnym odzewem. Akcja marketingowa obejmuje 12 reklam. Niech &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; oznacza liczbę reklam skutecznych. Czy &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi dwumianowemu?&lt;br /&gt;
Jakie jest prawdopodobieństwo, że 10 reklam będzie skutecznych?&lt;br /&gt;
Prawdopodobieństwo obliczyć ze wzoru oraz korzystając z symulacji.&lt;br /&gt;
&lt;br /&gt;
Wskazówka informacje o zmiennych z rozkładu dwumianowego (&amp;lt;tt&amp;gt;binom&amp;lt;/tt&amp;gt;) można uzyskać tak:&lt;br /&gt;
 # &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
 #   Binomial distribution&lt;br /&gt;
 #&lt;br /&gt;
 #   Counts the number of successes in *n* independent&lt;br /&gt;
 #   trials when the probability of success each time is *pr*.&lt;br /&gt;
 #&lt;br /&gt;
 #   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
 #   for k in {0,1,...,n}&lt;br /&gt;
Odp: ''p'' = 0,127&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
p=2/3 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n=12   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
&lt;br /&gt;
# ze wzoru &lt;br /&gt;
&lt;br /&gt;
# &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
#   Binomial distribution&lt;br /&gt;
#&lt;br /&gt;
#   Counts the number of successes in *n* independent&lt;br /&gt;
#   trials when the probability of success each time is *pr*.&lt;br /&gt;
#&lt;br /&gt;
#   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
#   for k in {0,1,...,n}&lt;br /&gt;
p_wz = st.binom.pmf(10,n,p)&lt;br /&gt;
print(p_wz)&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =100000 # liczba powtórzeń symulacji&lt;br /&gt;
k = np.zeros(N_powt)&lt;br /&gt;
for i in range(N_powt):&lt;br /&gt;
	r = rnd.random(size=n) # symulowana akcja reklamowa &lt;br /&gt;
	k[i]=np.sum(r&amp;lt;=p)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k==10)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Na egzaminie testowym jest 30 pytań. Na każde pytanie są podane cztery możliwe odpowiedzi, z czego tylko jedna jest prawdziwa. Za prawidłową odpowiedź student otrzymuje 1 punkt a za fałszywą &amp;amp;minus;0,5 punktu. Próg zaliczenia wynosi 15 punktów. Oblicz prawdopodobieństwo, że udzielając czysto losowych odpowiedzi student zaliczy egzamin.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
Liczba prawidłowych odpowiedzi w teście może być potraktowana jako liczba sukcesów k w n = 30 próbach. Prawdopodobieństwo sukcesu pojedynczego zdarzenia (prawidłowa odpowiedź na jedno pytanie) wynosi p = 1/4. Ze względu na obecność ujemnych punktów za fałszywe odpowiedzi zmienia się efektywna liczba punktów wymaganych do zaliczenia zgodnie z równaniem:&lt;br /&gt;
k-0.5*(30-k) = 15&lt;br /&gt;
co daje k = 20&lt;br /&gt;
Zatem problem redukuje się do wyznaczenia prawdopodobieństwa co najmniej 20 sukcesów w 30 próbach, przy czym prawdopodobieństwo sukcesu w 1 próbie wynosi p=1/4:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
p = 1./4 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n = 30   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
k_kryt = 20&lt;br /&gt;
# ze wzoru &lt;br /&gt;
p_wz = np.sum(st.binom.pmf(range(k_kryt,n+1),n,p))&lt;br /&gt;
print(p_wz)&lt;br /&gt;
&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =10000000 # liczba powtórzeń symulacji&lt;br /&gt;
r = np.random.random(size=(n,N_powt)) # symulowany test &lt;br /&gt;
k = np.sum(r&amp;lt;=p,0)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k&amp;gt;=20)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład Poissona ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(k)=\frac{\mu^k e^{-\mu}}{k!}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkładowi Poissona podlegają zmienne losowe zliczające w jednostce czasu liczbę zdarzeń o niskim prawdopodobieństwie zajścia. Np. liczba rozpadów promieniotwórczych na jednostkę czasu [[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_Poissona więcej o rozkładzie Poissona]]&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Lekarz pełniący dyżur w szpitalu jest wzywany do pacjentów średnio 3 razy w ciągu nocy. Załóżmy, że liczba wezwań na noc podlega rozkładowi Poissona. Jakie jest prawdopodobieństwo, że noc upłynie lekarzowi spokojnie?&lt;br /&gt;
U nas &amp;lt;math&amp;gt;\mu=3&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt; więc&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(0) = \frac{3^0e^{-3}}{0!} = e^{-3} = 0,0498&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jak ze zmiennych podlegających rozkładowi jednostajnemu uzyskać zmienne podlegające rozkładowi Poissona?&lt;br /&gt;
&lt;br /&gt;
Wykonać symulację wynikającą z następujących spostrzeżeń:&lt;br /&gt;
&lt;br /&gt;
* Weźmy jednostkę czasu. Ma w niej zachodzić średnio &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; zdarzeń. &lt;br /&gt;
* Podzielmy jednostkę czasu na ''NT'' odcinków o jednakowej długości. &lt;br /&gt;
* Prawdopodobieństwo, że zdarzenie zajdzie w konkretnym odcinku jest &amp;lt;math&amp;gt;p=\frac{\mu}{NT}&amp;lt;/math&amp;gt; Takie prawdopodobieństwo ma też wylosowanie przy pomocy generatora liczb z rozkładu jednostajnego [0,1) liczby nie większej niż ''p''. &lt;br /&gt;
* Zatem, aby wytworzyć jedną liczbę z rozkładu Poissona można policzyć ile spośród ''NT'' liczb z rozkładu jednostajnego [0,1) jest nie większych niż ''p''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
def gen_poiss(mi,NT,N):&lt;br /&gt;
	'''funkcja zwracająca zmienne losowe z rozkładu poissona: &lt;br /&gt;
	średnia ilość zdarzeń o niskim prawdopodobieństwie w jednostce czasu&lt;br /&gt;
	parametry:&lt;br /&gt;
		mi: średnia liczba zdarzeń&lt;br /&gt;
		NT: liczba odcinków czasu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będących zliczeniami zdarzeń&lt;br /&gt;
	'''&lt;br /&gt;
	p = float(mi)/NT&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję NT liczb z rozkładu jednostajnego [0,1) i jako zajście zdarzenia&lt;br /&gt;
	# traktuję wylosowanie liczby nie większej niż p. Ilość zdarzeń to liczba z rozkładu Poissona&lt;br /&gt;
	r=np.random.rand(N,NT)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
 &lt;br /&gt;
# kod testujący&lt;br /&gt;
mi=4&lt;br /&gt;
N=100000&lt;br /&gt;
NT = 10000&lt;br /&gt;
x = gen_poiss(mi,NT,N)&lt;br /&gt;
bins =np.arange(int(x.max()+1))-0.5&lt;br /&gt;
py.hist(x,bins,normed=True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# porównanie z generatorami scipy.stats&lt;br /&gt;
p=mi/NT&lt;br /&gt;
k=np.arange(x.max()+1)&lt;br /&gt;
B=st.binom.pmf(k,NT,p)&lt;br /&gt;
py.plot(k,B,'ro')&lt;br /&gt;
P=st.poisson.pmf(k,mi)&lt;br /&gt;
py.plot(k,P,'go')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład normalny i Centralne Twierdzenie Graniczne ===&lt;br /&gt;
Gęstość prawdopodobieństwa [[WnioskowanieStatystyczne/Rozklady-przyklady#Rozk.C5.82ad_Gaussa| rozkładu normalnego]] dana jest wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{ -\frac{(x-\mu)^2}{2 \sigma^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie: &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; &amp;amp;mdash; średnia, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; &amp;amp;mdash; odchylenie standardowe (&amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; &amp;amp;mdash; wariancja).&lt;br /&gt;
&lt;br /&gt;
Jeden ze  sposóbw wytwarzania zmiennych losowych o rozkładzie normalnym  polega na zastosowaniu [[WnioskowanieStatystyczne/CLT| Centralnego Twierdzenia Granicznego]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;X=\frac{\sqrt{12}}{\sqrt{N}}\left(\sum_{n=1}^N Y_n -\frac{N}{2}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; zmienna losowa z rozkładu jednostajnego &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;&lt;br /&gt;
W granicy dużych &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; rozkład zmiennej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; dąży do rozkładu normalnego &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt;, która zwraca liczbę losową ''X'' otrzymaną zgodnie powyższym wzorem  przez sumowanie &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt; liczb z rozkładu jednostajnego.&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG(N, N_liczb)&amp;lt;/tt&amp;gt; korzystającą z &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt; i zwracającą zadaną ilość liczb &amp;lt;tt&amp;gt;N_liczb&amp;lt;/tt&amp;gt;&lt;br /&gt;
* narysować histogramy 10 000 liczb &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; uzyskanych kolejno dla &amp;lt;math&amp;gt;N={1,2,...,12}&amp;lt;/math&amp;gt;&lt;br /&gt;
* Jakie parametry charakteryzują rozkład do którego zbiegają sumy? Przy każdym z powyższych histogramów wypisz średnią i wariancję z próby (funkcje &amp;lt;tt&amp;gt;np.mean&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;np.var&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
 &lt;br /&gt;
def gen_CTG_1(N):&lt;br /&gt;
	'''Funkcja generująca pojedynczą zmienną losową będącą sumą N liczb z rozkładu jednostajnego [0,1)&lt;br /&gt;
	pomnożoną przez czynnik normujący zapewniający wariancję równą 1.&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		jedną liczbę losową'''&lt;br /&gt;
	X = np.sqrt(12/N) * (np.sum(rnd.random(N)) - N/2)&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
def gen_CTG(N,N_liczb):&lt;br /&gt;
	'''Funkcja zwraca wektor (tablicę) zmiennych losowych będących sumami N liczb z rozkładu jednostajnego [0,1).&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
		N_liczb: ilość liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N_liczb losowych'''&lt;br /&gt;
&lt;br /&gt;
	X=np.zeros(N_liczb)&lt;br /&gt;
&lt;br /&gt;
	for i in range(N_liczb):&lt;br /&gt;
		X[i] = gen_CTG_1(N)&lt;br /&gt;
&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
Nmax=12&lt;br /&gt;
&lt;br /&gt;
for N in range(1,Nmax+1):&lt;br /&gt;
	X=gen_CTG(N,N_liczb)&lt;br /&gt;
	py.subplot(3,4,N)&lt;br /&gt;
	bins = np.arange(-4,4,0.1)&lt;br /&gt;
	py.hist(X,bins=bins,normed=True)&lt;br /&gt;
	py.title(&amp;quot;N=%i, µ=%.2g, σ²=%.2g&amp;quot;%(N, X.mean(), X.var(ddof=1)))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie: transformacja rozkładu normalnego ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozkład o średniej 0 i wariancji 1 (notacja  &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;) jest nazywany rozkładem standardowym i często jest oznaczany literą &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Dokonując odpowiedniej transformacji można z rozkładu &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; uzyskać dowolny inny rozkład normalny. &lt;br /&gt;
&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować 100000 zmiennych losowych z rozkładu &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.rvs(loc=0, scale=1, size=100000)&amp;lt;/tt&amp;gt;) &lt;br /&gt;
* przetransformować je do zmiennych losowych &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt;. &lt;br /&gt;
* narysować histogramy zmiennych przed i po transformacji.&lt;br /&gt;
* narysować rozkład gęstości prawdopodobieństwa dla rozkładu &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.pdf(...)&amp;lt;/tt&amp;gt;) .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
Z=st.norm.rvs(loc=0,scale=1,size=100000) #losowanie liczb z rozkładu N(0,1) (czyli Z)&lt;br /&gt;
&lt;br /&gt;
std=9&lt;br /&gt;
mu=2&lt;br /&gt;
X=Z*std+mu #transformacja do σ=9, µ=2&lt;br /&gt;
&lt;br /&gt;
szerokosc_binu=0.5&lt;br /&gt;
bins=np.arange(-40,40.5,szerokosc_binu) #te same granice binów dla obu histogramów&lt;br /&gt;
&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(Z,bins=bins,normed=True,label=&amp;quot;histogram przed transformacją&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(Z.mean(),Z.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(X,bins=bins,normed=True,label=&amp;quot;histogram po transformacji&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
PDF=st.norm.pdf(bins,loc=mu,scale=std) #modelowa gęstość prawdopodobieństwa dla σ=9, µ=2&lt;br /&gt;
py.plot(bins+szerokosc_binu/2,PDF,&amp;quot;ro&amp;quot;,label=&amp;quot;gęstość prawd.&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(X.mean(),X.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Transformacja Boxa-Mullera====&lt;br /&gt;
To inna popularna metoda  metoda generowania liczb losowych o rozkładzie normalnym, na podstawie dwóch wartości zmiennej o rozkładzie jednostajnym na przedziale [0,1) http://en.wikipedia.org/wiki/Box-Muller_transform,  ale nie będziemy się nią tu szerzej zajmować.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Producent silników twierdzi, że jego silniki mają średnią moc 220 KM, a odchylenie standardowe wynosi 15 KM. Potencjalny klient testuje 100 silników. Jakie jest prawdopodobieństwo, że średnia z próby będzie mniejsza niż 217 KM?&lt;br /&gt;
&lt;br /&gt;
Przypomnijmy, że z CTG dla dużych liczebności próby  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\bar x \sim N(\mu,\sigma^2/n)&amp;lt;/math&amp;gt; [[WnioskowanieStatystyczne/Statystyki_i_estymatory#Estymator_warto.C5.9Bci_oczekiwanej|(dowód)]]. Zatem szukamy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( Z&amp;lt;\frac{217-\mu}{\frac{\sigma}{ \sqrt{n}}} \right)  = P\left( Z&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}} \right)=P(Z&amp;lt;-2)=0,0228&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.norm.cdf(-2)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu normalnego: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
sig=15&lt;br /&gt;
N_prob=100&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e4)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadania====&lt;br /&gt;
Teraz kilka najprostszych zadań dotyczących rozkładu normalnego:&lt;br /&gt;
* Znajdźmy prawdopodobieństwo, że ''Z'' &amp;lt; &amp;amp;minus;2,47. Proszę zrobić to na dwa sposoby: raz z użyciem wygenerowanych zmiennych z rozkładu normalnego, drugi raz z użyciem dystrybuanty   &amp;lt;tt&amp;gt;norm.cdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
[Odp: ''p'' = 0,0068]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = -2.47&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(Z &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf(z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znaleźć prawdopodobieństwo ''P''(|''Z''| &amp;lt; 2)&lt;br /&gt;
[Odp:  ''p'' = 0,9545]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = 2&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(np.abs(Z) &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf( z_crit, loc=0, scale=1) - st.norm.cdf( -z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Koncentracja zanieczyszczeń w półprzewodniku używanym do produkcji procesorów podlega rozkładowi normalnemu o średniej 127 cząsteczek na milion i odchyleniu standardowemu 22. Półprzewodnik może zostać użyty jedynie gdy koncentracja zanieczyszczeń spada poniżej 150 cząstek na milion. Jaka proporcja półprzewodników nadaje się do użycia?&lt;br /&gt;
Prawdopodobieństwo obliczyć korzystając z dystrybuanty rozkładu normalnego oraz z symulacji.&lt;br /&gt;
[Odp: ''p'' = 0,852]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu=127&lt;br /&gt;
sig=22&lt;br /&gt;
m_kryt=150&lt;br /&gt;
p=st.norm.cdf(m_kryt, loc = mu, scale = sig )&lt;br /&gt;
print('proporcja odczytana z dystrybuanty rozkładu normalnego: %4g' %p)&lt;br /&gt;
# symulacja&lt;br /&gt;
N_prob=10000&lt;br /&gt;
seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
p = sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
bins = np.arange(60,200,5)&lt;br /&gt;
h=py.hist(seria,bins);&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %.4g' %p1)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład t ===&lt;br /&gt;
&lt;br /&gt;
Gdy nie znamy wariancji populacji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; używamy w jego miejsce estymatora wariancji próby &amp;lt;math&amp;gt;s^2&amp;lt;/math&amp;gt; danego wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s^2 =\frac{\sum(\bar x - x_i)^2}{n-1} &amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie ''n'' &amp;amp;mdash; rozmiar próby&lt;br /&gt;
&lt;br /&gt;
Wtedy rozkład &amp;lt;math&amp;gt;Y=\frac{\bar X -\mu}{\frac{s}{\sqrt{n}}}&amp;lt;/math&amp;gt; nie podlega rozkładowi normalnemu. Jeśli populacja &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi normalnemu to &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; podlega  [[WnioskowanieStatystyczne/Test_t |rozkładowi ''t'' ]] z  ''n''&amp;amp;minus;1 stopniami swobody.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy na symulacji co to zmienia. Proszę obejrzeć wyniki dla kilku wartości &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
N=3&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
mu=2&lt;br /&gt;
sigma=1&lt;br /&gt;
&lt;br /&gt;
y_wyidealizowane=np.zeros(N_liczb)&lt;br /&gt;
m_populacji=np.zeros(N_liczb)&lt;br /&gt;
s_populacji=np.zeros(N_liczb)&lt;br /&gt;
y_estymowane=np.zeros(N_liczb)&lt;br /&gt;
m_estymowane=np.zeros(N_liczb)&lt;br /&gt;
s_estymowane=np.zeros(N_liczb)&lt;br /&gt;
for i in range(N_liczb):&lt;br /&gt;
    x=st.norm.rvs(loc=mu,scale=sigma,size=N)&lt;br /&gt;
    m_populacji[i]=mu&lt;br /&gt;
    s_populacji[i]=sigma/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    m_estymowane[i]=np.mean(x)&lt;br /&gt;
    s_estymowane[i]=np.std(x,ddof=1)/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    y_wyidealizowane[i]=(m_estymowane[i]-mu)/(s_populacji[i])&lt;br /&gt;
    y_estymowane[i]=(m_estymowane[i]-mu)/(s_estymowane[i])&lt;br /&gt;
 &lt;br /&gt;
py.subplot(311)&lt;br /&gt;
py.title(u'średnia (wartość oczekiwana)')&lt;br /&gt;
py.plot(m_estymowane,label=&amp;quot;estymowana&amp;quot;)&lt;br /&gt;
py.plot(m_populacji,'r',label=&amp;quot;populacji&amp;quot;)&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(312)&lt;br /&gt;
py.title('odchylenie standardowe')&lt;br /&gt;
py.plot(s_estymowane,label=&amp;quot;estymowane&amp;quot;)&lt;br /&gt;
py.plot(s_populacji,'r',label='populacji')&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(325)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji wyidealizowanej')&lt;br /&gt;
py.hist(y_wyidealizowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.subplot(326)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji estymowanej')&lt;br /&gt;
py.hist(y_estymowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Dział kontroli jakości producenta silników testuje 10 egzemplarzy silnika nowego typu. Uzyskano wartość średnią 220 KM oraz odchylenie standardowe równe 15 KM. Jakie jest prawdopodobieństwo, że klient, który zamówi 100 silników, otrzyma partię, w której średnia będzie mniejsza niż 217 KM? Wykonaj obliczenia oraz symulację. Porównaj wynik z wcześniejszym [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład_5|przykładem]], gdzie znaliśmy odchylenie standardowe z innego źródła (nie było ono estymowane z próby).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- =====Rozwiązanie=====&lt;br /&gt;
&lt;br /&gt;
Tym razem spoglądamy na problem z punktu widzenia działu kontroli jakości, dla którego zarówno średnia, jak i odchylenie standardowe są wartościami estymowanymi z próby. Zatem szukamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( t&amp;lt;\frac{217-\mu}{\frac{s}{ \sqrt{n_{klient}}}}, df=n_{kontrola}-1 \right) = P\left( t&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}}, df=10-1 \right)=&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;P(t&amp;lt;-2, df=9) = 0,0383&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.t.cdf(-2,df=9)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu t-Studenta: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
s=15&lt;br /&gt;
N_prob_kontrola= 10 #liczba silników skontrolowana przez dział kontroli jakości&lt;br /&gt;
N_prob_klient  =100 #liczba silników kupowanych przez klienta&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e5)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.t.rvs(df=N_prob_kontrola-1,loc=mu, scale=s, size=N_prob_klient)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inne rozkłady uzyskiwane przez transformacje ===&lt;br /&gt;
====Metoda odwracania dystrybuanty====&lt;br /&gt;
&amp;lt;!--[http://wazniak.mimuw.edu.pl/index.php?title=Rachunek_prawdopodobieństwa_i_statystyka/Wykład_14:_Komputerowe_metody_statystyki]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Niech &amp;lt;math&amp;gt;\xi&amp;lt;/math&amp;gt; będzie zmienną losową o rozkładzie jednostajnym na przedziale &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;. Jej dystrybuanta &amp;lt;math&amp;gt;J&amp;lt;/math&amp;gt; dana jest więc worem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
J(x) = P(\xi \le x) = \left\{ &lt;br /&gt;
\begin{array}{lrl}&lt;br /&gt;
0 &amp;amp; \mathrm{dla} &amp;amp;   x&amp;lt;0\\&lt;br /&gt;
x &amp;amp; \mathrm{dla} &amp;amp;   0 \le x &amp;lt;1 \\&lt;br /&gt;
1 &amp;amp; \mathrm{dla} &amp;amp;   1 \le x &lt;br /&gt;
\end{array}&lt;br /&gt;
\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
oraz niech &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; będzie dystrybuantą interesującego nas rozkładu. Jeśli &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest funkcją odwracalną to zmienna losowa zdefiniowana jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\eta = F^{-1}(\xi) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jest zmienną losową podlegającą rozkładowi o dystrybuancie &amp;lt;math&amp;gt; F&amp;lt;/math&amp;gt;.&lt;br /&gt;
Własność tę łatwo sprawdzić. Ponieważ dla każdego &amp;lt;math&amp;gt;x \in R &amp;lt;/math&amp;gt; mamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(\eta \le x) = P(F^{-1} (\xi) \le x)  = P(\xi \le F(x)) = F(x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
więc &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;  jest dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;\eta&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Czyli jeśli znamy dystrybuantę interesującego nas rozkładu prawdopodobieństwa i dystrybuanta ta jest odwracalna, to możemy generować liczby z rozkładu o dystrybuancie &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Przykład==== &lt;br /&gt;
Wygenerować liczby pseudolosowe z rozkładu wykładniczego o gęstości prawdopodobieństwa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x) = \lambda e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
* Znajdujemy dystrybuantę tego rozkładu:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = 1-e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znajdujemy funkcję odwrotną do dystrybuanty:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;G(u)=F^{-1}(u) = -\frac{1}{\lambda}\ln(1-u) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Generujemy liczby losowe &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; z przedziału &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt; i stosujemy transformację &amp;lt;math&amp;gt;G(u)&amp;lt;/math&amp;gt;&lt;br /&gt;
* Test generowanego rozkładu robimy przez porównanie dystrybuanty teoretycznej i empirycznej. Proszę zwrócić uwagę na funkcję estymującą dystrybuantę empiryczną&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_wykladniczy(lam, N):&lt;br /&gt;
	'''funkcja zwraca N liczb z rozkładu wykładniczego o parametrze lam&lt;br /&gt;
	korzystając z metody odwracania dystrybuanty&lt;br /&gt;
	Dystrybuanta rozkładu wykładniczego: F(x) = 1- exp(-lam*x)&lt;br /&gt;
	Funkcja do niej odwrotna: G(u) = -1/lam ln(1-u)'''&lt;br /&gt;
&lt;br /&gt;
	u = np.random.random(N)&lt;br /&gt;
	return -1.0/lam* np.log(1.-u)&lt;br /&gt;
	&lt;br /&gt;
def dystrybuanta(X,od=0, do=4, krok=0.05):&lt;br /&gt;
	'''funkcja zwraca dystrybuantę empiryczną &lt;br /&gt;
	zmiennej X na przedziale (od, do) z krokiem krok'''&lt;br /&gt;
	&lt;br /&gt;
	os_x = np.arange(od,do,krok)&lt;br /&gt;
	nx = len(os_x)&lt;br /&gt;
	N_liczb = len(X)&lt;br /&gt;
	D=np.zeros(nx) #wyzerowany wektor na naszą dystrybuantę&lt;br /&gt;
	for i in range(nx):&lt;br /&gt;
		D[i] = sum(X &amp;lt;= os_x[i])/N_liczb&lt;br /&gt;
	return (os_x, D)&lt;br /&gt;
	&lt;br /&gt;
# testujemy: narysujemy dystrybuantę oczekiwaną i empiryczną&lt;br /&gt;
lam=3&lt;br /&gt;
N=10000&lt;br /&gt;
&lt;br /&gt;
x = np.arange(0,4,0.01)&lt;br /&gt;
F = 1-np.exp(-lam*x)&lt;br /&gt;
X = gen_wykladniczy(lam, N)&lt;br /&gt;
(os_x, F_emp) = dystrybuanta(X,od=0, do=4, krok=0.1)&lt;br /&gt;
py.plot(x,F,'r',label = 'dystrybuanta teoretyczna')&lt;br /&gt;
py.plot(os_x, F_emp,'.b', label = 'dystrybuanta empiryczna')&lt;br /&gt;
py.legend()&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że nie zawsze jest łatwo wyznaczyć efektywnie  &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; &amp;amp;mdash; jest tak na przykład w przypadku rozkładu normalnego. W takich sytuacjach można szukać przybliżonej wartości &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt;, rozwiązując numerycznie równanie:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)=u&amp;lt;/math&amp;gt;, co sprowadza się do znalezienia miejsc zerowych funkcji &amp;lt;math&amp;gt;H(x)=F(x)-u&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem napisz funkcję ''MyGen(N)'' dla rozkładu, którego funkcja gęstości prawdopodobieństwa jest dana wzorem:&lt;br /&gt;
&amp;lt;math&amp;gt; f(x) = \frac{1}{\pi (1+x^{2})} &amp;lt;/math&amp;gt;&lt;br /&gt;
Następnie narysuj dla niego dystrybuantę i dystrybuantę empiryczną na przedziale [-10, 10].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
#f(x) = 1/(π(1+x²))             -- f. gęstości prawdopodobieństwa&lt;br /&gt;
#zatem F(x) = arctg(x)/π + 1/2  -- dystrybuanta&lt;br /&gt;
#zatem F⁻¹(x) = tg(π(x-1/2))    -- f. odwrotna do dystrybuanty&lt;br /&gt;
&lt;br /&gt;
def MyGen(size=1):&lt;br /&gt;
	x=np.random.random(size) # liczby z generatora jednostajnego na przedziale [0,1)&lt;br /&gt;
	y=np.tan(np.pi*(x-1/2))  # korzystamy z metody odwracania dystrybuanty&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
x=MyGen(int(1e6))&lt;br /&gt;
bins=np.linspace(-10,10,101)&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step')&lt;br /&gt;
py.plot(bins,1./(np.pi*(1+bins**2)),'r')&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step',cumulative=True)&lt;br /&gt;
py.plot(bins,np.arctan(bins)/np.pi+0.5,'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8537</id>
		<title>WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8537"/>
		<updated>2021-02-18T10:20:59Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadanie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pojęcia wstępne==&lt;br /&gt;
=== Zmienna losowa===&lt;br /&gt;
;Intuicyjnie: Zmienna losowa to taka zmienna, która przyjmuje pewną konkretną wartość w wyniku przeprowadzenia pomiaru lub eksperymentu. Na przykład zmienną losową jest liczba oczek, która wypada na kostce do gry. Dopóki trzymamy kostkę w ręce to nie wiemy jaką wartość ta zmienna przyjmie, konkretną wartość zmienna ta przyjmuje po rzucie. Jednak w kolejnych rzutach nie wiemy jakie będą jej wartości. &lt;br /&gt;
;Bardziej formalnie:  Zmienna losowa to funkcja przypisująca zdarzeniom elementarnym liczby.&lt;br /&gt;
;Zupełnie formalnie:&lt;br /&gt;
Do formalnej definicji potrzebne jest nam pojęcie przestrzeni probabilistycznej:&lt;br /&gt;
Przestrzeń probabilistyczna to układ trzech elementów &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;, gdzie:&lt;br /&gt;
* &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; jest pewnym zbiorem, zwanym przestrzenią zdarzeń elementarnych,&lt;br /&gt;
* &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest [http://pl.wikipedia.org/wiki/Sigma-ciało &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciałem] podzbiorów zbioru &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;. Elementy tego &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciała nazywane są zdarzeniami losowymi,&lt;br /&gt;
* &amp;lt;math&amp;gt;P: F\rightarrow [0,1]&amp;lt;/math&amp;gt; jest miarą probabilistyczną, tzn.&lt;br /&gt;
** &amp;lt;math&amp;gt;P(A) \ge 0 &amp;lt;/math&amp;gt; dla każdego &amp;lt;math&amp;gt;A \in F&amp;lt;/math&amp;gt;,&lt;br /&gt;
** &amp;lt;math&amp;gt;P(\Omega) = 1&amp;lt;/math&amp;gt;,&lt;br /&gt;
** jeżeli zbiory &amp;lt;math&amp;gt;A_1, A_2,\dots,A_n \in F&amp;lt;/math&amp;gt;  są parami rozłączne, to &amp;lt;math&amp;gt;P\left( \bigcup\limits_{i=1}^{\infty} A_i \right ) = \sum_{i=1}^{\infty} P(A_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Niech  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt; będzie przestrzenią probabilistyczną. '''Zmienną losową''' nazywamy dowolna funkcję &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, określoną na przestrzeni zdarzeń elementarnych &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;, o wartościach ze zbioru liczb rzeczywistych i [http://pl.wikipedia.org/wiki/Funkcja_mierzalna mierzalną] względem przestrzeni  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;. Zmienna losowa jest ciągła jeśli jej zbiór wartości jest ciągły, lub dyskretna, jeśli jej zbiór wartości jest dyskretny.&lt;br /&gt;
&lt;br /&gt;
=== Rozkład prawdopodobieństwa===&lt;br /&gt;
Rozkład prawdopodobieństwa &amp;amp;mdash; (rozkład zmiennej losowej) miara probabilistyczna określona na &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciele podzbiorów zbioru wartości zmiennej losowej, pozwalająca przypisywać prawdopodobieństwa zbiorom wartości tej zmiennej, odpowiadającym zdarzeniom losowym.&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej dyskretnej możemy wprowadzić pojęcie '''funkcji prawdopodobieństwa''':&lt;br /&gt;
&amp;lt;math&amp;gt;P(X=x_i) = p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Przykład: Dla rzutów monetą funkcję prawdopodobieństwa można zobrazować jako tabelkę:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
! Zdarzenie:&lt;br /&gt;
! orzeł&lt;br /&gt;
! reszka&lt;br /&gt;
|-&lt;br /&gt;
|zmienna losowa&lt;br /&gt;
|&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
| prawdopodobieństwo&lt;br /&gt;
| &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; &lt;br /&gt;
| 1/2&lt;br /&gt;
| 1/2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Można też przedstawić ją na wykresie:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta_1.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej ciągłej zamiast funkcji prawdopodobieństwa wprowadzamy '''funkcję gęstości prawdopodobieństwa'''. Jest to funkcja określona na zbiorze liczb rzeczywistych posiadająca następujące własności:&lt;br /&gt;
* jest nieujemna: &amp;lt;math&amp;gt;f(x) \ge 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
* prawdopodobieństwo tego, że zmienna losowa przyjmie wartość z przedziału &amp;lt;math&amp;gt;(a,b]&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; \int_a^b f(x) dx = P(a&amp;lt;X \le b) &amp;lt;/math&amp;gt;&lt;br /&gt;
[[Plik:Funkcja_gestosci_prawdopodobienstwa.png]]&lt;br /&gt;
* Prawdopodobieństwo tego, że zmienna losowa przyjmie dowolną wartość: &amp;lt;math&amp;gt; \int_{-\infty}^{+\infty} f(x) dx = P(-\infty &amp;lt;X \le +\infty) = 1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dystrybuanta ===&lt;br /&gt;
Dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy funkcję &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; określoną na zbiorze liczb rzeczywistych jako:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = P(X \le x)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
czyli wartość dystrybuanty w punkcie &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; jest prawdopodobieństwem, że zmienna losowa przyjmie wartość nie większą niż &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Dla zmiennej dyskretnej:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x)=P(X \le x) = \sum_{x_i&amp;lt;x}{P(X = x_i) } =  \sum_{x_i&amp;lt;x}p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla zmiennej losowej ciągłej z funkcją gęstości prawdopodobieństwa &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = P(X \le x)= \int_{-\infty}^x f(s) ds &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zauważmy ścisły związek dystrybuanty z funkcją prawdopodobieństwa w przypadku dyskretnym i funkcją gęstości prawdopodobieństwa w przypadku ciągłym.&lt;br /&gt;
&lt;br /&gt;
Przykład z monetą:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Momenty ===&lt;br /&gt;
Dla zmiennej losowej można obliczyć momenty zwykłe lub centralne. &lt;br /&gt;
&lt;br /&gt;
;Moment zwykły: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi tej zmiennej. Oblicza się go tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;m_k = E(X^k) =   \sum_{i} {x_i^k p_i}  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; oznacza prawdopodobieństwo, że &amp;lt;math&amp;gt;X = x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt; m_k = E(X^k) =  \int\limits_{-\infty}^{\infty} {x^k f(x)dx}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; jest funkcją gęstości prawdopodobieństwa.&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że pierwszy moment zwykły to średnia.&lt;br /&gt;
&lt;br /&gt;
;Moment centralny: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi funkcji &amp;lt;math&amp;gt;[x_i - E(x_i)]&amp;lt;/math&amp;gt;. Zatem możemy go obliczyć tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left( \left[ X-E(X) \right] ^k \right) =   \sum_{i} {\left[x_i-E(X)\right]^k p_i}  &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left(\left[X-E(X)\right]^k\right) =  \int\limits_{-\infty}^{\infty} {  \left[X-E(X)\right]^k f(x)dx}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uwaga:&lt;br /&gt;
* Drugi moment centralny ma swoją nazwę. Jest to '''wariancja''', często oznaczana przez &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Trzeci moment centralny przydaje się do badania symetrii rozkładu. Przyjmuje on wartość 0 dla zmiennych o rozkładzie symetrycznym, wartości ujemne dla zmiennych o rozkładzie wydłużonym w lewą stronę i wartości dodatnie dla zmiennych o rozkładzie wydłużonym w prawą stronę.  &lt;br /&gt;
* Czwarty moment centralny jest przydatny do konstrukcji miary spłaszczenia rozkładu zmiennej losowej '''kurtozy'''. Definiuje się ją następująco:&lt;br /&gt;
: &amp;lt;math&amp;gt; \mathrm{Kurt} = \frac{\mu_4}{\mu_2^4} - 3 &amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkłady prawdopodobieństwa można podzielić ze względu na wartość kurtozy na rozkłady:&lt;br /&gt;
* mezokurtyczne &amp;amp;mdash; wartość kurtozy wynosi 0, spłaszczenie rozkładu jest podobne do spłaszczenia rozkładu normalnego (dla którego kurtoza wynosi dokładnie 0)&lt;br /&gt;
* leptokurtyczne &amp;amp;mdash; kurtoza jest dodatnia, wartości cechy bardziej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
* platokurtyczne &amp;amp;mdash; kurtoza jest ujemna, wartości cechy mniej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
&lt;br /&gt;
=== Kwantyle ===&lt;br /&gt;
Kwantylem rzędu ''p'', gdzie &amp;lt;math&amp;gt;0 \leqslant p \leqslant 1&amp;lt;/math&amp;gt;, w rozkładzie empirycznym &amp;lt;math&amp;gt; P_{X} &amp;lt;/math&amp;gt;  zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy każdą liczbę &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt;, dla której spełnione są nierówności&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X((-\infty, x_p]) \geqslant p&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
oraz&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X([x_p,\infty)) \geqslant 1-p.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W szczególności, kwantylem rzędu ''p'' jest taka wartość &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; zmiennej losowej, że wartości mniejsze lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej ''p'', zaś wartości większe lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej 1&amp;amp;minus;''p''.&lt;br /&gt;
&lt;br /&gt;
Możemy zatem myśleć o obliczaniu kwantyla tak:&lt;br /&gt;
* zaobserwowaliśmy ''n'' wartości zmiennej losowej,&lt;br /&gt;
* zapiszemy te wartości na liście,&lt;br /&gt;
* następnie listę tę sortujemy w porządku rosnącym,&lt;br /&gt;
* kwantylem rzędu ''p'' jest albo element znajdujący się na liście w pozycji ''np'' jeśli ''np'' jest całkowite albo średnią z elementów położonych najbliżej ''np'' w przeciwnym wypadku.  &lt;br /&gt;
==== Nazwy poszczególnych kwantyli ====&lt;br /&gt;
Kwantyl rzędu 1/2 to inaczej mediana (ściślej zależy to od definicji mediany, przy jej obliczaniu z próbki o parzystej liczbie elementów często stosuje się średnią arytmetyczną dwóch środkowych elementów, szczegóły są w artykule).&amp;lt;br/&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/4, 2/4, 3/4 są inaczej nazywane kwartylami. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/5, 2/5, 3/5, 4/5 to inaczej kwintyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/10, 2/10, ..., 9/10 to inaczej decyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/100, 2/100, ..., 99/100 to inaczej percentyle. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pseudolosowość==&lt;br /&gt;
W obliczeniach numerycznych często korzystamy z liczb &amp;amp;bdquo;losowych&amp;amp;rdquo;. Tak naprawdę sekwencje liczb, których używamy są jedynie pseudolosowe, &lt;br /&gt;
tzn. są wytwarzane w deterministyczny (algorytmiczny) sposób, ale sekwencja generowanych wartości ma pewne cechy losowości. W idealnym przypadku cechą tą jest nieprzewidywalność: na podstawie obserwacji dotychczasowych wartości sekwencji niemożliwe jest podanie kolejnych wartości. W praktyce oznacza to nie możność ustalenie ziarna lub stanu wewnętrznego generatora na podstawie obserwacji dowolnie długiego ciągu wygenerowanych bitów.&lt;br /&gt;
Stan generatora przechowywany jest na zmiennych o skończonej precyzji. Jeśli stan jest przechowywany na &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; bitach to górną granicą na długość unikalnego ciągu liczb jest &amp;lt;math&amp;gt;2^n&amp;lt;/math&amp;gt;. Zazwyczaj unikalna sekwencja jest jednak krótsza. Wynika stąd, że  generatory liczb pseudolosowych mają  okres, po którym sekwencja liczb powtarza się. Podstawowe generatory liczb pseudolosowych wytwarzają liczby podlegające rozkładowi jednostajnemu (płaskiemu).&lt;br /&gt;
&lt;br /&gt;
Istnieją generatory &amp;amp;bdquo;prawdziwych&amp;amp;rdquo; liczb losowych, które są osobnymi urządzeniami. Liczy przez nie dostarczane są pewnymi parametrami jakichś procesów fizycznych, przebiegających w tych urządzeniach (zależnie od producenta). Do naszych zastosowań w zupełności wystarczą liczby generowane przez algorytmy komputerowe.&lt;br /&gt;
&lt;br /&gt;
Proste generatory liczb pseudolosowych można otrzymać jako funkcje używające operacji dzielenia modulo (generatory kongruencyjne):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{n+1}=f(x_n,x_{n-1}, ..., x_{n-k})\mod M&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zakładamy, że argumentami funkcji &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; są liczby całkowite ze zbioru &amp;lt;math&amp;gt;{0, 1, ...,M-1}&amp;lt;/math&amp;gt;. Dla ustalenia uwagi mogą to być generatory liniowe typu: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; x_{n+1}= (ax_{n} + c )\mod M&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład generatora liniowego ===&lt;br /&gt;
Dla przykładu zaimplementujmy jeden taki generator:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N=1):&lt;br /&gt;
    '''Przykład generatora liniowego. &lt;br /&gt;
       funkcja zwraca liczby pseudolosowe z przedziału [0,1)&lt;br /&gt;
       x - ziarno, &lt;br /&gt;
       N - ile liczb zwrócić'''&lt;br /&gt;
    m=8191&lt;br /&gt;
    a=101&lt;br /&gt;
    c=1731&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i]= x/m&lt;br /&gt;
    return y    &lt;br /&gt;
x=gen(23,100000)&lt;br /&gt;
py.hist(x)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Liczby &amp;lt;tt&amp;gt; m, a, c&amp;lt;/tt&amp;gt; są parametrami generatora. Liczba &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;, od której startuje generator nazywana jest ziarnem generatora {{ang|seed}}.&lt;br /&gt;
Funkcja &amp;lt;tt&amp;gt;py.hist()&amp;lt;/tt&amp;gt; zlicza i wyrysowuje histogram (czy wiemy co to jest histogram?).&lt;br /&gt;
* Wywołaj funkcję &amp;lt;tt&amp;gt;gen&amp;lt;/tt&amp;gt; dla tego samego ziarna kilka razy zaobserwuj powtarzalność wartości.&lt;br /&gt;
&lt;br /&gt;
W module &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; mamy do dyspozycji generator liczb pseudolosowych oparty na algorytmie [http://pl.wikipedia.org/wiki/Mersenne_Twister  Mersenne Twister ]&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
kod demonstrujacy pseudolosowosc&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import numpy as np&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(5)&lt;br /&gt;
&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
y=np.random.random(5)&lt;br /&gt;
print('x:', x)&lt;br /&gt;
print('y:', y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Zaobserwuj powtarzalność wartości.&lt;br /&gt;
* Wygeneruj i wykreśl 200 kolejnych liczb pseudolosowych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(200)&lt;br /&gt;
&lt;br /&gt;
py.plot(x,'.')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testy jakości===&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Dla wyżej wymienionych generatorów, proszę wykonać następujące testy:&lt;br /&gt;
* zobrazować rozkład prawdopodobieństwa (narysować histogram);&lt;br /&gt;
&amp;lt;!-- Tymczasowo wylaczane przez RK 14.02.2013 * test zgodności momentów &amp;amp;mdash; czy momenty obliczone dla wygenerowanych liczb są takie jak przewiduje teoria;--&amp;gt;&lt;br /&gt;
* test korelacji na rysunku: sporządzić wykres gdzie na jednej osi są wartości &amp;lt;math&amp;gt;x_n&amp;lt;/math&amp;gt; na drugiej zaś wartości &amp;lt;math&amp;gt;x_{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Tymczasowo wylaczone przez RK 14.02.2013 # momenty dla rozkładu jednostajnego [0, 1]&lt;br /&gt;
# mu = 0.5&lt;br /&gt;
# var = 1/12&lt;br /&gt;
# kurtoza -6/5&lt;br /&gt;
mu=np.mean(x)&lt;br /&gt;
var = np.sum((x - mu)**2)/N&lt;br /&gt;
kurtoza = np.sum((x-mu)**4)/N/var**2-3&lt;br /&gt;
print u'wartości teoretyczne:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':0.5,'v':1.0/12,'k':-6.0/5}&lt;br /&gt;
print u'wartości z próby:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':mu,'v':var,'k':kurtoza} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N):&lt;br /&gt;
    m=8765132137&lt;br /&gt;
    a=42347&lt;br /&gt;
    c=1731&lt;br /&gt;
&lt;br /&gt;
    ## warto porównać wynik dla poniższych parametrów&lt;br /&gt;
    #m=8191&lt;br /&gt;
    #a=101&lt;br /&gt;
    #a=107&lt;br /&gt;
&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i] = x/m&lt;br /&gt;
    return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=10000&lt;br /&gt;
x=gen(23,N)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.hist(x,30,normed = True)&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(x[:-1],x[1:],'.')&lt;br /&gt;
py.xlabel('x_n')&lt;br /&gt;
py.ylabel('x_{n+1}')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Bardziej wyczerpujące baterie testów jakości generatorów można znaleźć na przykład w:&lt;br /&gt;
* http://csrc.nist.gov/groups/ST/toolkit/rng/index.html&lt;br /&gt;
* http://www.phy.duke.edu/~rgb/General/rand_rate.php&lt;br /&gt;
&lt;br /&gt;
== Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; ==&lt;br /&gt;
=== Wstęp ===&lt;br /&gt;
Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; są zaimplementowane jako dwie klasy: &amp;lt;tt&amp;gt;stats.rv_continuous&amp;lt;/tt&amp;gt;  (bazuje na niej ponad 80 typów rozkładów ciągłych zmiennych losowych) i &amp;lt;tt&amp;gt;stats.rv_discrete&amp;lt;/tt&amp;gt; (bazuje na niej 10 typów rozkładów dyskretnych zmiennych losowych). Aktualną listę dostępnych rozkładów można uzyskać np. przy pomocy następującego skryptu:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
from scipy import stats&lt;br /&gt;
dc= [d for d in dir(stats) if isinstance(getattr(stats,d), stats.rv_continuous)]&lt;br /&gt;
print(dc)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Przykładowo: zmienne losowe o rozkładzie normalnym są reprezentowane przez klasę &amp;lt;tt&amp;gt;norm&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Funkcje przydatne do pracy ze zmiennymi losowymi dostępne są jako metody ===&lt;br /&gt;
&lt;br /&gt;
Obiekty reprezentujące zmienne losowe podlegające konkretnym rozkładom posiadają następujące metody:&lt;br /&gt;
* &amp;lt;tt&amp;gt;rvs&amp;lt;/tt&amp;gt;: '''generator zmiennych losowych''' danego typu;&lt;br /&gt;
* &amp;lt;tt&amp;gt;cdf&amp;lt;/tt&amp;gt;: '''dystrybuanta''' (ang. Cumulative Distribution Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;ppf&amp;lt;/tt&amp;gt;: '''funkcja odwrotna do dystrybuanty''' (ang. Percent Point Function (Inverse of CDF));&lt;br /&gt;
* &amp;lt;tt&amp;gt;stats&amp;lt;/tt&amp;gt;: zwraca '''momenty centralne rozkładu''' (średnią, wariancję, skośność i kurtozę);&lt;br /&gt;
* &amp;lt;tt&amp;gt;moment&amp;lt;/tt&amp;gt;: zwraca niecentralne momenty rozkładu.&lt;br /&gt;
* &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt;: '''funkcja gęstości prawdopodobieństwa''' (ang. Probability Density Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;pmf&amp;lt;/tt&amp;gt; dla rozkładów dyskretnych  &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt; jest zamienione na '''funkcję prawdopodobieństwa''' (ang. probability mass function; ''masa'' przez analogię z gęstością masy i masą punktową);&lt;br /&gt;
* &amp;lt;tt&amp;gt;sf&amp;lt;/tt&amp;gt;: funkcja przeżycia (ang. Survival Function) (1&amp;amp;minus;CDF);&lt;br /&gt;
* &amp;lt;tt&amp;gt;isf&amp;lt;/tt&amp;gt;: funkcja odwrotna do funkcji przetrwania (ang. Inverse Survival Function (Inverse of SF));&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Zobaczmy działanie tych metod dla zmiennych losowych z rozkładu normalnego:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
x = st.norm.rvs(size=10000)&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
py.hist(x,bins=bins)&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zmienne losowe mogą być używane na jeden z dwóch sposobów: można podawać wszystkie parametry opisujące rozkład w każdym wywołaniu metody, albo wytworzyć obiekt reprezentujący rozkład o konkretnych parametrach (w dokumentacji &amp;lt;tt&amp;gt;scipy&amp;lt;/tt&amp;gt; jest to nazywane zamrażaniem parametrów rozkładu, ang. ''freezing'')&lt;br /&gt;
Jako przykład zobaczmy funkcję odwrotną do dystrybuanty rozkładu normalnego N(2, 9): &lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; import scipy.stats as st&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.norm.ppf(0.05, loc=2, scale=3))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; my_norm = st.norm(loc=2,scale=3)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(my_norm.ppf(0.05))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
&lt;br /&gt;
=== Pomoc do poszczególnych rozkładów ===&lt;br /&gt;
Pełną dokumentację każdego rozkładu mamy dostępną w postaci docstringów. Dla przykładu:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
help(st.nct)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
wypisuje pełną informację z docstring o niecentralnym rozkładzie ''t''.&lt;br /&gt;
Podstawowe informacje można uzyskać wypisując treść pola &amp;lt;tt&amp;gt;extradoc&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.nct.extradoc)&lt;br /&gt;
 Non-central Student T distribution&lt;br /&gt;
 df**(df/2) * gamma(df+1)&lt;br /&gt;
 nct.pdf(x,df,nc) = --------------------------------------------------&lt;br /&gt;
 2**df*exp(nc**2/2)*(df+x**2)**(df/2) * gamma(df/2)&lt;br /&gt;
 for df &amp;gt; 0, nc &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Wypisz pomoc dla (centralnego) rozkładu ''t'' i sprawdź jakie parametry on przyjmuje. Wybierz dowolnie ich wartości, a następnie posiłkując się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład|przykładem]]:&lt;br /&gt;
# Wygeneruj 10000 liczb z rozkładu ''t'' i narysuj ich histogram.&lt;br /&gt;
# Wykreśl gęstość prawdopodobieństwa tego rozkładu.&lt;br /&gt;
# Wykreśl dystrybuantę.&lt;br /&gt;
# Wykreśl funkcję odwrotną do dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=10000       # ile liczb generujemy&lt;br /&gt;
&lt;br /&gt;
# przykładowe parametry rozkładu&lt;br /&gt;
df = 3        # liczba stopni swobody&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
x = st.t.rvs(size=N, df=df)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;) #histtype=&amp;quot;step&amp;quot; daje nam przezroczysty histogram&lt;br /&gt;
x = st.norm.rvs(size=N)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.t.pdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y,'g')&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.t.cdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z,'g')&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
 &lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.t.ppf(os_p, df=df)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f,'g')&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
py.legend([&amp;quot;Rozkład t-Studenta&amp;quot;,&amp;quot;Rozkład normalny&amp;quot;])&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Statystyki i estymatory ===&lt;br /&gt;
Estymator jest statystyką służącą do szacowania pewnej wielkości (np. parametru) na podstawie próby losowej (np. danych eksperymentalnych). Na wykładzie poznaliśmy m.in. takie statystki jak [[WnioskowanieStatystyczne/Momenty|wartość oczekiwana, wariancja i mediana]], z których ostatnia jest szczególnym przypadkiem [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Kwantyle|kwantylu]]. Moduły numpy oraz scipy.stats umożliwiają łatwe estymowanie niektórych statystyk, a także obliczanie ich rzeczywistych wartości, jeśli znamy parametry rozkładu.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jako przykład niech posłuży poniższy kod, w którym szukamy wartości estymatorów wartości oczekiwanej oraz wariancji rozkładu normalnego na podstawie próby losowej, a wynik porównujemy z wartościami rzeczywistymi:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
m=2&lt;br /&gt;
s=0.5&lt;br /&gt;
rozklad = st.norm(m,s) #definiujemy rozkład normalny&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()  # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
var  = rozklad.var()   # rzeczywiste odchylenie standardow&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)  # estymowana wartość oczekiwana&lt;br /&gt;
var_est  = np.var(x)   # estymowana wariancja&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem wygeneruj próby losowe dla następujących rozkładów:&lt;br /&gt;
# Rozkład normalny &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; = 100, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; = 2.&lt;br /&gt;
# Rozkład dwumianowy p = 0.4, n =10.&lt;br /&gt;
# Rozkład poissona &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; = 4.&lt;br /&gt;
# Rozkład jednostajny na przedziale [2, 6).&lt;br /&gt;
Następnie estymuj na ich podstawie wartości poniższych statystyk i porównaj je z wartościami obliczonymi na podstawie znanych parametrów rozkładu:&lt;br /&gt;
# Wartość oczekiwana.&lt;br /&gt;
# Odchylenie standardowe.&lt;br /&gt;
# Wariancja.&lt;br /&gt;
# Mediana.&lt;br /&gt;
# Kurtoza.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
Poniżej znajduje się przykładowe rozwiązanie dla rozkładu dwumianowego. Aby uzyskać rozwiązanie dla pozostałych rozkładów wystarczy dostosować pierwszą część kodu, gdzie definiowany jest rozkład.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
n=10&lt;br /&gt;
p=0.4&lt;br /&gt;
rozklad = st.binom(n,p) #definiujemy nasz rozkład&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
# dalsza część jest jest niezależna od rodzaju rozkładu, który zdefiniowaliśmy powyżej&lt;br /&gt;
###########################################################################################&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()           # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
std  = rozklad.std()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
var  = rozklad.var()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
med  = rozklad.median()         # rzeczywista mediana&lt;br /&gt;
kurt = float(rozklad.stats('k'))# rzecz. kurtoza (funkcja zwraca jednoelementową tablicę&lt;br /&gt;
                                # numpy.ndarray, więc trzeba ją ręcznie zrzutować na float)&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)     # estymowana wartość oczekiwana&lt;br /&gt;
std_est  = np.std(x)      # estymowane odchylenie standardowe&lt;br /&gt;
var_est  = np.var(x)      # estymowana wariancja&lt;br /&gt;
med_est  = np.median(x)   # estymowana mediana&lt;br /&gt;
kurt_est = st.kurtosis(x) # estymowana kurtoza&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Odchylenie standardowe rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(std,std_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
print(&amp;quot;Mediana rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(med,med_est))&lt;br /&gt;
print(&amp;quot;Kurtoza rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(kurt,kurt_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generowanie zmiennych losowych podlegającym różnym rozkładom prawdopodobieństwa ==&lt;br /&gt;
Podstawowe typy generatorów liczb losowych wytwarzają liczby losowe podlegające rozkładowi jednostajnemu. Zastanowimy sie teraz jak mając zmienne losowe z rozkładu jednostajnego wytworzyć zmienne losowe o innych rozkładach.&lt;br /&gt;
=== Rozkład dwumianowy ===&lt;br /&gt;
Zmienna losowa, która zlicza liczbę sukcesów &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; próbach, gdzie &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest prawdopodobieństwem sukcesu w pojedynczej próbie, podlega rozkładowi dwumianowemu&lt;br /&gt;
[[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_dwumianowy więcej o rozkładzie dwumianowym]]: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_n(k)=\left(  &lt;br /&gt;
\begin{array}{c} &lt;br /&gt;
n \\&lt;br /&gt;
k&lt;br /&gt;
\end{array} &lt;br /&gt;
\right) p^kq^{n-k}=\frac{n!}{k!(n-k)!}p^kq^{n-k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Jak z rozkładu jednostajnego wytworzyć zmienne losowe o rozkładzie dwumianowym?''&lt;br /&gt;
* Wykonać symulację!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_binom(n,p,N):&lt;br /&gt;
	'''funkcja zwracająca zmienną losową z rozkładu dwumianowego: &lt;br /&gt;
	ilość sukcesów w n próbach przy prawdopodobieństwie sukcesu p&lt;br /&gt;
	parametry:&lt;br /&gt;
		n: liczba prób&lt;br /&gt;
		p: prawdopodobieństwo sukcesu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będącymi liczbami sukcesów&lt;br /&gt;
	'''&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję n liczb z rozkładu jednostajnego [0,1) i jako sukcesy&lt;br /&gt;
	#traktuję wylosowanie liczby nie większej niż p&lt;br /&gt;
	r=np.random.rand(N,n)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
n=20&lt;br /&gt;
N=100000&lt;br /&gt;
p=0.8&lt;br /&gt;
x = gen_binom(n,p,N)&lt;br /&gt;
bins =range(22) #granice binów&lt;br /&gt;
py.hist(x,bins)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Z oszacowań agencji wynika, że średnio 2 z 3 reklam spotyka się z pozytywnym odzewem. Akcja marketingowa obejmuje 12 reklam. Niech &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; oznacza liczbę reklam skutecznych. Czy &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi dwumianowemu?&lt;br /&gt;
Jakie jest prawdopodobieństwo, że 10 reklam będzie skutecznych?&lt;br /&gt;
Prawdopodobieństwo obliczyć ze wzoru oraz korzystając z symulacji.&lt;br /&gt;
&lt;br /&gt;
Wskazówka informacje o zmiennych z rozkładu dwumianowego (&amp;lt;tt&amp;gt;binom&amp;lt;/tt&amp;gt;) można uzyskać tak:&lt;br /&gt;
 # &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
 #   Binomial distribution&lt;br /&gt;
 #&lt;br /&gt;
 #   Counts the number of successes in *n* independent&lt;br /&gt;
 #   trials when the probability of success each time is *pr*.&lt;br /&gt;
 #&lt;br /&gt;
 #   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
 #   for k in {0,1,...,n}&lt;br /&gt;
Odp: ''p'' = 0,127&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
p=2/3 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n=12   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
&lt;br /&gt;
# ze wzoru &lt;br /&gt;
&lt;br /&gt;
# &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
#   Binomial distribution&lt;br /&gt;
#&lt;br /&gt;
#   Counts the number of successes in *n* independent&lt;br /&gt;
#   trials when the probability of success each time is *pr*.&lt;br /&gt;
#&lt;br /&gt;
#   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
#   for k in {0,1,...,n}&lt;br /&gt;
p_wz = st.binom.pmf(10,n,p)&lt;br /&gt;
print(p_wz)&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =100000 # liczba powtórzeń symulacji&lt;br /&gt;
k = np.zeros(N_powt)&lt;br /&gt;
for i in range(N_powt):&lt;br /&gt;
	r = rnd.random(size=n) # symulowana akcja reklamowa &lt;br /&gt;
	k[i]=np.sum(r&amp;lt;=p)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k==10)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Na egzaminie testowym jest 30 pytań. Na każde pytanie są podane cztery możliwe odpowiedzi, z czego tylko jedna jest prawdziwa. Za prawidłową odpowiedź student otrzymuje 1 punkt a za fałszywą &amp;amp;minus;0,5 punktu. Próg zaliczenia wynosi 15 punktów. Oblicz prawdopodobieństwo, że udzielając czysto losowych odpowiedzi student zaliczy egzamin.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
Liczba prawidłowych odpowiedzi w teście może być potraktowana jako liczba sukcesów k w n = 30 próbach. Prawdopodobieństwo sukcesu pojedynczego zdarzenia (prawidłowa odpowiedź na jedno pytanie) wynosi p = 1/4. Ze względu na obecność ujemnych punktów za fałszywe odpowiedzi zmienia się efektywna liczba punktów wymaganych do zaliczenia zgodnie z równaniem:&lt;br /&gt;
k-0.5*(30-k) = 15&lt;br /&gt;
co daje k = 20&lt;br /&gt;
Zatem problem redukuje się do wyznaczenia prawdopodobieństwa co najmniej 20 sukcesów w 30 próbach, przy czym prawdopodobieństwo sukcesu w 1 próbie wynosi p=1/4:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
p = 1./4 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n = 30   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
k_kryt = 20&lt;br /&gt;
# ze wzoru &lt;br /&gt;
p_wz = np.sum(st.binom.pmf(range(k_kryt,n+1),n,p))&lt;br /&gt;
print(p_wz)&lt;br /&gt;
&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =10000000 # liczba powtórzeń symulacji&lt;br /&gt;
r = np.random.random(size=(n,N_powt)) # symulowany test &lt;br /&gt;
k = np.sum(r&amp;lt;=p,0)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k&amp;gt;=20)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład Poissona ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(k)=\frac{\mu^k e^{-\mu}}{k!}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkładowi Poissona podlegają zmienne losowe zliczające w jednostce czasu liczbę zdarzeń o niskim prawdopodobieństwie zajścia. Np. liczba rozpadów promieniotwórczych na jednostkę czasu [[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_Poissona więcej o rozkładzie Poissona]]&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Lekarz pełniący dyżur w szpitalu jest wzywany do pacjentów średnio 3 razy w ciągu nocy. Załóżmy, że liczba wezwań na noc podlega rozkładowi Poissona. Jakie jest prawdopodobieństwo, że noc upłynie lekarzowi spokojnie?&lt;br /&gt;
U nas &amp;lt;math&amp;gt;\mu=3&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt; więc&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(0) = \frac{3^0e^{-3}}{0!} = e^{-3} = 0,0498&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jak ze zmiennych podlegających rozkładowi jednostajnemu uzyskać zmienne podlegające rozkładowi Poissona?&lt;br /&gt;
&lt;br /&gt;
Wykonać symulację wynikającą z następujących spostrzeżeń:&lt;br /&gt;
&lt;br /&gt;
* Weźmy jednostkę czasu. Ma w niej zachodzić średnio &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; zdarzeń. &lt;br /&gt;
* Podzielmy jednostkę czasu na ''NT'' odcinków o jednakowej długości. &lt;br /&gt;
* Prawdopodobieństwo, że zdarzenie zajdzie w konkretnym odcinku jest &amp;lt;math&amp;gt;p=\frac{\mu}{NT}&amp;lt;/math&amp;gt; Takie prawdopodobieństwo ma też wylosowanie przy pomocy generatora liczb z rozkładu jednostajnego [0,1) liczby nie większej niż ''p''. &lt;br /&gt;
* Zatem, aby wytworzyć jedną liczbę z rozkładu Poissona można policzyć ile spośród ''NT'' liczb z rozkładu jednostajnego [0,1) jest nie większych niż ''p''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
def gen_poiss(mi,NT,N):&lt;br /&gt;
	'''funkcja zwracająca zmienne losowe z rozkładu poissona: &lt;br /&gt;
	średnia ilość zdarzeń o niskim prawdopodobieństwie w jednostce czasu&lt;br /&gt;
	parametry:&lt;br /&gt;
		mi: średnia liczba zdarzeń&lt;br /&gt;
		NT: liczba odcinków czasu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będących zliczeniami zdarzeń&lt;br /&gt;
	'''&lt;br /&gt;
	p = float(mi)/NT&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję NT liczb z rozkładu jednostajnego [0,1) i jako zajście zdarzenia&lt;br /&gt;
	# traktuję wylosowanie liczby nie większej niż p. Ilość zdarzeń to liczba z rozkładu Poissona&lt;br /&gt;
	r=np.random.rand(N,NT)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
 &lt;br /&gt;
# kod testujący&lt;br /&gt;
mi=4&lt;br /&gt;
N=100000&lt;br /&gt;
NT = 10000&lt;br /&gt;
x = gen_poiss(mi,NT,N)&lt;br /&gt;
bins =np.arange(int(x.max()+1))-0.5&lt;br /&gt;
py.hist(x,bins,normed=True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# porównanie z generatorami scipy.stats&lt;br /&gt;
p=mi/NT&lt;br /&gt;
k=np.arange(x.max()+1)&lt;br /&gt;
B=st.binom.pmf(k,NT,p)&lt;br /&gt;
py.plot(k,B,'ro')&lt;br /&gt;
P=st.poisson.pmf(k,mi)&lt;br /&gt;
py.plot(k,P,'go')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład normalny i Centralne Twierdzenie Graniczne ===&lt;br /&gt;
Gęstość prawdopodobieństwa [[WnioskowanieStatystyczne/Rozklady-przyklady#Rozk.C5.82ad_Gaussa| rozkładu normalnego]] dana jest wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{ -\frac{(x-\mu)^2}{2 \sigma^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie: &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; &amp;amp;mdash; średnia, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; &amp;amp;mdash; odchylenie standardowe (&amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; &amp;amp;mdash; wariancja).&lt;br /&gt;
&lt;br /&gt;
Jeden ze  sposóbw wytwarzania zmiennych losowych o rozkładzie normalnym  polega na zastosowaniu [[WnioskowanieStatystyczne/CLT| Centralnego Twierdzenia Granicznego]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;X=\frac{\sqrt{12}}{\sqrt{N}}\left(\sum_{n=1}^N Y_n -\frac{N}{2}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; zmienna losowa z rozkładu jednostajnego &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;&lt;br /&gt;
W granicy dużych &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; rozkład zmiennej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; dąży do rozkładu normalnego &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt;, która zwraca liczbę losową ''X'' otrzymaną zgodnie powyższym wzorem  przez sumowanie &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt; liczb z rozkładu jednostajnego.&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG(N, N_liczb)&amp;lt;/tt&amp;gt; korzystającą z &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt; i zwracającą zadaną ilość liczb &amp;lt;tt&amp;gt;N_liczb&amp;lt;/tt&amp;gt;&lt;br /&gt;
* narysować histogramy 10 000 liczb &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; uzyskanych kolejno dla &amp;lt;math&amp;gt;N={1,2,...,12}&amp;lt;/math&amp;gt;&lt;br /&gt;
* Jakie parametry charakteryzują rozkład do którego zbiegają sumy? Przy każdym z powyższych histogramów wypisz średnią i wariancję z próby (funkcje &amp;lt;tt&amp;gt;np.mean&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;np.var&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
 &lt;br /&gt;
def gen_CTG_1(N):&lt;br /&gt;
	'''Funkcja generująca pojedynczą zmienną losową będącą sumą N liczb z rozkładu jednostajnego [0,1)&lt;br /&gt;
	pomnożoną przez czynnik normujący zapewniający wariancję równą 1.&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		jedną liczbę losową'''&lt;br /&gt;
	X = np.sqrt(12/N) * (np.sum(rnd.random(N)) - N/2)&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
def gen_CTG(N,N_liczb):&lt;br /&gt;
	'''Funkcja zwraca wektor (tablicę) zmiennych losowych będących sumami N liczb z rozkładu jednostajnego [0,1).&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
		N_liczb: ilość liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N_liczb losowych'''&lt;br /&gt;
&lt;br /&gt;
	X=np.zeros(N_liczb)&lt;br /&gt;
&lt;br /&gt;
	for i in range(N_liczb):&lt;br /&gt;
		X[i] = gen_CTG_1(N)&lt;br /&gt;
&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
Nmax=12&lt;br /&gt;
&lt;br /&gt;
for N in range(1,Nmax+1):&lt;br /&gt;
	X=gen_CTG(N,N_liczb)&lt;br /&gt;
	py.subplot(3,4,N)&lt;br /&gt;
	bins = np.arange(-4,4,0.1)&lt;br /&gt;
	py.hist(X,bins=bins,normed=True)&lt;br /&gt;
	py.title(&amp;quot;N=%i, µ=%.2g, σ²=%.2g&amp;quot;%(N, X.mean(), X.var(ddof=1)))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie: transformacja rozkładu normalnego ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozkład o średniej 0 i wariancji 1 (notacja  &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;) jest nazywany rozkładem standardowym i często jest oznaczany literą &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Dokonując odpowiedniej transformacji można z rozkładu &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; uzyskać dowolny inny rozkład normalny. &lt;br /&gt;
&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować 100000 zmiennych losowych z rozkładu &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.rvs(loc=0, scale=1, size=100000)&amp;lt;/tt&amp;gt;) &lt;br /&gt;
* przetransformować je do zmiennych losowych &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt;. &lt;br /&gt;
* narysować histogramy zmiennych przed i po transformacji.&lt;br /&gt;
* narysować rozkład gęstości prawdopodobieństwa dla rozkładu &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.pdf(...)&amp;lt;/tt&amp;gt;) .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
Z=st.norm.rvs(loc=0,scale=1,size=100000) #losowanie liczb z rozkładu N(0,1) (czyli Z)&lt;br /&gt;
&lt;br /&gt;
std=9&lt;br /&gt;
mu=2&lt;br /&gt;
X=Z*std+mu #transformacja do σ=9, µ=2&lt;br /&gt;
&lt;br /&gt;
szerokosc_binu=0.5&lt;br /&gt;
bins=np.arange(-40,40.5,szerokosc_binu) #te same granice binów dla obu histogramów&lt;br /&gt;
&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(Z,bins=bins,normed=True,label=&amp;quot;histogram przed transformacją&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(Z.mean(),Z.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(X,bins=bins,normed=True,label=&amp;quot;histogram po transformacji&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
PDF=st.norm.pdf(bins,loc=mu,scale=std) #modelowa gęstość prawdopodobieństwa dla σ=9, µ=2&lt;br /&gt;
py.plot(bins+szerokosc_binu/2,PDF,&amp;quot;ro&amp;quot;,label=&amp;quot;gęstość prawd.&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(X.mean(),X.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Transformacja Boxa-Mullera====&lt;br /&gt;
To inna popularna metoda  metoda generowania liczb losowych o rozkładzie normalnym, na podstawie dwóch wartości zmiennej o rozkładzie jednostajnym na przedziale [0,1) http://en.wikipedia.org/wiki/Box-Muller_transform,  ale nie będziemy się nią tu szerzej zajmować.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Producent silników twierdzi, że jego silniki mają średnią moc 220 KM, a odchylenie standardowe wynosi 15 KM. Potencjalny klient testuje 100 silników. Jakie jest prawdopodobieństwo, że średnia z próby będzie mniejsza niż 217 KM?&lt;br /&gt;
&lt;br /&gt;
Przypomnijmy, że z CTG dla dużych liczebności próby  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\bar x \sim N(\mu,\sigma^2/n)&amp;lt;/math&amp;gt; [[WnioskowanieStatystyczne/Statystyki_i_estymatory#Estymator_warto.C5.9Bci_oczekiwanej|(dowód)]]. Zatem szukamy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( Z&amp;lt;\frac{217-\mu}{\frac{\sigma}{ \sqrt{n}}} \right)  = P\left( Z&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}} \right)=P(Z&amp;lt;-2)=0,0228&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.norm.cdf(-2)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu normalnego: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
sig=15&lt;br /&gt;
N_prob=100&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e4)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadania====&lt;br /&gt;
Teraz kilka najprostszych zadań dotyczących rozkładu normalnego:&lt;br /&gt;
* Znajdźmy prawdopodobieństwo, że ''Z'' &amp;lt; &amp;amp;minus;2,47. Proszę zrobić to na dwa sposoby: raz z użyciem wygenerowanych zmiennych z rozkładu normalnego, drugi raz z użyciem dystrybuanty   &amp;lt;tt&amp;gt;norm.cdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
[Odp: ''p'' = 0,0068]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = -2.47&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(Z &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf(z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znaleźć prawdopodobieństwo ''P''(|''Z''| &amp;lt; 2)&lt;br /&gt;
[Odp:  ''p'' = 0,9545]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = 2&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(np.abs(Z) &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf( z_crit, loc=0, scale=1) - st.norm.cdf( -z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Koncentracja zanieczyszczeń w półprzewodniku używanym do produkcji procesorów podlega rozkładowi normalnemu o średniej 127 cząsteczek na milion i odchyleniu standardowemu 22. Półprzewodnik może zostać użyty jedynie gdy koncentracja zanieczyszczeń spada poniżej 150 cząstek na milion. Jaka proporcja półprzewodników nadaje się do użycia?&lt;br /&gt;
Prawdopodobieństwo obliczyć korzystając z dystrybuanty rozkładu normalnego oraz z symulacji.&lt;br /&gt;
[Odp: ''p'' = 0,852]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu=127&lt;br /&gt;
sig=22&lt;br /&gt;
m_kryt=150&lt;br /&gt;
p=st.norm.cdf(m_kryt, loc = mu, scale = sig )&lt;br /&gt;
print('proporcja odczytana z dystrybuanty rozkładu normalnego: %4g' %p)&lt;br /&gt;
# symulacja&lt;br /&gt;
N_prob=10000&lt;br /&gt;
seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
p = sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
bins = np.arange(60,200,5)&lt;br /&gt;
h=py.hist(seria,bins);&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %.4g' %p1)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład t ===&lt;br /&gt;
&lt;br /&gt;
Gdy nie znamy wariancji populacji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; używamy w jego miejsce estymatora wariancji próby &amp;lt;math&amp;gt;s^2&amp;lt;/math&amp;gt; danego wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s^2 =\frac{\sum(\bar x - x_i)^2}{n-1} &amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie ''n'' &amp;amp;mdash; rozmiar próby&lt;br /&gt;
&lt;br /&gt;
Wtedy rozkład &amp;lt;math&amp;gt;Y=\frac{\bar X -\mu}{\frac{s}{\sqrt{n}}}&amp;lt;/math&amp;gt; nie podlega rozkładowi normalnemu. Jeśli populacja &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi normalnemu to &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; podlega  [[WnioskowanieStatystyczne/Test_t |rozkładowi ''t'' ]] z  ''n''&amp;amp;minus;1 stopniami swobody.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy na symulacji co to zmienia. Proszę obejrzeć wyniki dla kilku wartości &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
N=3&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
mu=2&lt;br /&gt;
sigma=1&lt;br /&gt;
&lt;br /&gt;
y_wyidealizowane=np.zeros(N_liczb)&lt;br /&gt;
m_populacji=np.zeros(N_liczb)&lt;br /&gt;
s_populacji=np.zeros(N_liczb)&lt;br /&gt;
y_estymowane=np.zeros(N_liczb)&lt;br /&gt;
m_estymowane=np.zeros(N_liczb)&lt;br /&gt;
s_estymowane=np.zeros(N_liczb)&lt;br /&gt;
for i in range(N_liczb):&lt;br /&gt;
    x=st.norm.rvs(loc=mu,scale=sigma,size=N)&lt;br /&gt;
    m_populacji[i]=mu&lt;br /&gt;
    s_populacji[i]=sigma/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    m_estymowane[i]=np.mean(x)&lt;br /&gt;
    s_estymowane[i]=np.std(x,ddof=1)/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    y_wyidealizowane[i]=(m_estymowane[i]-mu)/(s_populacji[i])&lt;br /&gt;
    y_estymowane[i]=(m_estymowane[i]-mu)/(s_estymowane[i])&lt;br /&gt;
 &lt;br /&gt;
py.subplot(311)&lt;br /&gt;
py.title(u'średnia (wartość oczekiwana)')&lt;br /&gt;
py.plot(m_estymowane,label=&amp;quot;estymowana&amp;quot;)&lt;br /&gt;
py.plot(m_populacji,'r',label=&amp;quot;populacji&amp;quot;)&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(312)&lt;br /&gt;
py.title('odchylenie standardowe')&lt;br /&gt;
py.plot(s_estymowane,label=&amp;quot;estymowane&amp;quot;)&lt;br /&gt;
py.plot(s_populacji,'r',label='populacji')&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(325)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji wyidealizowanej')&lt;br /&gt;
py.hist(y_wyidealizowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.subplot(326)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji estymowanej')&lt;br /&gt;
py.hist(y_estymowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Dział kontroli jakości producenta silników testuje 10 egzemplarzy silnika nowego typu. Uzyskano wartość średnią 220 KM oraz odchylenie standardowe równe 15 KM. Jakie jest prawdopodobieństwo, że klient, który zamówi 100 silników, otrzyma partię, w której średnia będzie mniejsza niż 217 KM? Wykonaj obliczenia oraz symulację. Porównaj wynik z wcześniejszym [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład_5|przykładem]], gdzie znaliśmy odchylenie standardowe z innego źródła (nie było ono estymowane z próby).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- =====Rozwiązanie=====&lt;br /&gt;
&lt;br /&gt;
Tym razem spoglądamy na problem z punktu widzenia działu kontroli jakości, dla którego zarówno średnia, jak i odchylenie standardowe są wartościami estymowanymi z próby. Zatem szukamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( t&amp;lt;\frac{217-\mu}{\frac{s}{ \sqrt{n_{klient}}}}, df=n_{kontrola}-1 \right) = P\left( t&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}}, df=10-1 \right)=&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;P(t&amp;lt;-2, df=9) = 0,0383&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.t.cdf(-2,df=9)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu t-Studenta: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
s=15&lt;br /&gt;
N_prob_kontrola= 10 #liczba silników skontrolowana przez dział kontroli jakości&lt;br /&gt;
N_prob_klient  =100 #liczba silników kupowanych przez klienta&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e5)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.t.rvs(df=N_prob_kontrola-1,loc=mu, scale=s, size=N_prob_klient)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inne rozkłady uzyskiwane przez transformacje ===&lt;br /&gt;
====Metoda odwracania dystrybuanty====&lt;br /&gt;
&amp;lt;!--[http://wazniak.mimuw.edu.pl/index.php?title=Rachunek_prawdopodobieństwa_i_statystyka/Wykład_14:_Komputerowe_metody_statystyki]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Niech &amp;lt;math&amp;gt;\xi&amp;lt;/math&amp;gt; będzie zmienną losową o rozkładzie jednostajnym na przedziale &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;. Jej dystrybuanta &amp;lt;math&amp;gt;J&amp;lt;/math&amp;gt; dana jest więc worem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
J(x) = P(\xi \le x) = \left\{ &lt;br /&gt;
\begin{array}{lrl}&lt;br /&gt;
0 &amp;amp; \mathrm{dla} &amp;amp;   x&amp;lt;0\\&lt;br /&gt;
x &amp;amp; \mathrm{dla} &amp;amp;   0 \le x &amp;lt;1 \\&lt;br /&gt;
1 &amp;amp; \mathrm{dla} &amp;amp;   1 \le x &lt;br /&gt;
\end{array}&lt;br /&gt;
\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
oraz niech &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; będzie dystrybuantą interesującego nas rozkładu. Jeśli &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest funkcją odwracalną to zmienna losowa zdefiniowana jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\eta = F^{-1}(\xi) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jest zmienną losową podlegającą rozkładowi o dystrybuancie &amp;lt;math&amp;gt; F&amp;lt;/math&amp;gt;.&lt;br /&gt;
Własność tę łatwo sprawdzić. Ponieważ dla każdego &amp;lt;math&amp;gt;x \in R &amp;lt;/math&amp;gt; mamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(\eta \le x) = P(F^{-1} (\xi) \le x)  = P(\xi \le F(x)) = F(x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
więc &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;  jest dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;\eta&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Czyli jeśli znamy dystrybuantę interesującego nas rozkładu prawdopodobieństwa i dystrybuanta ta jest odwracalna, to możemy generować liczby z rozkładu o dystrybuancie &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Przykład==== &lt;br /&gt;
Wygenerować liczby pseudolosowe z rozkładu wykładniczego o gęstości prawdopodobieństwa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x) = \lambda e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
* Znajdujemy dystrybuantę tego rozkładu:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = 1-e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znajdujemy funkcję odwrotną do dystrybuanty:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;G(u)=F^{-1}(u) = -\frac{1}{\lambda}\ln(1-u) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Generujemy liczby losowe &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; z przedziału &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt; i stosujemy transformację &amp;lt;math&amp;gt;G(u)&amp;lt;/math&amp;gt;&lt;br /&gt;
* Test generowanego rozkładu robimy przez porównanie dystrybuanty teoretycznej i empirycznej. Proszę zwrócić uwagę na funkcję estymującą dystrybuantę empiryczną&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_wykladniczy(lam, N):&lt;br /&gt;
	'''funkcja zwraca N liczb z rozkładu wykładniczego o parametrze lam&lt;br /&gt;
	korzystając z metody odwracania dystrybuanty&lt;br /&gt;
	Dystrybuanta rozkładu wykładniczego: F(x) = 1- exp(-lam*x)&lt;br /&gt;
	Funkcja do niej odwrotna: G(u) = -1/lam ln(1-u)'''&lt;br /&gt;
&lt;br /&gt;
	u = np.random.random(N)&lt;br /&gt;
	return -1.0/lam* np.log(1.-u)&lt;br /&gt;
	&lt;br /&gt;
def dystrybuanta(X,od=0, do=4, krok=0.05):&lt;br /&gt;
	'''funkcja zwraca dystrybuantę empiryczną &lt;br /&gt;
	zmiennej X na przedziale (od, do) z krokiem krok'''&lt;br /&gt;
	&lt;br /&gt;
	os_x = np.arange(od,do,krok)&lt;br /&gt;
	nx = len(os_x)&lt;br /&gt;
	N_liczb = len(X)&lt;br /&gt;
	D=np.zeros(nx) #wyzerowany wektor na naszą dystrybuantę&lt;br /&gt;
	for i in range(nx):&lt;br /&gt;
		D[i] = sum(X &amp;lt;= os_x[i])/N_liczb&lt;br /&gt;
	return (os_x, D)&lt;br /&gt;
	&lt;br /&gt;
# testujemy: narysujemy dystrybuantę oczekiwaną i empiryczną&lt;br /&gt;
lam=3&lt;br /&gt;
N=10000&lt;br /&gt;
&lt;br /&gt;
x = np.arange(0,4,0.01)&lt;br /&gt;
F = 1-np.exp(-lam*x)&lt;br /&gt;
X = gen_wykladniczy(lam, N)&lt;br /&gt;
(os_x, F_emp) = dystrybuanta(X,od=0, do=4, krok=0.1)&lt;br /&gt;
py.plot(x,F,'r',label = 'dystrybuanta teoretyczna')&lt;br /&gt;
py.plot(os_x, F_emp,'.b', label = 'dystrybuanta empiryczna')&lt;br /&gt;
py.legend()&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że nie zawsze jest łatwo wyznaczyć efektywnie  &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; &amp;amp;mdash; jest tak na przykład w przypadku rozkładu normalnego. W takich sytuacjach można szukać przybliżonej wartości &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt;, rozwiązując numerycznie równanie:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)=u&amp;lt;/math&amp;gt;, co sprowadza się do znalezienia miejsc zerowych funkcji &amp;lt;math&amp;gt;H(x)=F(x)-u&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem napisz funkcję ''MyGen(N)'' dla rozkładu, którego funkcja gęstości prawdopodobieństwa jest dana wzorem:&lt;br /&gt;
&amp;lt;math&amp;gt; f(x) = \frac{1}{\pi (1+x^{2})} &amp;lt;/math&amp;gt;&lt;br /&gt;
Następnie narysuj dla niego dystrybuantę i dystrybuantę empiryczną na przedziale [-10, 10].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
#f(x) = 1/(π(1+x²))             -- f. gęstości prawdopodobieństwa&lt;br /&gt;
#zatem F(x) = arctg(x)/π + 1/2  -- dystrybuanta&lt;br /&gt;
#zatem F⁻¹(x) = tg(π(x-1/2))    -- f. odwrotna do dystrybuanty&lt;br /&gt;
&lt;br /&gt;
def MyGen(size=1):&lt;br /&gt;
	x=np.random.random(size) # liczby z generatora jednostajnego na przedziale [0,1)&lt;br /&gt;
	y=np.tan(np.pi*(x-1/2))  # korzystamy z metody odwracania dystrybuanty&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
x=MyGen(int(1e6))&lt;br /&gt;
bins=np.linspace(-10,10,101)&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step')&lt;br /&gt;
py.plot(bins,1./(np.pi*(1+bins**2)),'r')&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step',cumulative=True)&lt;br /&gt;
py.plot(bins,np.arctan(bins)/np.pi+0.5,'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8536</id>
		<title>WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8536"/>
		<updated>2021-02-18T10:20:51Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadanie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pojęcia wstępne==&lt;br /&gt;
=== Zmienna losowa===&lt;br /&gt;
;Intuicyjnie: Zmienna losowa to taka zmienna, która przyjmuje pewną konkretną wartość w wyniku przeprowadzenia pomiaru lub eksperymentu. Na przykład zmienną losową jest liczba oczek, która wypada na kostce do gry. Dopóki trzymamy kostkę w ręce to nie wiemy jaką wartość ta zmienna przyjmie, konkretną wartość zmienna ta przyjmuje po rzucie. Jednak w kolejnych rzutach nie wiemy jakie będą jej wartości. &lt;br /&gt;
;Bardziej formalnie:  Zmienna losowa to funkcja przypisująca zdarzeniom elementarnym liczby.&lt;br /&gt;
;Zupełnie formalnie:&lt;br /&gt;
Do formalnej definicji potrzebne jest nam pojęcie przestrzeni probabilistycznej:&lt;br /&gt;
Przestrzeń probabilistyczna to układ trzech elementów &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;, gdzie:&lt;br /&gt;
* &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; jest pewnym zbiorem, zwanym przestrzenią zdarzeń elementarnych,&lt;br /&gt;
* &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest [http://pl.wikipedia.org/wiki/Sigma-ciało &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciałem] podzbiorów zbioru &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;. Elementy tego &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciała nazywane są zdarzeniami losowymi,&lt;br /&gt;
* &amp;lt;math&amp;gt;P: F\rightarrow [0,1]&amp;lt;/math&amp;gt; jest miarą probabilistyczną, tzn.&lt;br /&gt;
** &amp;lt;math&amp;gt;P(A) \ge 0 &amp;lt;/math&amp;gt; dla każdego &amp;lt;math&amp;gt;A \in F&amp;lt;/math&amp;gt;,&lt;br /&gt;
** &amp;lt;math&amp;gt;P(\Omega) = 1&amp;lt;/math&amp;gt;,&lt;br /&gt;
** jeżeli zbiory &amp;lt;math&amp;gt;A_1, A_2,\dots,A_n \in F&amp;lt;/math&amp;gt;  są parami rozłączne, to &amp;lt;math&amp;gt;P\left( \bigcup\limits_{i=1}^{\infty} A_i \right ) = \sum_{i=1}^{\infty} P(A_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Niech  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt; będzie przestrzenią probabilistyczną. '''Zmienną losową''' nazywamy dowolna funkcję &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, określoną na przestrzeni zdarzeń elementarnych &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;, o wartościach ze zbioru liczb rzeczywistych i [http://pl.wikipedia.org/wiki/Funkcja_mierzalna mierzalną] względem przestrzeni  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;. Zmienna losowa jest ciągła jeśli jej zbiór wartości jest ciągły, lub dyskretna, jeśli jej zbiór wartości jest dyskretny.&lt;br /&gt;
&lt;br /&gt;
=== Rozkład prawdopodobieństwa===&lt;br /&gt;
Rozkład prawdopodobieństwa &amp;amp;mdash; (rozkład zmiennej losowej) miara probabilistyczna określona na &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciele podzbiorów zbioru wartości zmiennej losowej, pozwalająca przypisywać prawdopodobieństwa zbiorom wartości tej zmiennej, odpowiadającym zdarzeniom losowym.&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej dyskretnej możemy wprowadzić pojęcie '''funkcji prawdopodobieństwa''':&lt;br /&gt;
&amp;lt;math&amp;gt;P(X=x_i) = p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Przykład: Dla rzutów monetą funkcję prawdopodobieństwa można zobrazować jako tabelkę:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
! Zdarzenie:&lt;br /&gt;
! orzeł&lt;br /&gt;
! reszka&lt;br /&gt;
|-&lt;br /&gt;
|zmienna losowa&lt;br /&gt;
|&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
| prawdopodobieństwo&lt;br /&gt;
| &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; &lt;br /&gt;
| 1/2&lt;br /&gt;
| 1/2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Można też przedstawić ją na wykresie:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta_1.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej ciągłej zamiast funkcji prawdopodobieństwa wprowadzamy '''funkcję gęstości prawdopodobieństwa'''. Jest to funkcja określona na zbiorze liczb rzeczywistych posiadająca następujące własności:&lt;br /&gt;
* jest nieujemna: &amp;lt;math&amp;gt;f(x) \ge 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
* prawdopodobieństwo tego, że zmienna losowa przyjmie wartość z przedziału &amp;lt;math&amp;gt;(a,b]&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; \int_a^b f(x) dx = P(a&amp;lt;X \le b) &amp;lt;/math&amp;gt;&lt;br /&gt;
[[Plik:Funkcja_gestosci_prawdopodobienstwa.png]]&lt;br /&gt;
* Prawdopodobieństwo tego, że zmienna losowa przyjmie dowolną wartość: &amp;lt;math&amp;gt; \int_{-\infty}^{+\infty} f(x) dx = P(-\infty &amp;lt;X \le +\infty) = 1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dystrybuanta ===&lt;br /&gt;
Dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy funkcję &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; określoną na zbiorze liczb rzeczywistych jako:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = P(X \le x)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
czyli wartość dystrybuanty w punkcie &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; jest prawdopodobieństwem, że zmienna losowa przyjmie wartość nie większą niż &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Dla zmiennej dyskretnej:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x)=P(X \le x) = \sum_{x_i&amp;lt;x}{P(X = x_i) } =  \sum_{x_i&amp;lt;x}p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla zmiennej losowej ciągłej z funkcją gęstości prawdopodobieństwa &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = P(X \le x)= \int_{-\infty}^x f(s) ds &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zauważmy ścisły związek dystrybuanty z funkcją prawdopodobieństwa w przypadku dyskretnym i funkcją gęstości prawdopodobieństwa w przypadku ciągłym.&lt;br /&gt;
&lt;br /&gt;
Przykład z monetą:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Momenty ===&lt;br /&gt;
Dla zmiennej losowej można obliczyć momenty zwykłe lub centralne. &lt;br /&gt;
&lt;br /&gt;
;Moment zwykły: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi tej zmiennej. Oblicza się go tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;m_k = E(X^k) =   \sum_{i} {x_i^k p_i}  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; oznacza prawdopodobieństwo, że &amp;lt;math&amp;gt;X = x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt; m_k = E(X^k) =  \int\limits_{-\infty}^{\infty} {x^k f(x)dx}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; jest funkcją gęstości prawdopodobieństwa.&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że pierwszy moment zwykły to średnia.&lt;br /&gt;
&lt;br /&gt;
;Moment centralny: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi funkcji &amp;lt;math&amp;gt;[x_i - E(x_i)]&amp;lt;/math&amp;gt;. Zatem możemy go obliczyć tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left( \left[ X-E(X) \right] ^k \right) =   \sum_{i} {\left[x_i-E(X)\right]^k p_i}  &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left(\left[X-E(X)\right]^k\right) =  \int\limits_{-\infty}^{\infty} {  \left[X-E(X)\right]^k f(x)dx}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uwaga:&lt;br /&gt;
* Drugi moment centralny ma swoją nazwę. Jest to '''wariancja''', często oznaczana przez &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Trzeci moment centralny przydaje się do badania symetrii rozkładu. Przyjmuje on wartość 0 dla zmiennych o rozkładzie symetrycznym, wartości ujemne dla zmiennych o rozkładzie wydłużonym w lewą stronę i wartości dodatnie dla zmiennych o rozkładzie wydłużonym w prawą stronę.  &lt;br /&gt;
* Czwarty moment centralny jest przydatny do konstrukcji miary spłaszczenia rozkładu zmiennej losowej '''kurtozy'''. Definiuje się ją następująco:&lt;br /&gt;
: &amp;lt;math&amp;gt; \mathrm{Kurt} = \frac{\mu_4}{\mu_2^4} - 3 &amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkłady prawdopodobieństwa można podzielić ze względu na wartość kurtozy na rozkłady:&lt;br /&gt;
* mezokurtyczne &amp;amp;mdash; wartość kurtozy wynosi 0, spłaszczenie rozkładu jest podobne do spłaszczenia rozkładu normalnego (dla którego kurtoza wynosi dokładnie 0)&lt;br /&gt;
* leptokurtyczne &amp;amp;mdash; kurtoza jest dodatnia, wartości cechy bardziej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
* platokurtyczne &amp;amp;mdash; kurtoza jest ujemna, wartości cechy mniej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
&lt;br /&gt;
=== Kwantyle ===&lt;br /&gt;
Kwantylem rzędu ''p'', gdzie &amp;lt;math&amp;gt;0 \leqslant p \leqslant 1&amp;lt;/math&amp;gt;, w rozkładzie empirycznym &amp;lt;math&amp;gt; P_{X} &amp;lt;/math&amp;gt;  zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy każdą liczbę &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt;, dla której spełnione są nierówności&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X((-\infty, x_p]) \geqslant p&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
oraz&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X([x_p,\infty)) \geqslant 1-p.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W szczególności, kwantylem rzędu ''p'' jest taka wartość &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; zmiennej losowej, że wartości mniejsze lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej ''p'', zaś wartości większe lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej 1&amp;amp;minus;''p''.&lt;br /&gt;
&lt;br /&gt;
Możemy zatem myśleć o obliczaniu kwantyla tak:&lt;br /&gt;
* zaobserwowaliśmy ''n'' wartości zmiennej losowej,&lt;br /&gt;
* zapiszemy te wartości na liście,&lt;br /&gt;
* następnie listę tę sortujemy w porządku rosnącym,&lt;br /&gt;
* kwantylem rzędu ''p'' jest albo element znajdujący się na liście w pozycji ''np'' jeśli ''np'' jest całkowite albo średnią z elementów położonych najbliżej ''np'' w przeciwnym wypadku.  &lt;br /&gt;
==== Nazwy poszczególnych kwantyli ====&lt;br /&gt;
Kwantyl rzędu 1/2 to inaczej mediana (ściślej zależy to od definicji mediany, przy jej obliczaniu z próbki o parzystej liczbie elementów często stosuje się średnią arytmetyczną dwóch środkowych elementów, szczegóły są w artykule).&amp;lt;br/&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/4, 2/4, 3/4 są inaczej nazywane kwartylami. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/5, 2/5, 3/5, 4/5 to inaczej kwintyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/10, 2/10, ..., 9/10 to inaczej decyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/100, 2/100, ..., 99/100 to inaczej percentyle. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pseudolosowość==&lt;br /&gt;
W obliczeniach numerycznych często korzystamy z liczb &amp;amp;bdquo;losowych&amp;amp;rdquo;. Tak naprawdę sekwencje liczb, których używamy są jedynie pseudolosowe, &lt;br /&gt;
tzn. są wytwarzane w deterministyczny (algorytmiczny) sposób, ale sekwencja generowanych wartości ma pewne cechy losowości. W idealnym przypadku cechą tą jest nieprzewidywalność: na podstawie obserwacji dotychczasowych wartości sekwencji niemożliwe jest podanie kolejnych wartości. W praktyce oznacza to nie możność ustalenie ziarna lub stanu wewnętrznego generatora na podstawie obserwacji dowolnie długiego ciągu wygenerowanych bitów.&lt;br /&gt;
Stan generatora przechowywany jest na zmiennych o skończonej precyzji. Jeśli stan jest przechowywany na &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; bitach to górną granicą na długość unikalnego ciągu liczb jest &amp;lt;math&amp;gt;2^n&amp;lt;/math&amp;gt;. Zazwyczaj unikalna sekwencja jest jednak krótsza. Wynika stąd, że  generatory liczb pseudolosowych mają  okres, po którym sekwencja liczb powtarza się. Podstawowe generatory liczb pseudolosowych wytwarzają liczby podlegające rozkładowi jednostajnemu (płaskiemu).&lt;br /&gt;
&lt;br /&gt;
Istnieją generatory &amp;amp;bdquo;prawdziwych&amp;amp;rdquo; liczb losowych, które są osobnymi urządzeniami. Liczy przez nie dostarczane są pewnymi parametrami jakichś procesów fizycznych, przebiegających w tych urządzeniach (zależnie od producenta). Do naszych zastosowań w zupełności wystarczą liczby generowane przez algorytmy komputerowe.&lt;br /&gt;
&lt;br /&gt;
Proste generatory liczb pseudolosowych można otrzymać jako funkcje używające operacji dzielenia modulo (generatory kongruencyjne):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{n+1}=f(x_n,x_{n-1}, ..., x_{n-k})\mod M&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zakładamy, że argumentami funkcji &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; są liczby całkowite ze zbioru &amp;lt;math&amp;gt;{0, 1, ...,M-1}&amp;lt;/math&amp;gt;. Dla ustalenia uwagi mogą to być generatory liniowe typu: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; x_{n+1}= (ax_{n} + c )\mod M&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład generatora liniowego ===&lt;br /&gt;
Dla przykładu zaimplementujmy jeden taki generator:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N=1):&lt;br /&gt;
    '''Przykład generatora liniowego. &lt;br /&gt;
       funkcja zwraca liczby pseudolosowe z przedziału [0,1)&lt;br /&gt;
       x - ziarno, &lt;br /&gt;
       N - ile liczb zwrócić'''&lt;br /&gt;
    m=8191&lt;br /&gt;
    a=101&lt;br /&gt;
    c=1731&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i]= x/m&lt;br /&gt;
    return y    &lt;br /&gt;
x=gen(23,100000)&lt;br /&gt;
py.hist(x)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Liczby &amp;lt;tt&amp;gt; m, a, c&amp;lt;/tt&amp;gt; są parametrami generatora. Liczba &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;, od której startuje generator nazywana jest ziarnem generatora {{ang|seed}}.&lt;br /&gt;
Funkcja &amp;lt;tt&amp;gt;py.hist()&amp;lt;/tt&amp;gt; zlicza i wyrysowuje histogram (czy wiemy co to jest histogram?).&lt;br /&gt;
* Wywołaj funkcję &amp;lt;tt&amp;gt;gen&amp;lt;/tt&amp;gt; dla tego samego ziarna kilka razy zaobserwuj powtarzalność wartości.&lt;br /&gt;
&lt;br /&gt;
W module &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; mamy do dyspozycji generator liczb pseudolosowych oparty na algorytmie [http://pl.wikipedia.org/wiki/Mersenne_Twister  Mersenne Twister ]&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
kod demonstrujacy pseudolosowosc&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import numpy as np&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(5)&lt;br /&gt;
&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
y=np.random.random(5)&lt;br /&gt;
print('x:', x)&lt;br /&gt;
print('y:', y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Zaobserwuj powtarzalność wartości.&lt;br /&gt;
* Wygeneruj i wykreśl 200 kolejnych liczb pseudolosowych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(200)&lt;br /&gt;
&lt;br /&gt;
py.plot(x,'.')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testy jakości===&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Dla wyżej wymienionych generatorów, proszę wykonać następujące testy:&lt;br /&gt;
* zobrazować rozkład prawdopodobieństwa (narysować histogram);&lt;br /&gt;
&amp;lt;!-- Tymczasowo wylaczane przez RK 14.02.2013 * test zgodności momentów &amp;amp;mdash; czy momenty obliczone dla wygenerowanych liczb są takie jak przewiduje teoria;--&amp;gt;&lt;br /&gt;
* test korelacji na rysunku: sporządzić wykres gdzie na jednej osi są wartości &amp;lt;math&amp;gt;x_n&amp;lt;/math&amp;gt; na drugiej zaś wartości &amp;lt;math&amp;gt;x_{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Tymczasowo wylaczone przez RK 14.02.2013 # momenty dla rozkładu jednostajnego [0, 1]&lt;br /&gt;
# mu = 0.5&lt;br /&gt;
# var = 1/12&lt;br /&gt;
# kurtoza -6/5&lt;br /&gt;
mu=np.mean(x)&lt;br /&gt;
var = np.sum((x - mu)**2)/N&lt;br /&gt;
kurtoza = np.sum((x-mu)**4)/N/var**2-3&lt;br /&gt;
print u'wartości teoretyczne:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':0.5,'v':1.0/12,'k':-6.0/5}&lt;br /&gt;
print u'wartości z próby:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':mu,'v':var,'k':kurtoza} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N):&lt;br /&gt;
    m=8765132137&lt;br /&gt;
    a=42347&lt;br /&gt;
    c=1731&lt;br /&gt;
&lt;br /&gt;
    ## warto porównać wynik dla poniższych parametrów&lt;br /&gt;
    #m=8191&lt;br /&gt;
    #a=101&lt;br /&gt;
    #a=107&lt;br /&gt;
&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i] = x/m&lt;br /&gt;
    return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=10000&lt;br /&gt;
x=gen(23,N)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.hist(x,30,normed = True)&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(x[:-1],x[1:],'.')&lt;br /&gt;
py.xlabel('x_n')&lt;br /&gt;
py.ylabel('x_{n+1}')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Bardziej wyczerpujące baterie testów jakości generatorów można znaleźć na przykład w:&lt;br /&gt;
* http://csrc.nist.gov/groups/ST/toolkit/rng/index.html&lt;br /&gt;
* http://www.phy.duke.edu/~rgb/General/rand_rate.php&lt;br /&gt;
&lt;br /&gt;
== Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; ==&lt;br /&gt;
=== Wstęp ===&lt;br /&gt;
Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; są zaimplementowane jako dwie klasy: &amp;lt;tt&amp;gt;stats.rv_continuous&amp;lt;/tt&amp;gt;  (bazuje na niej ponad 80 typów rozkładów ciągłych zmiennych losowych) i &amp;lt;tt&amp;gt;stats.rv_discrete&amp;lt;/tt&amp;gt; (bazuje na niej 10 typów rozkładów dyskretnych zmiennych losowych). Aktualną listę dostępnych rozkładów można uzyskać np. przy pomocy następującego skryptu:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
from scipy import stats&lt;br /&gt;
dc= [d for d in dir(stats) if isinstance(getattr(stats,d), stats.rv_continuous)]&lt;br /&gt;
print(dc)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Przykładowo: zmienne losowe o rozkładzie normalnym są reprezentowane przez klasę &amp;lt;tt&amp;gt;norm&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Funkcje przydatne do pracy ze zmiennymi losowymi dostępne są jako metody ===&lt;br /&gt;
&lt;br /&gt;
Obiekty reprezentujące zmienne losowe podlegające konkretnym rozkładom posiadają następujące metody:&lt;br /&gt;
* &amp;lt;tt&amp;gt;rvs&amp;lt;/tt&amp;gt;: '''generator zmiennych losowych''' danego typu;&lt;br /&gt;
* &amp;lt;tt&amp;gt;cdf&amp;lt;/tt&amp;gt;: '''dystrybuanta''' (ang. Cumulative Distribution Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;ppf&amp;lt;/tt&amp;gt;: '''funkcja odwrotna do dystrybuanty''' (ang. Percent Point Function (Inverse of CDF));&lt;br /&gt;
* &amp;lt;tt&amp;gt;stats&amp;lt;/tt&amp;gt;: zwraca '''momenty centralne rozkładu''' (średnią, wariancję, skośność i kurtozę);&lt;br /&gt;
* &amp;lt;tt&amp;gt;moment&amp;lt;/tt&amp;gt;: zwraca niecentralne momenty rozkładu.&lt;br /&gt;
* &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt;: '''funkcja gęstości prawdopodobieństwa''' (ang. Probability Density Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;pmf&amp;lt;/tt&amp;gt; dla rozkładów dyskretnych  &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt; jest zamienione na '''funkcję prawdopodobieństwa''' (ang. probability mass function; ''masa'' przez analogię z gęstością masy i masą punktową);&lt;br /&gt;
* &amp;lt;tt&amp;gt;sf&amp;lt;/tt&amp;gt;: funkcja przeżycia (ang. Survival Function) (1&amp;amp;minus;CDF);&lt;br /&gt;
* &amp;lt;tt&amp;gt;isf&amp;lt;/tt&amp;gt;: funkcja odwrotna do funkcji przetrwania (ang. Inverse Survival Function (Inverse of SF));&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Zobaczmy działanie tych metod dla zmiennych losowych z rozkładu normalnego:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
x = st.norm.rvs(size=10000)&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
py.hist(x,bins=bins)&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zmienne losowe mogą być używane na jeden z dwóch sposobów: można podawać wszystkie parametry opisujące rozkład w każdym wywołaniu metody, albo wytworzyć obiekt reprezentujący rozkład o konkretnych parametrach (w dokumentacji &amp;lt;tt&amp;gt;scipy&amp;lt;/tt&amp;gt; jest to nazywane zamrażaniem parametrów rozkładu, ang. ''freezing'')&lt;br /&gt;
Jako przykład zobaczmy funkcję odwrotną do dystrybuanty rozkładu normalnego N(2, 9): &lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; import scipy.stats as st&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.norm.ppf(0.05, loc=2, scale=3))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; my_norm = st.norm(loc=2,scale=3)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(my_norm.ppf(0.05))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
&lt;br /&gt;
=== Pomoc do poszczególnych rozkładów ===&lt;br /&gt;
Pełną dokumentację każdego rozkładu mamy dostępną w postaci docstringów. Dla przykładu:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
help(st.nct)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
wypisuje pełną informację z docstring o niecentralnym rozkładzie ''t''.&lt;br /&gt;
Podstawowe informacje można uzyskać wypisując treść pola &amp;lt;tt&amp;gt;extradoc&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.nct.extradoc)&lt;br /&gt;
 Non-central Student T distribution&lt;br /&gt;
 df**(df/2) * gamma(df+1)&lt;br /&gt;
 nct.pdf(x,df,nc) = --------------------------------------------------&lt;br /&gt;
 2**df*exp(nc**2/2)*(df+x**2)**(df/2) * gamma(df/2)&lt;br /&gt;
 for df &amp;gt; 0, nc &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Wypisz pomoc dla (centralnego) rozkładu ''t'' i sprawdź jakie parametry on przyjmuje. Wybierz dowolnie ich wartości, a następnie posiłkując się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład|przykładem]]:&lt;br /&gt;
# Wygeneruj 10000 liczb z rozkładu ''t'' i narysuj ich histogram.&lt;br /&gt;
# Wykreśl gęstość prawdopodobieństwa tego rozkładu.&lt;br /&gt;
# Wykreśl dystrybuantę.&lt;br /&gt;
# Wykreśl funkcję odwrotną do dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=10000       # ile liczb generujemy&lt;br /&gt;
&lt;br /&gt;
# przykładowe parametry rozkładu&lt;br /&gt;
df = 3        # liczba stopni swobody&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
x = st.t.rvs(size=N, df=df)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;) #histtype=&amp;quot;step&amp;quot; daje nam przezroczysty histogram&lt;br /&gt;
x = st.norm.rvs(size=N)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.t.pdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y,'g')&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.t.cdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z,'g')&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
 &lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.t.ppf(os_p, df=df)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f,'g')&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
py.legend([&amp;quot;Rozkład t-Studenta&amp;quot;,&amp;quot;Rozkład normalny&amp;quot;])&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Statystyki i estymatory ===&lt;br /&gt;
Estymator jest statystyką służącą do szacowania pewnej wielkości (np. parametru) na podstawie próby losowej (np. danych eksperymentalnych). Na wykładzie poznaliśmy m.in. takie statystki jak [[WnioskowanieStatystyczne/Momenty|wartość oczekiwana, wariancja i mediana]], z których ostatnia jest szczególnym przypadkiem [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Kwantyle|kwantylu]]. Moduły numpy oraz scipy.stats umożliwiają łatwe estymowanie niektórych statystyk, a także obliczanie ich rzeczywistych wartości, jeśli znamy parametry rozkładu.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jako przykład niech posłuży poniższy kod, w którym szukamy wartości estymatorów wartości oczekiwanej oraz wariancji rozkładu normalnego na podstawie próby losowej, a wynik porównujemy z wartościami rzeczywistymi:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
m=2&lt;br /&gt;
s=0.5&lt;br /&gt;
rozklad = st.norm(m,s) #definiujemy rozkład normalny&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()  # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
var  = rozklad.var()   # rzeczywiste odchylenie standardow&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)  # estymowana wartość oczekiwana&lt;br /&gt;
var_est  = np.var(x)   # estymowana wariancja&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem wygeneruj próby losowe dla następujących rozkładów:&lt;br /&gt;
# Rozkład normalny &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; = 100, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; = 2.&lt;br /&gt;
# Rozkład dwumianowy p = 0.4, n =10.&lt;br /&gt;
# Rozkład poissona &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; = 4.&lt;br /&gt;
# Rozkład jednostajny na przedziale [2, 6).&lt;br /&gt;
Następnie estymuj na ich podstawie wartości poniższych statystyk i porównaj je z wartościami obliczonymi na podstawie znanych parametrów rozkładu:&lt;br /&gt;
# Wartość oczekiwana.&lt;br /&gt;
# Odchylenie standardowe.&lt;br /&gt;
# Wariancja.&lt;br /&gt;
# Mediana.&lt;br /&gt;
# Kurtoza.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
Poniżej znajduje się przykładowe rozwiązanie dla rozkładu dwumianowego. Aby uzyskać rozwiązanie dla pozostałych rozkładów wystarczy dostosować pierwszą część kodu, gdzie definiowany jest rozkład.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
n=10&lt;br /&gt;
p=0.4&lt;br /&gt;
rozklad = st.binom(n,p) #definiujemy nasz rozkład&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
# dalsza część jest jest niezależna od rodzaju rozkładu, który zdefiniowaliśmy powyżej&lt;br /&gt;
###########################################################################################&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()           # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
std  = rozklad.std()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
var  = rozklad.var()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
med  = rozklad.median()         # rzeczywista mediana&lt;br /&gt;
kurt = float(rozklad.stats('k'))# rzecz. kurtoza (funkcja zwraca jednoelementową tablicę&lt;br /&gt;
                                # numpy.ndarray, więc trzeba ją ręcznie zrzutować na float)&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)     # estymowana wartość oczekiwana&lt;br /&gt;
std_est  = np.std(x)      # estymowane odchylenie standardowe&lt;br /&gt;
var_est  = np.var(x)      # estymowana wariancja&lt;br /&gt;
med_est  = np.median(x)   # estymowana mediana&lt;br /&gt;
kurt_est = st.kurtosis(x) # estymowana kurtoza&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Odchylenie standardowe rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(std,std_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
print(&amp;quot;Mediana rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(med,med_est))&lt;br /&gt;
print(&amp;quot;Kurtoza rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(kurt,kurt_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generowanie zmiennych losowych podlegającym różnym rozkładom prawdopodobieństwa ==&lt;br /&gt;
Podstawowe typy generatorów liczb losowych wytwarzają liczby losowe podlegające rozkładowi jednostajnemu. Zastanowimy sie teraz jak mając zmienne losowe z rozkładu jednostajnego wytworzyć zmienne losowe o innych rozkładach.&lt;br /&gt;
=== Rozkład dwumianowy ===&lt;br /&gt;
Zmienna losowa, która zlicza liczbę sukcesów &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; próbach, gdzie &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest prawdopodobieństwem sukcesu w pojedynczej próbie, podlega rozkładowi dwumianowemu&lt;br /&gt;
[[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_dwumianowy więcej o rozkładzie dwumianowym]]: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_n(k)=\left(  &lt;br /&gt;
\begin{array}{c} &lt;br /&gt;
n \\&lt;br /&gt;
k&lt;br /&gt;
\end{array} &lt;br /&gt;
\right) p^kq^{n-k}=\frac{n!}{k!(n-k)!}p^kq^{n-k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Jak z rozkładu jednostajnego wytworzyć zmienne losowe o rozkładzie dwumianowym?''&lt;br /&gt;
* Wykonać symulację!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_binom(n,p,N):&lt;br /&gt;
	'''funkcja zwracająca zmienną losową z rozkładu dwumianowego: &lt;br /&gt;
	ilość sukcesów w n próbach przy prawdopodobieństwie sukcesu p&lt;br /&gt;
	parametry:&lt;br /&gt;
		n: liczba prób&lt;br /&gt;
		p: prawdopodobieństwo sukcesu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będącymi liczbami sukcesów&lt;br /&gt;
	'''&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję n liczb z rozkładu jednostajnego [0,1) i jako sukcesy&lt;br /&gt;
	#traktuję wylosowanie liczby nie większej niż p&lt;br /&gt;
	r=np.random.rand(N,n)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
n=20&lt;br /&gt;
N=100000&lt;br /&gt;
p=0.8&lt;br /&gt;
x = gen_binom(n,p,N)&lt;br /&gt;
bins =range(22) #granice binów&lt;br /&gt;
py.hist(x,bins)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Z oszacowań agencji wynika, że średnio 2 z 3 reklam spotyka się z pozytywnym odzewem. Akcja marketingowa obejmuje 12 reklam. Niech &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; oznacza liczbę reklam skutecznych. Czy &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi dwumianowemu?&lt;br /&gt;
Jakie jest prawdopodobieństwo, że 10 reklam będzie skutecznych?&lt;br /&gt;
Prawdopodobieństwo obliczyć ze wzoru oraz korzystając z symulacji.&lt;br /&gt;
&lt;br /&gt;
Wskazówka informacje o zmiennych z rozkładu dwumianowego (&amp;lt;tt&amp;gt;binom&amp;lt;/tt&amp;gt;) można uzyskać tak:&lt;br /&gt;
 # &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
 #   Binomial distribution&lt;br /&gt;
 #&lt;br /&gt;
 #   Counts the number of successes in *n* independent&lt;br /&gt;
 #   trials when the probability of success each time is *pr*.&lt;br /&gt;
 #&lt;br /&gt;
 #   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
 #   for k in {0,1,...,n}&lt;br /&gt;
Odp: ''p'' = 0,127&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
p=2/3 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n=12   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
&lt;br /&gt;
# ze wzoru &lt;br /&gt;
&lt;br /&gt;
# &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
#   Binomial distribution&lt;br /&gt;
#&lt;br /&gt;
#   Counts the number of successes in *n* independent&lt;br /&gt;
#   trials when the probability of success each time is *pr*.&lt;br /&gt;
#&lt;br /&gt;
#   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
#   for k in {0,1,...,n}&lt;br /&gt;
p_wz = st.binom.pmf(10,n,p)&lt;br /&gt;
print(p_wz)&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =100000 # liczba powtórzeń symulacji&lt;br /&gt;
k = np.zeros(N_powt)&lt;br /&gt;
for i in range(N_powt):&lt;br /&gt;
	r = rnd.random(size=n) # symulowana akcja reklamowa &lt;br /&gt;
	k[i]=np.sum(r&amp;lt;=p)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k==10)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Na egzaminie testowym jest 30 pytań. Na każde pytanie są podane cztery możliwe odpowiedzi, z czego tylko jedna jest prawdziwa. Za prawidłową odpowiedź student otrzymuje 1 punkt a za fałszywą &amp;amp;minus;0,5 punktu. Próg zaliczenia wynosi 15 punktów. Oblicz prawdopodobieństwo, że udzielając czysto losowych odpowiedzi student zaliczy egzamin.&lt;br /&gt;
&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
Liczba prawidłowych odpowiedzi w teście może być potraktowana jako liczba sukcesów k w n = 30 próbach. Prawdopodobieństwo sukcesu pojedynczego zdarzenia (prawidłowa odpowiedź na jedno pytanie) wynosi p = 1/4. Ze względu na obecność ujemnych punktów za fałszywe odpowiedzi zmienia się efektywna liczba punktów wymaganych do zaliczenia zgodnie z równaniem:&lt;br /&gt;
k-0.5*(30-k) = 15&lt;br /&gt;
co daje k = 20&lt;br /&gt;
Zatem problem redukuje się do wyznaczenia prawdopodobieństwa co najmniej 20 sukcesów w 30 próbach, przy czym prawdopodobieństwo sukcesu w 1 próbie wynosi p=1/4:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
p = 1./4 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n = 30   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
k_kryt = 20&lt;br /&gt;
# ze wzoru &lt;br /&gt;
p_wz = np.sum(st.binom.pmf(range(k_kryt,n+1),n,p))&lt;br /&gt;
print(p_wz)&lt;br /&gt;
&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =10000000 # liczba powtórzeń symulacji&lt;br /&gt;
r = np.random.random(size=(n,N_powt)) # symulowany test &lt;br /&gt;
k = np.sum(r&amp;lt;=p,0)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k&amp;gt;=20)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład Poissona ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(k)=\frac{\mu^k e^{-\mu}}{k!}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkładowi Poissona podlegają zmienne losowe zliczające w jednostce czasu liczbę zdarzeń o niskim prawdopodobieństwie zajścia. Np. liczba rozpadów promieniotwórczych na jednostkę czasu [[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_Poissona więcej o rozkładzie Poissona]]&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Lekarz pełniący dyżur w szpitalu jest wzywany do pacjentów średnio 3 razy w ciągu nocy. Załóżmy, że liczba wezwań na noc podlega rozkładowi Poissona. Jakie jest prawdopodobieństwo, że noc upłynie lekarzowi spokojnie?&lt;br /&gt;
U nas &amp;lt;math&amp;gt;\mu=3&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt; więc&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(0) = \frac{3^0e^{-3}}{0!} = e^{-3} = 0,0498&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jak ze zmiennych podlegających rozkładowi jednostajnemu uzyskać zmienne podlegające rozkładowi Poissona?&lt;br /&gt;
&lt;br /&gt;
Wykonać symulację wynikającą z następujących spostrzeżeń:&lt;br /&gt;
&lt;br /&gt;
* Weźmy jednostkę czasu. Ma w niej zachodzić średnio &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; zdarzeń. &lt;br /&gt;
* Podzielmy jednostkę czasu na ''NT'' odcinków o jednakowej długości. &lt;br /&gt;
* Prawdopodobieństwo, że zdarzenie zajdzie w konkretnym odcinku jest &amp;lt;math&amp;gt;p=\frac{\mu}{NT}&amp;lt;/math&amp;gt; Takie prawdopodobieństwo ma też wylosowanie przy pomocy generatora liczb z rozkładu jednostajnego [0,1) liczby nie większej niż ''p''. &lt;br /&gt;
* Zatem, aby wytworzyć jedną liczbę z rozkładu Poissona można policzyć ile spośród ''NT'' liczb z rozkładu jednostajnego [0,1) jest nie większych niż ''p''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
def gen_poiss(mi,NT,N):&lt;br /&gt;
	'''funkcja zwracająca zmienne losowe z rozkładu poissona: &lt;br /&gt;
	średnia ilość zdarzeń o niskim prawdopodobieństwie w jednostce czasu&lt;br /&gt;
	parametry:&lt;br /&gt;
		mi: średnia liczba zdarzeń&lt;br /&gt;
		NT: liczba odcinków czasu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będących zliczeniami zdarzeń&lt;br /&gt;
	'''&lt;br /&gt;
	p = float(mi)/NT&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję NT liczb z rozkładu jednostajnego [0,1) i jako zajście zdarzenia&lt;br /&gt;
	# traktuję wylosowanie liczby nie większej niż p. Ilość zdarzeń to liczba z rozkładu Poissona&lt;br /&gt;
	r=np.random.rand(N,NT)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
 &lt;br /&gt;
# kod testujący&lt;br /&gt;
mi=4&lt;br /&gt;
N=100000&lt;br /&gt;
NT = 10000&lt;br /&gt;
x = gen_poiss(mi,NT,N)&lt;br /&gt;
bins =np.arange(int(x.max()+1))-0.5&lt;br /&gt;
py.hist(x,bins,normed=True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# porównanie z generatorami scipy.stats&lt;br /&gt;
p=mi/NT&lt;br /&gt;
k=np.arange(x.max()+1)&lt;br /&gt;
B=st.binom.pmf(k,NT,p)&lt;br /&gt;
py.plot(k,B,'ro')&lt;br /&gt;
P=st.poisson.pmf(k,mi)&lt;br /&gt;
py.plot(k,P,'go')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład normalny i Centralne Twierdzenie Graniczne ===&lt;br /&gt;
Gęstość prawdopodobieństwa [[WnioskowanieStatystyczne/Rozklady-przyklady#Rozk.C5.82ad_Gaussa| rozkładu normalnego]] dana jest wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{ -\frac{(x-\mu)^2}{2 \sigma^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie: &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; &amp;amp;mdash; średnia, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; &amp;amp;mdash; odchylenie standardowe (&amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; &amp;amp;mdash; wariancja).&lt;br /&gt;
&lt;br /&gt;
Jeden ze  sposóbw wytwarzania zmiennych losowych o rozkładzie normalnym  polega na zastosowaniu [[WnioskowanieStatystyczne/CLT| Centralnego Twierdzenia Granicznego]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;X=\frac{\sqrt{12}}{\sqrt{N}}\left(\sum_{n=1}^N Y_n -\frac{N}{2}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; zmienna losowa z rozkładu jednostajnego &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;&lt;br /&gt;
W granicy dużych &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; rozkład zmiennej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; dąży do rozkładu normalnego &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt;, która zwraca liczbę losową ''X'' otrzymaną zgodnie powyższym wzorem  przez sumowanie &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt; liczb z rozkładu jednostajnego.&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG(N, N_liczb)&amp;lt;/tt&amp;gt; korzystającą z &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt; i zwracającą zadaną ilość liczb &amp;lt;tt&amp;gt;N_liczb&amp;lt;/tt&amp;gt;&lt;br /&gt;
* narysować histogramy 10 000 liczb &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; uzyskanych kolejno dla &amp;lt;math&amp;gt;N={1,2,...,12}&amp;lt;/math&amp;gt;&lt;br /&gt;
* Jakie parametry charakteryzują rozkład do którego zbiegają sumy? Przy każdym z powyższych histogramów wypisz średnią i wariancję z próby (funkcje &amp;lt;tt&amp;gt;np.mean&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;np.var&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
 &lt;br /&gt;
def gen_CTG_1(N):&lt;br /&gt;
	'''Funkcja generująca pojedynczą zmienną losową będącą sumą N liczb z rozkładu jednostajnego [0,1)&lt;br /&gt;
	pomnożoną przez czynnik normujący zapewniający wariancję równą 1.&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		jedną liczbę losową'''&lt;br /&gt;
	X = np.sqrt(12/N) * (np.sum(rnd.random(N)) - N/2)&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
def gen_CTG(N,N_liczb):&lt;br /&gt;
	'''Funkcja zwraca wektor (tablicę) zmiennych losowych będących sumami N liczb z rozkładu jednostajnego [0,1).&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
		N_liczb: ilość liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N_liczb losowych'''&lt;br /&gt;
&lt;br /&gt;
	X=np.zeros(N_liczb)&lt;br /&gt;
&lt;br /&gt;
	for i in range(N_liczb):&lt;br /&gt;
		X[i] = gen_CTG_1(N)&lt;br /&gt;
&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
Nmax=12&lt;br /&gt;
&lt;br /&gt;
for N in range(1,Nmax+1):&lt;br /&gt;
	X=gen_CTG(N,N_liczb)&lt;br /&gt;
	py.subplot(3,4,N)&lt;br /&gt;
	bins = np.arange(-4,4,0.1)&lt;br /&gt;
	py.hist(X,bins=bins,normed=True)&lt;br /&gt;
	py.title(&amp;quot;N=%i, µ=%.2g, σ²=%.2g&amp;quot;%(N, X.mean(), X.var(ddof=1)))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie: transformacja rozkładu normalnego ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozkład o średniej 0 i wariancji 1 (notacja  &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;) jest nazywany rozkładem standardowym i często jest oznaczany literą &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Dokonując odpowiedniej transformacji można z rozkładu &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; uzyskać dowolny inny rozkład normalny. &lt;br /&gt;
&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować 100000 zmiennych losowych z rozkładu &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.rvs(loc=0, scale=1, size=100000)&amp;lt;/tt&amp;gt;) &lt;br /&gt;
* przetransformować je do zmiennych losowych &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt;. &lt;br /&gt;
* narysować histogramy zmiennych przed i po transformacji.&lt;br /&gt;
* narysować rozkład gęstości prawdopodobieństwa dla rozkładu &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.pdf(...)&amp;lt;/tt&amp;gt;) .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
Z=st.norm.rvs(loc=0,scale=1,size=100000) #losowanie liczb z rozkładu N(0,1) (czyli Z)&lt;br /&gt;
&lt;br /&gt;
std=9&lt;br /&gt;
mu=2&lt;br /&gt;
X=Z*std+mu #transformacja do σ=9, µ=2&lt;br /&gt;
&lt;br /&gt;
szerokosc_binu=0.5&lt;br /&gt;
bins=np.arange(-40,40.5,szerokosc_binu) #te same granice binów dla obu histogramów&lt;br /&gt;
&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(Z,bins=bins,normed=True,label=&amp;quot;histogram przed transformacją&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(Z.mean(),Z.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(X,bins=bins,normed=True,label=&amp;quot;histogram po transformacji&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
PDF=st.norm.pdf(bins,loc=mu,scale=std) #modelowa gęstość prawdopodobieństwa dla σ=9, µ=2&lt;br /&gt;
py.plot(bins+szerokosc_binu/2,PDF,&amp;quot;ro&amp;quot;,label=&amp;quot;gęstość prawd.&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(X.mean(),X.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Transformacja Boxa-Mullera====&lt;br /&gt;
To inna popularna metoda  metoda generowania liczb losowych o rozkładzie normalnym, na podstawie dwóch wartości zmiennej o rozkładzie jednostajnym na przedziale [0,1) http://en.wikipedia.org/wiki/Box-Muller_transform,  ale nie będziemy się nią tu szerzej zajmować.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Producent silników twierdzi, że jego silniki mają średnią moc 220 KM, a odchylenie standardowe wynosi 15 KM. Potencjalny klient testuje 100 silników. Jakie jest prawdopodobieństwo, że średnia z próby będzie mniejsza niż 217 KM?&lt;br /&gt;
&lt;br /&gt;
Przypomnijmy, że z CTG dla dużych liczebności próby  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\bar x \sim N(\mu,\sigma^2/n)&amp;lt;/math&amp;gt; [[WnioskowanieStatystyczne/Statystyki_i_estymatory#Estymator_warto.C5.9Bci_oczekiwanej|(dowód)]]. Zatem szukamy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( Z&amp;lt;\frac{217-\mu}{\frac{\sigma}{ \sqrt{n}}} \right)  = P\left( Z&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}} \right)=P(Z&amp;lt;-2)=0,0228&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.norm.cdf(-2)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu normalnego: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
sig=15&lt;br /&gt;
N_prob=100&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e4)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadania====&lt;br /&gt;
Teraz kilka najprostszych zadań dotyczących rozkładu normalnego:&lt;br /&gt;
* Znajdźmy prawdopodobieństwo, że ''Z'' &amp;lt; &amp;amp;minus;2,47. Proszę zrobić to na dwa sposoby: raz z użyciem wygenerowanych zmiennych z rozkładu normalnego, drugi raz z użyciem dystrybuanty   &amp;lt;tt&amp;gt;norm.cdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
[Odp: ''p'' = 0,0068]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = -2.47&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(Z &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf(z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znaleźć prawdopodobieństwo ''P''(|''Z''| &amp;lt; 2)&lt;br /&gt;
[Odp:  ''p'' = 0,9545]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = 2&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(np.abs(Z) &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf( z_crit, loc=0, scale=1) - st.norm.cdf( -z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Koncentracja zanieczyszczeń w półprzewodniku używanym do produkcji procesorów podlega rozkładowi normalnemu o średniej 127 cząsteczek na milion i odchyleniu standardowemu 22. Półprzewodnik może zostać użyty jedynie gdy koncentracja zanieczyszczeń spada poniżej 150 cząstek na milion. Jaka proporcja półprzewodników nadaje się do użycia?&lt;br /&gt;
Prawdopodobieństwo obliczyć korzystając z dystrybuanty rozkładu normalnego oraz z symulacji.&lt;br /&gt;
[Odp: ''p'' = 0,852]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu=127&lt;br /&gt;
sig=22&lt;br /&gt;
m_kryt=150&lt;br /&gt;
p=st.norm.cdf(m_kryt, loc = mu, scale = sig )&lt;br /&gt;
print('proporcja odczytana z dystrybuanty rozkładu normalnego: %4g' %p)&lt;br /&gt;
# symulacja&lt;br /&gt;
N_prob=10000&lt;br /&gt;
seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
p = sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
bins = np.arange(60,200,5)&lt;br /&gt;
h=py.hist(seria,bins);&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %.4g' %p1)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład t ===&lt;br /&gt;
&lt;br /&gt;
Gdy nie znamy wariancji populacji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; używamy w jego miejsce estymatora wariancji próby &amp;lt;math&amp;gt;s^2&amp;lt;/math&amp;gt; danego wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s^2 =\frac{\sum(\bar x - x_i)^2}{n-1} &amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie ''n'' &amp;amp;mdash; rozmiar próby&lt;br /&gt;
&lt;br /&gt;
Wtedy rozkład &amp;lt;math&amp;gt;Y=\frac{\bar X -\mu}{\frac{s}{\sqrt{n}}}&amp;lt;/math&amp;gt; nie podlega rozkładowi normalnemu. Jeśli populacja &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi normalnemu to &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; podlega  [[WnioskowanieStatystyczne/Test_t |rozkładowi ''t'' ]] z  ''n''&amp;amp;minus;1 stopniami swobody.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy na symulacji co to zmienia. Proszę obejrzeć wyniki dla kilku wartości &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
N=3&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
mu=2&lt;br /&gt;
sigma=1&lt;br /&gt;
&lt;br /&gt;
y_wyidealizowane=np.zeros(N_liczb)&lt;br /&gt;
m_populacji=np.zeros(N_liczb)&lt;br /&gt;
s_populacji=np.zeros(N_liczb)&lt;br /&gt;
y_estymowane=np.zeros(N_liczb)&lt;br /&gt;
m_estymowane=np.zeros(N_liczb)&lt;br /&gt;
s_estymowane=np.zeros(N_liczb)&lt;br /&gt;
for i in range(N_liczb):&lt;br /&gt;
    x=st.norm.rvs(loc=mu,scale=sigma,size=N)&lt;br /&gt;
    m_populacji[i]=mu&lt;br /&gt;
    s_populacji[i]=sigma/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    m_estymowane[i]=np.mean(x)&lt;br /&gt;
    s_estymowane[i]=np.std(x,ddof=1)/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    y_wyidealizowane[i]=(m_estymowane[i]-mu)/(s_populacji[i])&lt;br /&gt;
    y_estymowane[i]=(m_estymowane[i]-mu)/(s_estymowane[i])&lt;br /&gt;
 &lt;br /&gt;
py.subplot(311)&lt;br /&gt;
py.title(u'średnia (wartość oczekiwana)')&lt;br /&gt;
py.plot(m_estymowane,label=&amp;quot;estymowana&amp;quot;)&lt;br /&gt;
py.plot(m_populacji,'r',label=&amp;quot;populacji&amp;quot;)&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(312)&lt;br /&gt;
py.title('odchylenie standardowe')&lt;br /&gt;
py.plot(s_estymowane,label=&amp;quot;estymowane&amp;quot;)&lt;br /&gt;
py.plot(s_populacji,'r',label='populacji')&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(325)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji wyidealizowanej')&lt;br /&gt;
py.hist(y_wyidealizowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.subplot(326)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji estymowanej')&lt;br /&gt;
py.hist(y_estymowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Dział kontroli jakości producenta silników testuje 10 egzemplarzy silnika nowego typu. Uzyskano wartość średnią 220 KM oraz odchylenie standardowe równe 15 KM. Jakie jest prawdopodobieństwo, że klient, który zamówi 100 silników, otrzyma partię, w której średnia będzie mniejsza niż 217 KM? Wykonaj obliczenia oraz symulację. Porównaj wynik z wcześniejszym [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład_5|przykładem]], gdzie znaliśmy odchylenie standardowe z innego źródła (nie było ono estymowane z próby).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- =====Rozwiązanie=====&lt;br /&gt;
&lt;br /&gt;
Tym razem spoglądamy na problem z punktu widzenia działu kontroli jakości, dla którego zarówno średnia, jak i odchylenie standardowe są wartościami estymowanymi z próby. Zatem szukamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( t&amp;lt;\frac{217-\mu}{\frac{s}{ \sqrt{n_{klient}}}}, df=n_{kontrola}-1 \right) = P\left( t&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}}, df=10-1 \right)=&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;P(t&amp;lt;-2, df=9) = 0,0383&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.t.cdf(-2,df=9)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu t-Studenta: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
s=15&lt;br /&gt;
N_prob_kontrola= 10 #liczba silników skontrolowana przez dział kontroli jakości&lt;br /&gt;
N_prob_klient  =100 #liczba silników kupowanych przez klienta&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e5)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.t.rvs(df=N_prob_kontrola-1,loc=mu, scale=s, size=N_prob_klient)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inne rozkłady uzyskiwane przez transformacje ===&lt;br /&gt;
====Metoda odwracania dystrybuanty====&lt;br /&gt;
&amp;lt;!--[http://wazniak.mimuw.edu.pl/index.php?title=Rachunek_prawdopodobieństwa_i_statystyka/Wykład_14:_Komputerowe_metody_statystyki]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Niech &amp;lt;math&amp;gt;\xi&amp;lt;/math&amp;gt; będzie zmienną losową o rozkładzie jednostajnym na przedziale &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;. Jej dystrybuanta &amp;lt;math&amp;gt;J&amp;lt;/math&amp;gt; dana jest więc worem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
J(x) = P(\xi \le x) = \left\{ &lt;br /&gt;
\begin{array}{lrl}&lt;br /&gt;
0 &amp;amp; \mathrm{dla} &amp;amp;   x&amp;lt;0\\&lt;br /&gt;
x &amp;amp; \mathrm{dla} &amp;amp;   0 \le x &amp;lt;1 \\&lt;br /&gt;
1 &amp;amp; \mathrm{dla} &amp;amp;   1 \le x &lt;br /&gt;
\end{array}&lt;br /&gt;
\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
oraz niech &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; będzie dystrybuantą interesującego nas rozkładu. Jeśli &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest funkcją odwracalną to zmienna losowa zdefiniowana jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\eta = F^{-1}(\xi) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jest zmienną losową podlegającą rozkładowi o dystrybuancie &amp;lt;math&amp;gt; F&amp;lt;/math&amp;gt;.&lt;br /&gt;
Własność tę łatwo sprawdzić. Ponieważ dla każdego &amp;lt;math&amp;gt;x \in R &amp;lt;/math&amp;gt; mamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(\eta \le x) = P(F^{-1} (\xi) \le x)  = P(\xi \le F(x)) = F(x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
więc &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;  jest dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;\eta&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Czyli jeśli znamy dystrybuantę interesującego nas rozkładu prawdopodobieństwa i dystrybuanta ta jest odwracalna, to możemy generować liczby z rozkładu o dystrybuancie &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Przykład==== &lt;br /&gt;
Wygenerować liczby pseudolosowe z rozkładu wykładniczego o gęstości prawdopodobieństwa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x) = \lambda e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
* Znajdujemy dystrybuantę tego rozkładu:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = 1-e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znajdujemy funkcję odwrotną do dystrybuanty:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;G(u)=F^{-1}(u) = -\frac{1}{\lambda}\ln(1-u) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Generujemy liczby losowe &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; z przedziału &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt; i stosujemy transformację &amp;lt;math&amp;gt;G(u)&amp;lt;/math&amp;gt;&lt;br /&gt;
* Test generowanego rozkładu robimy przez porównanie dystrybuanty teoretycznej i empirycznej. Proszę zwrócić uwagę na funkcję estymującą dystrybuantę empiryczną&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_wykladniczy(lam, N):&lt;br /&gt;
	'''funkcja zwraca N liczb z rozkładu wykładniczego o parametrze lam&lt;br /&gt;
	korzystając z metody odwracania dystrybuanty&lt;br /&gt;
	Dystrybuanta rozkładu wykładniczego: F(x) = 1- exp(-lam*x)&lt;br /&gt;
	Funkcja do niej odwrotna: G(u) = -1/lam ln(1-u)'''&lt;br /&gt;
&lt;br /&gt;
	u = np.random.random(N)&lt;br /&gt;
	return -1.0/lam* np.log(1.-u)&lt;br /&gt;
	&lt;br /&gt;
def dystrybuanta(X,od=0, do=4, krok=0.05):&lt;br /&gt;
	'''funkcja zwraca dystrybuantę empiryczną &lt;br /&gt;
	zmiennej X na przedziale (od, do) z krokiem krok'''&lt;br /&gt;
	&lt;br /&gt;
	os_x = np.arange(od,do,krok)&lt;br /&gt;
	nx = len(os_x)&lt;br /&gt;
	N_liczb = len(X)&lt;br /&gt;
	D=np.zeros(nx) #wyzerowany wektor na naszą dystrybuantę&lt;br /&gt;
	for i in range(nx):&lt;br /&gt;
		D[i] = sum(X &amp;lt;= os_x[i])/N_liczb&lt;br /&gt;
	return (os_x, D)&lt;br /&gt;
	&lt;br /&gt;
# testujemy: narysujemy dystrybuantę oczekiwaną i empiryczną&lt;br /&gt;
lam=3&lt;br /&gt;
N=10000&lt;br /&gt;
&lt;br /&gt;
x = np.arange(0,4,0.01)&lt;br /&gt;
F = 1-np.exp(-lam*x)&lt;br /&gt;
X = gen_wykladniczy(lam, N)&lt;br /&gt;
(os_x, F_emp) = dystrybuanta(X,od=0, do=4, krok=0.1)&lt;br /&gt;
py.plot(x,F,'r',label = 'dystrybuanta teoretyczna')&lt;br /&gt;
py.plot(os_x, F_emp,'.b', label = 'dystrybuanta empiryczna')&lt;br /&gt;
py.legend()&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że nie zawsze jest łatwo wyznaczyć efektywnie  &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; &amp;amp;mdash; jest tak na przykład w przypadku rozkładu normalnego. W takich sytuacjach można szukać przybliżonej wartości &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt;, rozwiązując numerycznie równanie:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)=u&amp;lt;/math&amp;gt;, co sprowadza się do znalezienia miejsc zerowych funkcji &amp;lt;math&amp;gt;H(x)=F(x)-u&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem napisz funkcję ''MyGen(N)'' dla rozkładu, którego funkcja gęstości prawdopodobieństwa jest dana wzorem:&lt;br /&gt;
&amp;lt;math&amp;gt; f(x) = \frac{1}{\pi (1+x^{2})} &amp;lt;/math&amp;gt;&lt;br /&gt;
Następnie narysuj dla niego dystrybuantę i dystrybuantę empiryczną na przedziale [-10, 10].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
#f(x) = 1/(π(1+x²))             -- f. gęstości prawdopodobieństwa&lt;br /&gt;
#zatem F(x) = arctg(x)/π + 1/2  -- dystrybuanta&lt;br /&gt;
#zatem F⁻¹(x) = tg(π(x-1/2))    -- f. odwrotna do dystrybuanty&lt;br /&gt;
&lt;br /&gt;
def MyGen(size=1):&lt;br /&gt;
	x=np.random.random(size) # liczby z generatora jednostajnego na przedziale [0,1)&lt;br /&gt;
	y=np.tan(np.pi*(x-1/2))  # korzystamy z metody odwracania dystrybuanty&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
x=MyGen(int(1e6))&lt;br /&gt;
bins=np.linspace(-10,10,101)&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step')&lt;br /&gt;
py.plot(bins,1./(np.pi*(1+bins**2)),'r')&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step',cumulative=True)&lt;br /&gt;
py.plot(bins,np.arctan(bins)/np.pi+0.5,'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8535</id>
		<title>WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8535"/>
		<updated>2021-02-18T10:20:43Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadanie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pojęcia wstępne==&lt;br /&gt;
=== Zmienna losowa===&lt;br /&gt;
;Intuicyjnie: Zmienna losowa to taka zmienna, która przyjmuje pewną konkretną wartość w wyniku przeprowadzenia pomiaru lub eksperymentu. Na przykład zmienną losową jest liczba oczek, która wypada na kostce do gry. Dopóki trzymamy kostkę w ręce to nie wiemy jaką wartość ta zmienna przyjmie, konkretną wartość zmienna ta przyjmuje po rzucie. Jednak w kolejnych rzutach nie wiemy jakie będą jej wartości. &lt;br /&gt;
;Bardziej formalnie:  Zmienna losowa to funkcja przypisująca zdarzeniom elementarnym liczby.&lt;br /&gt;
;Zupełnie formalnie:&lt;br /&gt;
Do formalnej definicji potrzebne jest nam pojęcie przestrzeni probabilistycznej:&lt;br /&gt;
Przestrzeń probabilistyczna to układ trzech elementów &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;, gdzie:&lt;br /&gt;
* &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; jest pewnym zbiorem, zwanym przestrzenią zdarzeń elementarnych,&lt;br /&gt;
* &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest [http://pl.wikipedia.org/wiki/Sigma-ciało &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciałem] podzbiorów zbioru &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;. Elementy tego &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciała nazywane są zdarzeniami losowymi,&lt;br /&gt;
* &amp;lt;math&amp;gt;P: F\rightarrow [0,1]&amp;lt;/math&amp;gt; jest miarą probabilistyczną, tzn.&lt;br /&gt;
** &amp;lt;math&amp;gt;P(A) \ge 0 &amp;lt;/math&amp;gt; dla każdego &amp;lt;math&amp;gt;A \in F&amp;lt;/math&amp;gt;,&lt;br /&gt;
** &amp;lt;math&amp;gt;P(\Omega) = 1&amp;lt;/math&amp;gt;,&lt;br /&gt;
** jeżeli zbiory &amp;lt;math&amp;gt;A_1, A_2,\dots,A_n \in F&amp;lt;/math&amp;gt;  są parami rozłączne, to &amp;lt;math&amp;gt;P\left( \bigcup\limits_{i=1}^{\infty} A_i \right ) = \sum_{i=1}^{\infty} P(A_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Niech  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt; będzie przestrzenią probabilistyczną. '''Zmienną losową''' nazywamy dowolna funkcję &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, określoną na przestrzeni zdarzeń elementarnych &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;, o wartościach ze zbioru liczb rzeczywistych i [http://pl.wikipedia.org/wiki/Funkcja_mierzalna mierzalną] względem przestrzeni  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;. Zmienna losowa jest ciągła jeśli jej zbiór wartości jest ciągły, lub dyskretna, jeśli jej zbiór wartości jest dyskretny.&lt;br /&gt;
&lt;br /&gt;
=== Rozkład prawdopodobieństwa===&lt;br /&gt;
Rozkład prawdopodobieństwa &amp;amp;mdash; (rozkład zmiennej losowej) miara probabilistyczna określona na &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciele podzbiorów zbioru wartości zmiennej losowej, pozwalająca przypisywać prawdopodobieństwa zbiorom wartości tej zmiennej, odpowiadającym zdarzeniom losowym.&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej dyskretnej możemy wprowadzić pojęcie '''funkcji prawdopodobieństwa''':&lt;br /&gt;
&amp;lt;math&amp;gt;P(X=x_i) = p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Przykład: Dla rzutów monetą funkcję prawdopodobieństwa można zobrazować jako tabelkę:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
! Zdarzenie:&lt;br /&gt;
! orzeł&lt;br /&gt;
! reszka&lt;br /&gt;
|-&lt;br /&gt;
|zmienna losowa&lt;br /&gt;
|&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
| prawdopodobieństwo&lt;br /&gt;
| &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; &lt;br /&gt;
| 1/2&lt;br /&gt;
| 1/2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Można też przedstawić ją na wykresie:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta_1.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej ciągłej zamiast funkcji prawdopodobieństwa wprowadzamy '''funkcję gęstości prawdopodobieństwa'''. Jest to funkcja określona na zbiorze liczb rzeczywistych posiadająca następujące własności:&lt;br /&gt;
* jest nieujemna: &amp;lt;math&amp;gt;f(x) \ge 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
* prawdopodobieństwo tego, że zmienna losowa przyjmie wartość z przedziału &amp;lt;math&amp;gt;(a,b]&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; \int_a^b f(x) dx = P(a&amp;lt;X \le b) &amp;lt;/math&amp;gt;&lt;br /&gt;
[[Plik:Funkcja_gestosci_prawdopodobienstwa.png]]&lt;br /&gt;
* Prawdopodobieństwo tego, że zmienna losowa przyjmie dowolną wartość: &amp;lt;math&amp;gt; \int_{-\infty}^{+\infty} f(x) dx = P(-\infty &amp;lt;X \le +\infty) = 1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dystrybuanta ===&lt;br /&gt;
Dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy funkcję &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; określoną na zbiorze liczb rzeczywistych jako:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = P(X \le x)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
czyli wartość dystrybuanty w punkcie &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; jest prawdopodobieństwem, że zmienna losowa przyjmie wartość nie większą niż &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Dla zmiennej dyskretnej:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x)=P(X \le x) = \sum_{x_i&amp;lt;x}{P(X = x_i) } =  \sum_{x_i&amp;lt;x}p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla zmiennej losowej ciągłej z funkcją gęstości prawdopodobieństwa &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = P(X \le x)= \int_{-\infty}^x f(s) ds &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zauważmy ścisły związek dystrybuanty z funkcją prawdopodobieństwa w przypadku dyskretnym i funkcją gęstości prawdopodobieństwa w przypadku ciągłym.&lt;br /&gt;
&lt;br /&gt;
Przykład z monetą:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Momenty ===&lt;br /&gt;
Dla zmiennej losowej można obliczyć momenty zwykłe lub centralne. &lt;br /&gt;
&lt;br /&gt;
;Moment zwykły: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi tej zmiennej. Oblicza się go tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;m_k = E(X^k) =   \sum_{i} {x_i^k p_i}  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; oznacza prawdopodobieństwo, że &amp;lt;math&amp;gt;X = x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt; m_k = E(X^k) =  \int\limits_{-\infty}^{\infty} {x^k f(x)dx}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; jest funkcją gęstości prawdopodobieństwa.&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że pierwszy moment zwykły to średnia.&lt;br /&gt;
&lt;br /&gt;
;Moment centralny: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi funkcji &amp;lt;math&amp;gt;[x_i - E(x_i)]&amp;lt;/math&amp;gt;. Zatem możemy go obliczyć tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left( \left[ X-E(X) \right] ^k \right) =   \sum_{i} {\left[x_i-E(X)\right]^k p_i}  &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left(\left[X-E(X)\right]^k\right) =  \int\limits_{-\infty}^{\infty} {  \left[X-E(X)\right]^k f(x)dx}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uwaga:&lt;br /&gt;
* Drugi moment centralny ma swoją nazwę. Jest to '''wariancja''', często oznaczana przez &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Trzeci moment centralny przydaje się do badania symetrii rozkładu. Przyjmuje on wartość 0 dla zmiennych o rozkładzie symetrycznym, wartości ujemne dla zmiennych o rozkładzie wydłużonym w lewą stronę i wartości dodatnie dla zmiennych o rozkładzie wydłużonym w prawą stronę.  &lt;br /&gt;
* Czwarty moment centralny jest przydatny do konstrukcji miary spłaszczenia rozkładu zmiennej losowej '''kurtozy'''. Definiuje się ją następująco:&lt;br /&gt;
: &amp;lt;math&amp;gt; \mathrm{Kurt} = \frac{\mu_4}{\mu_2^4} - 3 &amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkłady prawdopodobieństwa można podzielić ze względu na wartość kurtozy na rozkłady:&lt;br /&gt;
* mezokurtyczne &amp;amp;mdash; wartość kurtozy wynosi 0, spłaszczenie rozkładu jest podobne do spłaszczenia rozkładu normalnego (dla którego kurtoza wynosi dokładnie 0)&lt;br /&gt;
* leptokurtyczne &amp;amp;mdash; kurtoza jest dodatnia, wartości cechy bardziej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
* platokurtyczne &amp;amp;mdash; kurtoza jest ujemna, wartości cechy mniej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
&lt;br /&gt;
=== Kwantyle ===&lt;br /&gt;
Kwantylem rzędu ''p'', gdzie &amp;lt;math&amp;gt;0 \leqslant p \leqslant 1&amp;lt;/math&amp;gt;, w rozkładzie empirycznym &amp;lt;math&amp;gt; P_{X} &amp;lt;/math&amp;gt;  zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy każdą liczbę &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt;, dla której spełnione są nierówności&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X((-\infty, x_p]) \geqslant p&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
oraz&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X([x_p,\infty)) \geqslant 1-p.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W szczególności, kwantylem rzędu ''p'' jest taka wartość &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; zmiennej losowej, że wartości mniejsze lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej ''p'', zaś wartości większe lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej 1&amp;amp;minus;''p''.&lt;br /&gt;
&lt;br /&gt;
Możemy zatem myśleć o obliczaniu kwantyla tak:&lt;br /&gt;
* zaobserwowaliśmy ''n'' wartości zmiennej losowej,&lt;br /&gt;
* zapiszemy te wartości na liście,&lt;br /&gt;
* następnie listę tę sortujemy w porządku rosnącym,&lt;br /&gt;
* kwantylem rzędu ''p'' jest albo element znajdujący się na liście w pozycji ''np'' jeśli ''np'' jest całkowite albo średnią z elementów położonych najbliżej ''np'' w przeciwnym wypadku.  &lt;br /&gt;
==== Nazwy poszczególnych kwantyli ====&lt;br /&gt;
Kwantyl rzędu 1/2 to inaczej mediana (ściślej zależy to od definicji mediany, przy jej obliczaniu z próbki o parzystej liczbie elementów często stosuje się średnią arytmetyczną dwóch środkowych elementów, szczegóły są w artykule).&amp;lt;br/&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/4, 2/4, 3/4 są inaczej nazywane kwartylami. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/5, 2/5, 3/5, 4/5 to inaczej kwintyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/10, 2/10, ..., 9/10 to inaczej decyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/100, 2/100, ..., 99/100 to inaczej percentyle. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pseudolosowość==&lt;br /&gt;
W obliczeniach numerycznych często korzystamy z liczb &amp;amp;bdquo;losowych&amp;amp;rdquo;. Tak naprawdę sekwencje liczb, których używamy są jedynie pseudolosowe, &lt;br /&gt;
tzn. są wytwarzane w deterministyczny (algorytmiczny) sposób, ale sekwencja generowanych wartości ma pewne cechy losowości. W idealnym przypadku cechą tą jest nieprzewidywalność: na podstawie obserwacji dotychczasowych wartości sekwencji niemożliwe jest podanie kolejnych wartości. W praktyce oznacza to nie możność ustalenie ziarna lub stanu wewnętrznego generatora na podstawie obserwacji dowolnie długiego ciągu wygenerowanych bitów.&lt;br /&gt;
Stan generatora przechowywany jest na zmiennych o skończonej precyzji. Jeśli stan jest przechowywany na &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; bitach to górną granicą na długość unikalnego ciągu liczb jest &amp;lt;math&amp;gt;2^n&amp;lt;/math&amp;gt;. Zazwyczaj unikalna sekwencja jest jednak krótsza. Wynika stąd, że  generatory liczb pseudolosowych mają  okres, po którym sekwencja liczb powtarza się. Podstawowe generatory liczb pseudolosowych wytwarzają liczby podlegające rozkładowi jednostajnemu (płaskiemu).&lt;br /&gt;
&lt;br /&gt;
Istnieją generatory &amp;amp;bdquo;prawdziwych&amp;amp;rdquo; liczb losowych, które są osobnymi urządzeniami. Liczy przez nie dostarczane są pewnymi parametrami jakichś procesów fizycznych, przebiegających w tych urządzeniach (zależnie od producenta). Do naszych zastosowań w zupełności wystarczą liczby generowane przez algorytmy komputerowe.&lt;br /&gt;
&lt;br /&gt;
Proste generatory liczb pseudolosowych można otrzymać jako funkcje używające operacji dzielenia modulo (generatory kongruencyjne):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{n+1}=f(x_n,x_{n-1}, ..., x_{n-k})\mod M&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zakładamy, że argumentami funkcji &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; są liczby całkowite ze zbioru &amp;lt;math&amp;gt;{0, 1, ...,M-1}&amp;lt;/math&amp;gt;. Dla ustalenia uwagi mogą to być generatory liniowe typu: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; x_{n+1}= (ax_{n} + c )\mod M&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład generatora liniowego ===&lt;br /&gt;
Dla przykładu zaimplementujmy jeden taki generator:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N=1):&lt;br /&gt;
    '''Przykład generatora liniowego. &lt;br /&gt;
       funkcja zwraca liczby pseudolosowe z przedziału [0,1)&lt;br /&gt;
       x - ziarno, &lt;br /&gt;
       N - ile liczb zwrócić'''&lt;br /&gt;
    m=8191&lt;br /&gt;
    a=101&lt;br /&gt;
    c=1731&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i]= x/m&lt;br /&gt;
    return y    &lt;br /&gt;
x=gen(23,100000)&lt;br /&gt;
py.hist(x)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Liczby &amp;lt;tt&amp;gt; m, a, c&amp;lt;/tt&amp;gt; są parametrami generatora. Liczba &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;, od której startuje generator nazywana jest ziarnem generatora {{ang|seed}}.&lt;br /&gt;
Funkcja &amp;lt;tt&amp;gt;py.hist()&amp;lt;/tt&amp;gt; zlicza i wyrysowuje histogram (czy wiemy co to jest histogram?).&lt;br /&gt;
* Wywołaj funkcję &amp;lt;tt&amp;gt;gen&amp;lt;/tt&amp;gt; dla tego samego ziarna kilka razy zaobserwuj powtarzalność wartości.&lt;br /&gt;
&lt;br /&gt;
W module &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; mamy do dyspozycji generator liczb pseudolosowych oparty na algorytmie [http://pl.wikipedia.org/wiki/Mersenne_Twister  Mersenne Twister ]&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
kod demonstrujacy pseudolosowosc&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import numpy as np&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(5)&lt;br /&gt;
&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
y=np.random.random(5)&lt;br /&gt;
print('x:', x)&lt;br /&gt;
print('y:', y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Zaobserwuj powtarzalność wartości.&lt;br /&gt;
* Wygeneruj i wykreśl 200 kolejnych liczb pseudolosowych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(200)&lt;br /&gt;
&lt;br /&gt;
py.plot(x,'.')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testy jakości===&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Dla wyżej wymienionych generatorów, proszę wykonać następujące testy:&lt;br /&gt;
* zobrazować rozkład prawdopodobieństwa (narysować histogram);&lt;br /&gt;
&amp;lt;!-- Tymczasowo wylaczane przez RK 14.02.2013 * test zgodności momentów &amp;amp;mdash; czy momenty obliczone dla wygenerowanych liczb są takie jak przewiduje teoria;--&amp;gt;&lt;br /&gt;
* test korelacji na rysunku: sporządzić wykres gdzie na jednej osi są wartości &amp;lt;math&amp;gt;x_n&amp;lt;/math&amp;gt; na drugiej zaś wartości &amp;lt;math&amp;gt;x_{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Tymczasowo wylaczone przez RK 14.02.2013 # momenty dla rozkładu jednostajnego [0, 1]&lt;br /&gt;
# mu = 0.5&lt;br /&gt;
# var = 1/12&lt;br /&gt;
# kurtoza -6/5&lt;br /&gt;
mu=np.mean(x)&lt;br /&gt;
var = np.sum((x - mu)**2)/N&lt;br /&gt;
kurtoza = np.sum((x-mu)**4)/N/var**2-3&lt;br /&gt;
print u'wartości teoretyczne:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':0.5,'v':1.0/12,'k':-6.0/5}&lt;br /&gt;
print u'wartości z próby:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':mu,'v':var,'k':kurtoza} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N):&lt;br /&gt;
    m=8765132137&lt;br /&gt;
    a=42347&lt;br /&gt;
    c=1731&lt;br /&gt;
&lt;br /&gt;
    ## warto porównać wynik dla poniższych parametrów&lt;br /&gt;
    #m=8191&lt;br /&gt;
    #a=101&lt;br /&gt;
    #a=107&lt;br /&gt;
&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i] = x/m&lt;br /&gt;
    return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=10000&lt;br /&gt;
x=gen(23,N)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.hist(x,30,normed = True)&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(x[:-1],x[1:],'.')&lt;br /&gt;
py.xlabel('x_n')&lt;br /&gt;
py.ylabel('x_{n+1}')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Bardziej wyczerpujące baterie testów jakości generatorów można znaleźć na przykład w:&lt;br /&gt;
* http://csrc.nist.gov/groups/ST/toolkit/rng/index.html&lt;br /&gt;
* http://www.phy.duke.edu/~rgb/General/rand_rate.php&lt;br /&gt;
&lt;br /&gt;
== Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; ==&lt;br /&gt;
=== Wstęp ===&lt;br /&gt;
Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; są zaimplementowane jako dwie klasy: &amp;lt;tt&amp;gt;stats.rv_continuous&amp;lt;/tt&amp;gt;  (bazuje na niej ponad 80 typów rozkładów ciągłych zmiennych losowych) i &amp;lt;tt&amp;gt;stats.rv_discrete&amp;lt;/tt&amp;gt; (bazuje na niej 10 typów rozkładów dyskretnych zmiennych losowych). Aktualną listę dostępnych rozkładów można uzyskać np. przy pomocy następującego skryptu:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
from scipy import stats&lt;br /&gt;
dc= [d for d in dir(stats) if isinstance(getattr(stats,d), stats.rv_continuous)]&lt;br /&gt;
print(dc)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Przykładowo: zmienne losowe o rozkładzie normalnym są reprezentowane przez klasę &amp;lt;tt&amp;gt;norm&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Funkcje przydatne do pracy ze zmiennymi losowymi dostępne są jako metody ===&lt;br /&gt;
&lt;br /&gt;
Obiekty reprezentujące zmienne losowe podlegające konkretnym rozkładom posiadają następujące metody:&lt;br /&gt;
* &amp;lt;tt&amp;gt;rvs&amp;lt;/tt&amp;gt;: '''generator zmiennych losowych''' danego typu;&lt;br /&gt;
* &amp;lt;tt&amp;gt;cdf&amp;lt;/tt&amp;gt;: '''dystrybuanta''' (ang. Cumulative Distribution Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;ppf&amp;lt;/tt&amp;gt;: '''funkcja odwrotna do dystrybuanty''' (ang. Percent Point Function (Inverse of CDF));&lt;br /&gt;
* &amp;lt;tt&amp;gt;stats&amp;lt;/tt&amp;gt;: zwraca '''momenty centralne rozkładu''' (średnią, wariancję, skośność i kurtozę);&lt;br /&gt;
* &amp;lt;tt&amp;gt;moment&amp;lt;/tt&amp;gt;: zwraca niecentralne momenty rozkładu.&lt;br /&gt;
* &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt;: '''funkcja gęstości prawdopodobieństwa''' (ang. Probability Density Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;pmf&amp;lt;/tt&amp;gt; dla rozkładów dyskretnych  &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt; jest zamienione na '''funkcję prawdopodobieństwa''' (ang. probability mass function; ''masa'' przez analogię z gęstością masy i masą punktową);&lt;br /&gt;
* &amp;lt;tt&amp;gt;sf&amp;lt;/tt&amp;gt;: funkcja przeżycia (ang. Survival Function) (1&amp;amp;minus;CDF);&lt;br /&gt;
* &amp;lt;tt&amp;gt;isf&amp;lt;/tt&amp;gt;: funkcja odwrotna do funkcji przetrwania (ang. Inverse Survival Function (Inverse of SF));&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Zobaczmy działanie tych metod dla zmiennych losowych z rozkładu normalnego:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
x = st.norm.rvs(size=10000)&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
py.hist(x,bins=bins)&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zmienne losowe mogą być używane na jeden z dwóch sposobów: można podawać wszystkie parametry opisujące rozkład w każdym wywołaniu metody, albo wytworzyć obiekt reprezentujący rozkład o konkretnych parametrach (w dokumentacji &amp;lt;tt&amp;gt;scipy&amp;lt;/tt&amp;gt; jest to nazywane zamrażaniem parametrów rozkładu, ang. ''freezing'')&lt;br /&gt;
Jako przykład zobaczmy funkcję odwrotną do dystrybuanty rozkładu normalnego N(2, 9): &lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; import scipy.stats as st&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.norm.ppf(0.05, loc=2, scale=3))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; my_norm = st.norm(loc=2,scale=3)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(my_norm.ppf(0.05))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
&lt;br /&gt;
=== Pomoc do poszczególnych rozkładów ===&lt;br /&gt;
Pełną dokumentację każdego rozkładu mamy dostępną w postaci docstringów. Dla przykładu:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
help(st.nct)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
wypisuje pełną informację z docstring o niecentralnym rozkładzie ''t''.&lt;br /&gt;
Podstawowe informacje można uzyskać wypisując treść pola &amp;lt;tt&amp;gt;extradoc&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.nct.extradoc)&lt;br /&gt;
 Non-central Student T distribution&lt;br /&gt;
 df**(df/2) * gamma(df+1)&lt;br /&gt;
 nct.pdf(x,df,nc) = --------------------------------------------------&lt;br /&gt;
 2**df*exp(nc**2/2)*(df+x**2)**(df/2) * gamma(df/2)&lt;br /&gt;
 for df &amp;gt; 0, nc &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Wypisz pomoc dla (centralnego) rozkładu ''t'' i sprawdź jakie parametry on przyjmuje. Wybierz dowolnie ich wartości, a następnie posiłkując się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład|przykładem]]:&lt;br /&gt;
# Wygeneruj 10000 liczb z rozkładu ''t'' i narysuj ich histogram.&lt;br /&gt;
# Wykreśl gęstość prawdopodobieństwa tego rozkładu.&lt;br /&gt;
# Wykreśl dystrybuantę.&lt;br /&gt;
# Wykreśl funkcję odwrotną do dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=10000       # ile liczb generujemy&lt;br /&gt;
&lt;br /&gt;
# przykładowe parametry rozkładu&lt;br /&gt;
df = 3        # liczba stopni swobody&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
x = st.t.rvs(size=N, df=df)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;) #histtype=&amp;quot;step&amp;quot; daje nam przezroczysty histogram&lt;br /&gt;
x = st.norm.rvs(size=N)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.t.pdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y,'g')&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.t.cdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z,'g')&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
 &lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.t.ppf(os_p, df=df)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f,'g')&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
py.legend([&amp;quot;Rozkład t-Studenta&amp;quot;,&amp;quot;Rozkład normalny&amp;quot;])&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Statystyki i estymatory ===&lt;br /&gt;
Estymator jest statystyką służącą do szacowania pewnej wielkości (np. parametru) na podstawie próby losowej (np. danych eksperymentalnych). Na wykładzie poznaliśmy m.in. takie statystki jak [[WnioskowanieStatystyczne/Momenty|wartość oczekiwana, wariancja i mediana]], z których ostatnia jest szczególnym przypadkiem [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Kwantyle|kwantylu]]. Moduły numpy oraz scipy.stats umożliwiają łatwe estymowanie niektórych statystyk, a także obliczanie ich rzeczywistych wartości, jeśli znamy parametry rozkładu.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jako przykład niech posłuży poniższy kod, w którym szukamy wartości estymatorów wartości oczekiwanej oraz wariancji rozkładu normalnego na podstawie próby losowej, a wynik porównujemy z wartościami rzeczywistymi:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
m=2&lt;br /&gt;
s=0.5&lt;br /&gt;
rozklad = st.norm(m,s) #definiujemy rozkład normalny&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()  # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
var  = rozklad.var()   # rzeczywiste odchylenie standardow&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)  # estymowana wartość oczekiwana&lt;br /&gt;
var_est  = np.var(x)   # estymowana wariancja&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem wygeneruj próby losowe dla następujących rozkładów:&lt;br /&gt;
# Rozkład normalny &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; = 100, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; = 2.&lt;br /&gt;
# Rozkład dwumianowy p = 0.4, n =10.&lt;br /&gt;
# Rozkład poissona &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; = 4.&lt;br /&gt;
# Rozkład jednostajny na przedziale [2, 6).&lt;br /&gt;
Następnie estymuj na ich podstawie wartości poniższych statystyk i porównaj je z wartościami obliczonymi na podstawie znanych parametrów rozkładu:&lt;br /&gt;
# Wartość oczekiwana.&lt;br /&gt;
# Odchylenie standardowe.&lt;br /&gt;
# Wariancja.&lt;br /&gt;
# Mediana.&lt;br /&gt;
# Kurtoza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
Poniżej znajduje się przykładowe rozwiązanie dla rozkładu dwumianowego. Aby uzyskać rozwiązanie dla pozostałych rozkładów wystarczy dostosować pierwszą część kodu, gdzie definiowany jest rozkład.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
n=10&lt;br /&gt;
p=0.4&lt;br /&gt;
rozklad = st.binom(n,p) #definiujemy nasz rozkład&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
# dalsza część jest jest niezależna od rodzaju rozkładu, który zdefiniowaliśmy powyżej&lt;br /&gt;
###########################################################################################&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()           # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
std  = rozklad.std()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
var  = rozklad.var()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
med  = rozklad.median()         # rzeczywista mediana&lt;br /&gt;
kurt = float(rozklad.stats('k'))# rzecz. kurtoza (funkcja zwraca jednoelementową tablicę&lt;br /&gt;
                                # numpy.ndarray, więc trzeba ją ręcznie zrzutować na float)&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)     # estymowana wartość oczekiwana&lt;br /&gt;
std_est  = np.std(x)      # estymowane odchylenie standardowe&lt;br /&gt;
var_est  = np.var(x)      # estymowana wariancja&lt;br /&gt;
med_est  = np.median(x)   # estymowana mediana&lt;br /&gt;
kurt_est = st.kurtosis(x) # estymowana kurtoza&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Odchylenie standardowe rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(std,std_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
print(&amp;quot;Mediana rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(med,med_est))&lt;br /&gt;
print(&amp;quot;Kurtoza rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(kurt,kurt_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generowanie zmiennych losowych podlegającym różnym rozkładom prawdopodobieństwa ==&lt;br /&gt;
Podstawowe typy generatorów liczb losowych wytwarzają liczby losowe podlegające rozkładowi jednostajnemu. Zastanowimy sie teraz jak mając zmienne losowe z rozkładu jednostajnego wytworzyć zmienne losowe o innych rozkładach.&lt;br /&gt;
=== Rozkład dwumianowy ===&lt;br /&gt;
Zmienna losowa, która zlicza liczbę sukcesów &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; próbach, gdzie &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest prawdopodobieństwem sukcesu w pojedynczej próbie, podlega rozkładowi dwumianowemu&lt;br /&gt;
[[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_dwumianowy więcej o rozkładzie dwumianowym]]: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_n(k)=\left(  &lt;br /&gt;
\begin{array}{c} &lt;br /&gt;
n \\&lt;br /&gt;
k&lt;br /&gt;
\end{array} &lt;br /&gt;
\right) p^kq^{n-k}=\frac{n!}{k!(n-k)!}p^kq^{n-k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Jak z rozkładu jednostajnego wytworzyć zmienne losowe o rozkładzie dwumianowym?''&lt;br /&gt;
* Wykonać symulację!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_binom(n,p,N):&lt;br /&gt;
	'''funkcja zwracająca zmienną losową z rozkładu dwumianowego: &lt;br /&gt;
	ilość sukcesów w n próbach przy prawdopodobieństwie sukcesu p&lt;br /&gt;
	parametry:&lt;br /&gt;
		n: liczba prób&lt;br /&gt;
		p: prawdopodobieństwo sukcesu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będącymi liczbami sukcesów&lt;br /&gt;
	'''&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję n liczb z rozkładu jednostajnego [0,1) i jako sukcesy&lt;br /&gt;
	#traktuję wylosowanie liczby nie większej niż p&lt;br /&gt;
	r=np.random.rand(N,n)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
n=20&lt;br /&gt;
N=100000&lt;br /&gt;
p=0.8&lt;br /&gt;
x = gen_binom(n,p,N)&lt;br /&gt;
bins =range(22) #granice binów&lt;br /&gt;
py.hist(x,bins)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Z oszacowań agencji wynika, że średnio 2 z 3 reklam spotyka się z pozytywnym odzewem. Akcja marketingowa obejmuje 12 reklam. Niech &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; oznacza liczbę reklam skutecznych. Czy &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi dwumianowemu?&lt;br /&gt;
Jakie jest prawdopodobieństwo, że 10 reklam będzie skutecznych?&lt;br /&gt;
Prawdopodobieństwo obliczyć ze wzoru oraz korzystając z symulacji.&lt;br /&gt;
&lt;br /&gt;
Wskazówka informacje o zmiennych z rozkładu dwumianowego (&amp;lt;tt&amp;gt;binom&amp;lt;/tt&amp;gt;) można uzyskać tak:&lt;br /&gt;
 # &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
 #   Binomial distribution&lt;br /&gt;
 #&lt;br /&gt;
 #   Counts the number of successes in *n* independent&lt;br /&gt;
 #   trials when the probability of success each time is *pr*.&lt;br /&gt;
 #&lt;br /&gt;
 #   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
 #   for k in {0,1,...,n}&lt;br /&gt;
Odp: ''p'' = 0,127&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
p=2/3 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n=12   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
&lt;br /&gt;
# ze wzoru &lt;br /&gt;
&lt;br /&gt;
# &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
#   Binomial distribution&lt;br /&gt;
#&lt;br /&gt;
#   Counts the number of successes in *n* independent&lt;br /&gt;
#   trials when the probability of success each time is *pr*.&lt;br /&gt;
#&lt;br /&gt;
#   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
#   for k in {0,1,...,n}&lt;br /&gt;
p_wz = st.binom.pmf(10,n,p)&lt;br /&gt;
print(p_wz)&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =100000 # liczba powtórzeń symulacji&lt;br /&gt;
k = np.zeros(N_powt)&lt;br /&gt;
for i in range(N_powt):&lt;br /&gt;
	r = rnd.random(size=n) # symulowana akcja reklamowa &lt;br /&gt;
	k[i]=np.sum(r&amp;lt;=p)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k==10)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Na egzaminie testowym jest 30 pytań. Na każde pytanie są podane cztery możliwe odpowiedzi, z czego tylko jedna jest prawdziwa. Za prawidłową odpowiedź student otrzymuje 1 punkt a za fałszywą &amp;amp;minus;0,5 punktu. Próg zaliczenia wynosi 15 punktów. Oblicz prawdopodobieństwo, że udzielając czysto losowych odpowiedzi student zaliczy egzamin.&lt;br /&gt;
&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
Liczba prawidłowych odpowiedzi w teście może być potraktowana jako liczba sukcesów k w n = 30 próbach. Prawdopodobieństwo sukcesu pojedynczego zdarzenia (prawidłowa odpowiedź na jedno pytanie) wynosi p = 1/4. Ze względu na obecność ujemnych punktów za fałszywe odpowiedzi zmienia się efektywna liczba punktów wymaganych do zaliczenia zgodnie z równaniem:&lt;br /&gt;
k-0.5*(30-k) = 15&lt;br /&gt;
co daje k = 20&lt;br /&gt;
Zatem problem redukuje się do wyznaczenia prawdopodobieństwa co najmniej 20 sukcesów w 30 próbach, przy czym prawdopodobieństwo sukcesu w 1 próbie wynosi p=1/4:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
p = 1./4 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n = 30   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
k_kryt = 20&lt;br /&gt;
# ze wzoru &lt;br /&gt;
p_wz = np.sum(st.binom.pmf(range(k_kryt,n+1),n,p))&lt;br /&gt;
print(p_wz)&lt;br /&gt;
&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =10000000 # liczba powtórzeń symulacji&lt;br /&gt;
r = np.random.random(size=(n,N_powt)) # symulowany test &lt;br /&gt;
k = np.sum(r&amp;lt;=p,0)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k&amp;gt;=20)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład Poissona ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(k)=\frac{\mu^k e^{-\mu}}{k!}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkładowi Poissona podlegają zmienne losowe zliczające w jednostce czasu liczbę zdarzeń o niskim prawdopodobieństwie zajścia. Np. liczba rozpadów promieniotwórczych na jednostkę czasu [[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_Poissona więcej o rozkładzie Poissona]]&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Lekarz pełniący dyżur w szpitalu jest wzywany do pacjentów średnio 3 razy w ciągu nocy. Załóżmy, że liczba wezwań na noc podlega rozkładowi Poissona. Jakie jest prawdopodobieństwo, że noc upłynie lekarzowi spokojnie?&lt;br /&gt;
U nas &amp;lt;math&amp;gt;\mu=3&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt; więc&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(0) = \frac{3^0e^{-3}}{0!} = e^{-3} = 0,0498&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jak ze zmiennych podlegających rozkładowi jednostajnemu uzyskać zmienne podlegające rozkładowi Poissona?&lt;br /&gt;
&lt;br /&gt;
Wykonać symulację wynikającą z następujących spostrzeżeń:&lt;br /&gt;
&lt;br /&gt;
* Weźmy jednostkę czasu. Ma w niej zachodzić średnio &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; zdarzeń. &lt;br /&gt;
* Podzielmy jednostkę czasu na ''NT'' odcinków o jednakowej długości. &lt;br /&gt;
* Prawdopodobieństwo, że zdarzenie zajdzie w konkretnym odcinku jest &amp;lt;math&amp;gt;p=\frac{\mu}{NT}&amp;lt;/math&amp;gt; Takie prawdopodobieństwo ma też wylosowanie przy pomocy generatora liczb z rozkładu jednostajnego [0,1) liczby nie większej niż ''p''. &lt;br /&gt;
* Zatem, aby wytworzyć jedną liczbę z rozkładu Poissona można policzyć ile spośród ''NT'' liczb z rozkładu jednostajnego [0,1) jest nie większych niż ''p''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
def gen_poiss(mi,NT,N):&lt;br /&gt;
	'''funkcja zwracająca zmienne losowe z rozkładu poissona: &lt;br /&gt;
	średnia ilość zdarzeń o niskim prawdopodobieństwie w jednostce czasu&lt;br /&gt;
	parametry:&lt;br /&gt;
		mi: średnia liczba zdarzeń&lt;br /&gt;
		NT: liczba odcinków czasu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będących zliczeniami zdarzeń&lt;br /&gt;
	'''&lt;br /&gt;
	p = float(mi)/NT&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję NT liczb z rozkładu jednostajnego [0,1) i jako zajście zdarzenia&lt;br /&gt;
	# traktuję wylosowanie liczby nie większej niż p. Ilość zdarzeń to liczba z rozkładu Poissona&lt;br /&gt;
	r=np.random.rand(N,NT)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
 &lt;br /&gt;
# kod testujący&lt;br /&gt;
mi=4&lt;br /&gt;
N=100000&lt;br /&gt;
NT = 10000&lt;br /&gt;
x = gen_poiss(mi,NT,N)&lt;br /&gt;
bins =np.arange(int(x.max()+1))-0.5&lt;br /&gt;
py.hist(x,bins,normed=True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# porównanie z generatorami scipy.stats&lt;br /&gt;
p=mi/NT&lt;br /&gt;
k=np.arange(x.max()+1)&lt;br /&gt;
B=st.binom.pmf(k,NT,p)&lt;br /&gt;
py.plot(k,B,'ro')&lt;br /&gt;
P=st.poisson.pmf(k,mi)&lt;br /&gt;
py.plot(k,P,'go')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład normalny i Centralne Twierdzenie Graniczne ===&lt;br /&gt;
Gęstość prawdopodobieństwa [[WnioskowanieStatystyczne/Rozklady-przyklady#Rozk.C5.82ad_Gaussa| rozkładu normalnego]] dana jest wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{ -\frac{(x-\mu)^2}{2 \sigma^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie: &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; &amp;amp;mdash; średnia, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; &amp;amp;mdash; odchylenie standardowe (&amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; &amp;amp;mdash; wariancja).&lt;br /&gt;
&lt;br /&gt;
Jeden ze  sposóbw wytwarzania zmiennych losowych o rozkładzie normalnym  polega na zastosowaniu [[WnioskowanieStatystyczne/CLT| Centralnego Twierdzenia Granicznego]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;X=\frac{\sqrt{12}}{\sqrt{N}}\left(\sum_{n=1}^N Y_n -\frac{N}{2}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; zmienna losowa z rozkładu jednostajnego &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;&lt;br /&gt;
W granicy dużych &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; rozkład zmiennej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; dąży do rozkładu normalnego &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt;, która zwraca liczbę losową ''X'' otrzymaną zgodnie powyższym wzorem  przez sumowanie &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt; liczb z rozkładu jednostajnego.&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG(N, N_liczb)&amp;lt;/tt&amp;gt; korzystającą z &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt; i zwracającą zadaną ilość liczb &amp;lt;tt&amp;gt;N_liczb&amp;lt;/tt&amp;gt;&lt;br /&gt;
* narysować histogramy 10 000 liczb &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; uzyskanych kolejno dla &amp;lt;math&amp;gt;N={1,2,...,12}&amp;lt;/math&amp;gt;&lt;br /&gt;
* Jakie parametry charakteryzują rozkład do którego zbiegają sumy? Przy każdym z powyższych histogramów wypisz średnią i wariancję z próby (funkcje &amp;lt;tt&amp;gt;np.mean&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;np.var&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
 &lt;br /&gt;
def gen_CTG_1(N):&lt;br /&gt;
	'''Funkcja generująca pojedynczą zmienną losową będącą sumą N liczb z rozkładu jednostajnego [0,1)&lt;br /&gt;
	pomnożoną przez czynnik normujący zapewniający wariancję równą 1.&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		jedną liczbę losową'''&lt;br /&gt;
	X = np.sqrt(12/N) * (np.sum(rnd.random(N)) - N/2)&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
def gen_CTG(N,N_liczb):&lt;br /&gt;
	'''Funkcja zwraca wektor (tablicę) zmiennych losowych będących sumami N liczb z rozkładu jednostajnego [0,1).&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
		N_liczb: ilość liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N_liczb losowych'''&lt;br /&gt;
&lt;br /&gt;
	X=np.zeros(N_liczb)&lt;br /&gt;
&lt;br /&gt;
	for i in range(N_liczb):&lt;br /&gt;
		X[i] = gen_CTG_1(N)&lt;br /&gt;
&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
Nmax=12&lt;br /&gt;
&lt;br /&gt;
for N in range(1,Nmax+1):&lt;br /&gt;
	X=gen_CTG(N,N_liczb)&lt;br /&gt;
	py.subplot(3,4,N)&lt;br /&gt;
	bins = np.arange(-4,4,0.1)&lt;br /&gt;
	py.hist(X,bins=bins,normed=True)&lt;br /&gt;
	py.title(&amp;quot;N=%i, µ=%.2g, σ²=%.2g&amp;quot;%(N, X.mean(), X.var(ddof=1)))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie: transformacja rozkładu normalnego ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozkład o średniej 0 i wariancji 1 (notacja  &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;) jest nazywany rozkładem standardowym i często jest oznaczany literą &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Dokonując odpowiedniej transformacji można z rozkładu &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; uzyskać dowolny inny rozkład normalny. &lt;br /&gt;
&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować 100000 zmiennych losowych z rozkładu &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.rvs(loc=0, scale=1, size=100000)&amp;lt;/tt&amp;gt;) &lt;br /&gt;
* przetransformować je do zmiennych losowych &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt;. &lt;br /&gt;
* narysować histogramy zmiennych przed i po transformacji.&lt;br /&gt;
* narysować rozkład gęstości prawdopodobieństwa dla rozkładu &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.pdf(...)&amp;lt;/tt&amp;gt;) .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
Z=st.norm.rvs(loc=0,scale=1,size=100000) #losowanie liczb z rozkładu N(0,1) (czyli Z)&lt;br /&gt;
&lt;br /&gt;
std=9&lt;br /&gt;
mu=2&lt;br /&gt;
X=Z*std+mu #transformacja do σ=9, µ=2&lt;br /&gt;
&lt;br /&gt;
szerokosc_binu=0.5&lt;br /&gt;
bins=np.arange(-40,40.5,szerokosc_binu) #te same granice binów dla obu histogramów&lt;br /&gt;
&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(Z,bins=bins,normed=True,label=&amp;quot;histogram przed transformacją&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(Z.mean(),Z.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(X,bins=bins,normed=True,label=&amp;quot;histogram po transformacji&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
PDF=st.norm.pdf(bins,loc=mu,scale=std) #modelowa gęstość prawdopodobieństwa dla σ=9, µ=2&lt;br /&gt;
py.plot(bins+szerokosc_binu/2,PDF,&amp;quot;ro&amp;quot;,label=&amp;quot;gęstość prawd.&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(X.mean(),X.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Transformacja Boxa-Mullera====&lt;br /&gt;
To inna popularna metoda  metoda generowania liczb losowych o rozkładzie normalnym, na podstawie dwóch wartości zmiennej o rozkładzie jednostajnym na przedziale [0,1) http://en.wikipedia.org/wiki/Box-Muller_transform,  ale nie będziemy się nią tu szerzej zajmować.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Producent silników twierdzi, że jego silniki mają średnią moc 220 KM, a odchylenie standardowe wynosi 15 KM. Potencjalny klient testuje 100 silników. Jakie jest prawdopodobieństwo, że średnia z próby będzie mniejsza niż 217 KM?&lt;br /&gt;
&lt;br /&gt;
Przypomnijmy, że z CTG dla dużych liczebności próby  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\bar x \sim N(\mu,\sigma^2/n)&amp;lt;/math&amp;gt; [[WnioskowanieStatystyczne/Statystyki_i_estymatory#Estymator_warto.C5.9Bci_oczekiwanej|(dowód)]]. Zatem szukamy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( Z&amp;lt;\frac{217-\mu}{\frac{\sigma}{ \sqrt{n}}} \right)  = P\left( Z&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}} \right)=P(Z&amp;lt;-2)=0,0228&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.norm.cdf(-2)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu normalnego: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
sig=15&lt;br /&gt;
N_prob=100&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e4)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadania====&lt;br /&gt;
Teraz kilka najprostszych zadań dotyczących rozkładu normalnego:&lt;br /&gt;
* Znajdźmy prawdopodobieństwo, że ''Z'' &amp;lt; &amp;amp;minus;2,47. Proszę zrobić to na dwa sposoby: raz z użyciem wygenerowanych zmiennych z rozkładu normalnego, drugi raz z użyciem dystrybuanty   &amp;lt;tt&amp;gt;norm.cdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
[Odp: ''p'' = 0,0068]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = -2.47&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(Z &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf(z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znaleźć prawdopodobieństwo ''P''(|''Z''| &amp;lt; 2)&lt;br /&gt;
[Odp:  ''p'' = 0,9545]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = 2&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(np.abs(Z) &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf( z_crit, loc=0, scale=1) - st.norm.cdf( -z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Koncentracja zanieczyszczeń w półprzewodniku używanym do produkcji procesorów podlega rozkładowi normalnemu o średniej 127 cząsteczek na milion i odchyleniu standardowemu 22. Półprzewodnik może zostać użyty jedynie gdy koncentracja zanieczyszczeń spada poniżej 150 cząstek na milion. Jaka proporcja półprzewodników nadaje się do użycia?&lt;br /&gt;
Prawdopodobieństwo obliczyć korzystając z dystrybuanty rozkładu normalnego oraz z symulacji.&lt;br /&gt;
[Odp: ''p'' = 0,852]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu=127&lt;br /&gt;
sig=22&lt;br /&gt;
m_kryt=150&lt;br /&gt;
p=st.norm.cdf(m_kryt, loc = mu, scale = sig )&lt;br /&gt;
print('proporcja odczytana z dystrybuanty rozkładu normalnego: %4g' %p)&lt;br /&gt;
# symulacja&lt;br /&gt;
N_prob=10000&lt;br /&gt;
seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
p = sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
bins = np.arange(60,200,5)&lt;br /&gt;
h=py.hist(seria,bins);&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %.4g' %p1)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład t ===&lt;br /&gt;
&lt;br /&gt;
Gdy nie znamy wariancji populacji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; używamy w jego miejsce estymatora wariancji próby &amp;lt;math&amp;gt;s^2&amp;lt;/math&amp;gt; danego wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s^2 =\frac{\sum(\bar x - x_i)^2}{n-1} &amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie ''n'' &amp;amp;mdash; rozmiar próby&lt;br /&gt;
&lt;br /&gt;
Wtedy rozkład &amp;lt;math&amp;gt;Y=\frac{\bar X -\mu}{\frac{s}{\sqrt{n}}}&amp;lt;/math&amp;gt; nie podlega rozkładowi normalnemu. Jeśli populacja &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi normalnemu to &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; podlega  [[WnioskowanieStatystyczne/Test_t |rozkładowi ''t'' ]] z  ''n''&amp;amp;minus;1 stopniami swobody.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy na symulacji co to zmienia. Proszę obejrzeć wyniki dla kilku wartości &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
N=3&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
mu=2&lt;br /&gt;
sigma=1&lt;br /&gt;
&lt;br /&gt;
y_wyidealizowane=np.zeros(N_liczb)&lt;br /&gt;
m_populacji=np.zeros(N_liczb)&lt;br /&gt;
s_populacji=np.zeros(N_liczb)&lt;br /&gt;
y_estymowane=np.zeros(N_liczb)&lt;br /&gt;
m_estymowane=np.zeros(N_liczb)&lt;br /&gt;
s_estymowane=np.zeros(N_liczb)&lt;br /&gt;
for i in range(N_liczb):&lt;br /&gt;
    x=st.norm.rvs(loc=mu,scale=sigma,size=N)&lt;br /&gt;
    m_populacji[i]=mu&lt;br /&gt;
    s_populacji[i]=sigma/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    m_estymowane[i]=np.mean(x)&lt;br /&gt;
    s_estymowane[i]=np.std(x,ddof=1)/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    y_wyidealizowane[i]=(m_estymowane[i]-mu)/(s_populacji[i])&lt;br /&gt;
    y_estymowane[i]=(m_estymowane[i]-mu)/(s_estymowane[i])&lt;br /&gt;
 &lt;br /&gt;
py.subplot(311)&lt;br /&gt;
py.title(u'średnia (wartość oczekiwana)')&lt;br /&gt;
py.plot(m_estymowane,label=&amp;quot;estymowana&amp;quot;)&lt;br /&gt;
py.plot(m_populacji,'r',label=&amp;quot;populacji&amp;quot;)&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(312)&lt;br /&gt;
py.title('odchylenie standardowe')&lt;br /&gt;
py.plot(s_estymowane,label=&amp;quot;estymowane&amp;quot;)&lt;br /&gt;
py.plot(s_populacji,'r',label='populacji')&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(325)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji wyidealizowanej')&lt;br /&gt;
py.hist(y_wyidealizowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.subplot(326)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji estymowanej')&lt;br /&gt;
py.hist(y_estymowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Dział kontroli jakości producenta silników testuje 10 egzemplarzy silnika nowego typu. Uzyskano wartość średnią 220 KM oraz odchylenie standardowe równe 15 KM. Jakie jest prawdopodobieństwo, że klient, który zamówi 100 silników, otrzyma partię, w której średnia będzie mniejsza niż 217 KM? Wykonaj obliczenia oraz symulację. Porównaj wynik z wcześniejszym [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład_5|przykładem]], gdzie znaliśmy odchylenie standardowe z innego źródła (nie było ono estymowane z próby).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- =====Rozwiązanie=====&lt;br /&gt;
&lt;br /&gt;
Tym razem spoglądamy na problem z punktu widzenia działu kontroli jakości, dla którego zarówno średnia, jak i odchylenie standardowe są wartościami estymowanymi z próby. Zatem szukamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( t&amp;lt;\frac{217-\mu}{\frac{s}{ \sqrt{n_{klient}}}}, df=n_{kontrola}-1 \right) = P\left( t&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}}, df=10-1 \right)=&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;P(t&amp;lt;-2, df=9) = 0,0383&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.t.cdf(-2,df=9)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu t-Studenta: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
s=15&lt;br /&gt;
N_prob_kontrola= 10 #liczba silników skontrolowana przez dział kontroli jakości&lt;br /&gt;
N_prob_klient  =100 #liczba silników kupowanych przez klienta&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e5)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.t.rvs(df=N_prob_kontrola-1,loc=mu, scale=s, size=N_prob_klient)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inne rozkłady uzyskiwane przez transformacje ===&lt;br /&gt;
====Metoda odwracania dystrybuanty====&lt;br /&gt;
&amp;lt;!--[http://wazniak.mimuw.edu.pl/index.php?title=Rachunek_prawdopodobieństwa_i_statystyka/Wykład_14:_Komputerowe_metody_statystyki]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Niech &amp;lt;math&amp;gt;\xi&amp;lt;/math&amp;gt; będzie zmienną losową o rozkładzie jednostajnym na przedziale &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;. Jej dystrybuanta &amp;lt;math&amp;gt;J&amp;lt;/math&amp;gt; dana jest więc worem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
J(x) = P(\xi \le x) = \left\{ &lt;br /&gt;
\begin{array}{lrl}&lt;br /&gt;
0 &amp;amp; \mathrm{dla} &amp;amp;   x&amp;lt;0\\&lt;br /&gt;
x &amp;amp; \mathrm{dla} &amp;amp;   0 \le x &amp;lt;1 \\&lt;br /&gt;
1 &amp;amp; \mathrm{dla} &amp;amp;   1 \le x &lt;br /&gt;
\end{array}&lt;br /&gt;
\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
oraz niech &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; będzie dystrybuantą interesującego nas rozkładu. Jeśli &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest funkcją odwracalną to zmienna losowa zdefiniowana jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\eta = F^{-1}(\xi) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jest zmienną losową podlegającą rozkładowi o dystrybuancie &amp;lt;math&amp;gt; F&amp;lt;/math&amp;gt;.&lt;br /&gt;
Własność tę łatwo sprawdzić. Ponieważ dla każdego &amp;lt;math&amp;gt;x \in R &amp;lt;/math&amp;gt; mamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(\eta \le x) = P(F^{-1} (\xi) \le x)  = P(\xi \le F(x)) = F(x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
więc &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;  jest dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;\eta&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Czyli jeśli znamy dystrybuantę interesującego nas rozkładu prawdopodobieństwa i dystrybuanta ta jest odwracalna, to możemy generować liczby z rozkładu o dystrybuancie &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Przykład==== &lt;br /&gt;
Wygenerować liczby pseudolosowe z rozkładu wykładniczego o gęstości prawdopodobieństwa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x) = \lambda e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
* Znajdujemy dystrybuantę tego rozkładu:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = 1-e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znajdujemy funkcję odwrotną do dystrybuanty:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;G(u)=F^{-1}(u) = -\frac{1}{\lambda}\ln(1-u) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Generujemy liczby losowe &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; z przedziału &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt; i stosujemy transformację &amp;lt;math&amp;gt;G(u)&amp;lt;/math&amp;gt;&lt;br /&gt;
* Test generowanego rozkładu robimy przez porównanie dystrybuanty teoretycznej i empirycznej. Proszę zwrócić uwagę na funkcję estymującą dystrybuantę empiryczną&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_wykladniczy(lam, N):&lt;br /&gt;
	'''funkcja zwraca N liczb z rozkładu wykładniczego o parametrze lam&lt;br /&gt;
	korzystając z metody odwracania dystrybuanty&lt;br /&gt;
	Dystrybuanta rozkładu wykładniczego: F(x) = 1- exp(-lam*x)&lt;br /&gt;
	Funkcja do niej odwrotna: G(u) = -1/lam ln(1-u)'''&lt;br /&gt;
&lt;br /&gt;
	u = np.random.random(N)&lt;br /&gt;
	return -1.0/lam* np.log(1.-u)&lt;br /&gt;
	&lt;br /&gt;
def dystrybuanta(X,od=0, do=4, krok=0.05):&lt;br /&gt;
	'''funkcja zwraca dystrybuantę empiryczną &lt;br /&gt;
	zmiennej X na przedziale (od, do) z krokiem krok'''&lt;br /&gt;
	&lt;br /&gt;
	os_x = np.arange(od,do,krok)&lt;br /&gt;
	nx = len(os_x)&lt;br /&gt;
	N_liczb = len(X)&lt;br /&gt;
	D=np.zeros(nx) #wyzerowany wektor na naszą dystrybuantę&lt;br /&gt;
	for i in range(nx):&lt;br /&gt;
		D[i] = sum(X &amp;lt;= os_x[i])/N_liczb&lt;br /&gt;
	return (os_x, D)&lt;br /&gt;
	&lt;br /&gt;
# testujemy: narysujemy dystrybuantę oczekiwaną i empiryczną&lt;br /&gt;
lam=3&lt;br /&gt;
N=10000&lt;br /&gt;
&lt;br /&gt;
x = np.arange(0,4,0.01)&lt;br /&gt;
F = 1-np.exp(-lam*x)&lt;br /&gt;
X = gen_wykladniczy(lam, N)&lt;br /&gt;
(os_x, F_emp) = dystrybuanta(X,od=0, do=4, krok=0.1)&lt;br /&gt;
py.plot(x,F,'r',label = 'dystrybuanta teoretyczna')&lt;br /&gt;
py.plot(os_x, F_emp,'.b', label = 'dystrybuanta empiryczna')&lt;br /&gt;
py.legend()&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że nie zawsze jest łatwo wyznaczyć efektywnie  &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; &amp;amp;mdash; jest tak na przykład w przypadku rozkładu normalnego. W takich sytuacjach można szukać przybliżonej wartości &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt;, rozwiązując numerycznie równanie:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)=u&amp;lt;/math&amp;gt;, co sprowadza się do znalezienia miejsc zerowych funkcji &amp;lt;math&amp;gt;H(x)=F(x)-u&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem napisz funkcję ''MyGen(N)'' dla rozkładu, którego funkcja gęstości prawdopodobieństwa jest dana wzorem:&lt;br /&gt;
&amp;lt;math&amp;gt; f(x) = \frac{1}{\pi (1+x^{2})} &amp;lt;/math&amp;gt;&lt;br /&gt;
Następnie narysuj dla niego dystrybuantę i dystrybuantę empiryczną na przedziale [-10, 10].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
#f(x) = 1/(π(1+x²))             -- f. gęstości prawdopodobieństwa&lt;br /&gt;
#zatem F(x) = arctg(x)/π + 1/2  -- dystrybuanta&lt;br /&gt;
#zatem F⁻¹(x) = tg(π(x-1/2))    -- f. odwrotna do dystrybuanty&lt;br /&gt;
&lt;br /&gt;
def MyGen(size=1):&lt;br /&gt;
	x=np.random.random(size) # liczby z generatora jednostajnego na przedziale [0,1)&lt;br /&gt;
	y=np.tan(np.pi*(x-1/2))  # korzystamy z metody odwracania dystrybuanty&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
x=MyGen(int(1e6))&lt;br /&gt;
bins=np.linspace(-10,10,101)&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step')&lt;br /&gt;
py.plot(bins,1./(np.pi*(1+bins**2)),'r')&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step',cumulative=True)&lt;br /&gt;
py.plot(bins,np.arctan(bins)/np.pi+0.5,'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8534</id>
		<title>WnioskowanieStatystyczne/Zmienne losowe i generatory liczb pseudolosowych</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych&amp;diff=8534"/>
		<updated>2021-02-18T10:20:27Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadanie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pojęcia wstępne==&lt;br /&gt;
=== Zmienna losowa===&lt;br /&gt;
;Intuicyjnie: Zmienna losowa to taka zmienna, która przyjmuje pewną konkretną wartość w wyniku przeprowadzenia pomiaru lub eksperymentu. Na przykład zmienną losową jest liczba oczek, która wypada na kostce do gry. Dopóki trzymamy kostkę w ręce to nie wiemy jaką wartość ta zmienna przyjmie, konkretną wartość zmienna ta przyjmuje po rzucie. Jednak w kolejnych rzutach nie wiemy jakie będą jej wartości. &lt;br /&gt;
;Bardziej formalnie:  Zmienna losowa to funkcja przypisująca zdarzeniom elementarnym liczby.&lt;br /&gt;
;Zupełnie formalnie:&lt;br /&gt;
Do formalnej definicji potrzebne jest nam pojęcie przestrzeni probabilistycznej:&lt;br /&gt;
Przestrzeń probabilistyczna to układ trzech elementów &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;, gdzie:&lt;br /&gt;
* &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt; jest pewnym zbiorem, zwanym przestrzenią zdarzeń elementarnych,&lt;br /&gt;
* &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest [http://pl.wikipedia.org/wiki/Sigma-ciało &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciałem] podzbiorów zbioru &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;. Elementy tego &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciała nazywane są zdarzeniami losowymi,&lt;br /&gt;
* &amp;lt;math&amp;gt;P: F\rightarrow [0,1]&amp;lt;/math&amp;gt; jest miarą probabilistyczną, tzn.&lt;br /&gt;
** &amp;lt;math&amp;gt;P(A) \ge 0 &amp;lt;/math&amp;gt; dla każdego &amp;lt;math&amp;gt;A \in F&amp;lt;/math&amp;gt;,&lt;br /&gt;
** &amp;lt;math&amp;gt;P(\Omega) = 1&amp;lt;/math&amp;gt;,&lt;br /&gt;
** jeżeli zbiory &amp;lt;math&amp;gt;A_1, A_2,\dots,A_n \in F&amp;lt;/math&amp;gt;  są parami rozłączne, to &amp;lt;math&amp;gt;P\left( \bigcup\limits_{i=1}^{\infty} A_i \right ) = \sum_{i=1}^{\infty} P(A_i) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Niech  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt; będzie przestrzenią probabilistyczną. '''Zmienną losową''' nazywamy dowolna funkcję &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, określoną na przestrzeni zdarzeń elementarnych &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;, o wartościach ze zbioru liczb rzeczywistych i [http://pl.wikipedia.org/wiki/Funkcja_mierzalna mierzalną] względem przestrzeni  &amp;lt;math&amp;gt;(\Omega, F,P)&amp;lt;/math&amp;gt;. Zmienna losowa jest ciągła jeśli jej zbiór wartości jest ciągły, lub dyskretna, jeśli jej zbiór wartości jest dyskretny.&lt;br /&gt;
&lt;br /&gt;
=== Rozkład prawdopodobieństwa===&lt;br /&gt;
Rozkład prawdopodobieństwa &amp;amp;mdash; (rozkład zmiennej losowej) miara probabilistyczna określona na &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt;-ciele podzbiorów zbioru wartości zmiennej losowej, pozwalająca przypisywać prawdopodobieństwa zbiorom wartości tej zmiennej, odpowiadającym zdarzeniom losowym.&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej dyskretnej możemy wprowadzić pojęcie '''funkcji prawdopodobieństwa''':&lt;br /&gt;
&amp;lt;math&amp;gt;P(X=x_i) = p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Przykład: Dla rzutów monetą funkcję prawdopodobieństwa można zobrazować jako tabelkę:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
! Zdarzenie:&lt;br /&gt;
! orzeł&lt;br /&gt;
! reszka&lt;br /&gt;
|-&lt;br /&gt;
|zmienna losowa&lt;br /&gt;
|&amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
| prawdopodobieństwo&lt;br /&gt;
| &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; &lt;br /&gt;
| 1/2&lt;br /&gt;
| 1/2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Można też przedstawić ją na wykresie:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta_1.gif|600px]]&lt;br /&gt;
&lt;br /&gt;
Dla zmiennej losowej ciągłej zamiast funkcji prawdopodobieństwa wprowadzamy '''funkcję gęstości prawdopodobieństwa'''. Jest to funkcja określona na zbiorze liczb rzeczywistych posiadająca następujące własności:&lt;br /&gt;
* jest nieujemna: &amp;lt;math&amp;gt;f(x) \ge 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
* prawdopodobieństwo tego, że zmienna losowa przyjmie wartość z przedziału &amp;lt;math&amp;gt;(a,b]&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; \int_a^b f(x) dx = P(a&amp;lt;X \le b) &amp;lt;/math&amp;gt;&lt;br /&gt;
[[Plik:Funkcja_gestosci_prawdopodobienstwa.png]]&lt;br /&gt;
* Prawdopodobieństwo tego, że zmienna losowa przyjmie dowolną wartość: &amp;lt;math&amp;gt; \int_{-\infty}^{+\infty} f(x) dx = P(-\infty &amp;lt;X \le +\infty) = 1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dystrybuanta ===&lt;br /&gt;
Dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy funkcję &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; określoną na zbiorze liczb rzeczywistych jako:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = P(X \le x)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
czyli wartość dystrybuanty w punkcie &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; jest prawdopodobieństwem, że zmienna losowa przyjmie wartość nie większą niż &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Dla zmiennej dyskretnej:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x)=P(X \le x) = \sum_{x_i&amp;lt;x}{P(X = x_i) } =  \sum_{x_i&amp;lt;x}p_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla zmiennej losowej ciągłej z funkcją gęstości prawdopodobieństwa &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;:&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = P(X \le x)= \int_{-\infty}^x f(s) ds &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zauważmy ścisły związek dystrybuanty z funkcją prawdopodobieństwa w przypadku dyskretnym i funkcją gęstości prawdopodobieństwa w przypadku ciągłym.&lt;br /&gt;
&lt;br /&gt;
Przykład z monetą:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Rozklad_moneta.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Momenty ===&lt;br /&gt;
Dla zmiennej losowej można obliczyć momenty zwykłe lub centralne. &lt;br /&gt;
&lt;br /&gt;
;Moment zwykły: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi tej zmiennej. Oblicza się go tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;m_k = E(X^k) =   \sum_{i} {x_i^k p_i}  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; oznacza prawdopodobieństwo, że &amp;lt;math&amp;gt;X = x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt; m_k = E(X^k) =  \int\limits_{-\infty}^{\infty} {x^k f(x)dx}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: tu &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; jest funkcją gęstości prawdopodobieństwa.&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że pierwszy moment zwykły to średnia.&lt;br /&gt;
&lt;br /&gt;
;Moment centralny: rzędu &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; to wartość oczekiwana &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-tej potęgi funkcji &amp;lt;math&amp;gt;[x_i - E(x_i)]&amp;lt;/math&amp;gt;. Zatem możemy go obliczyć tak:&lt;br /&gt;
* dla dyskretnej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left( \left[ X-E(X) \right] ^k \right) =   \sum_{i} {\left[x_i-E(X)\right]^k p_i}  &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* dla ciągłej zmiennej losowej&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
\mu_k = E\left(\left[X-E(X)\right]^k\right) =  \int\limits_{-\infty}^{\infty} {  \left[X-E(X)\right]^k f(x)dx}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Uwaga:&lt;br /&gt;
* Drugi moment centralny ma swoją nazwę. Jest to '''wariancja''', często oznaczana przez &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
* Trzeci moment centralny przydaje się do badania symetrii rozkładu. Przyjmuje on wartość 0 dla zmiennych o rozkładzie symetrycznym, wartości ujemne dla zmiennych o rozkładzie wydłużonym w lewą stronę i wartości dodatnie dla zmiennych o rozkładzie wydłużonym w prawą stronę.  &lt;br /&gt;
* Czwarty moment centralny jest przydatny do konstrukcji miary spłaszczenia rozkładu zmiennej losowej '''kurtozy'''. Definiuje się ją następująco:&lt;br /&gt;
: &amp;lt;math&amp;gt; \mathrm{Kurt} = \frac{\mu_4}{\mu_2^4} - 3 &amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkłady prawdopodobieństwa można podzielić ze względu na wartość kurtozy na rozkłady:&lt;br /&gt;
* mezokurtyczne &amp;amp;mdash; wartość kurtozy wynosi 0, spłaszczenie rozkładu jest podobne do spłaszczenia rozkładu normalnego (dla którego kurtoza wynosi dokładnie 0)&lt;br /&gt;
* leptokurtyczne &amp;amp;mdash; kurtoza jest dodatnia, wartości cechy bardziej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
* platokurtyczne &amp;amp;mdash; kurtoza jest ujemna, wartości cechy mniej skoncentrowane niż przy rozkładzie normalnym&lt;br /&gt;
&lt;br /&gt;
=== Kwantyle ===&lt;br /&gt;
Kwantylem rzędu ''p'', gdzie &amp;lt;math&amp;gt;0 \leqslant p \leqslant 1&amp;lt;/math&amp;gt;, w rozkładzie empirycznym &amp;lt;math&amp;gt; P_{X} &amp;lt;/math&amp;gt;  zmiennej losowej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; nazywamy każdą liczbę &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt;, dla której spełnione są nierówności&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X((-\infty, x_p]) \geqslant p&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
oraz&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
P_X([x_p,\infty)) \geqslant 1-p.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W szczególności, kwantylem rzędu ''p'' jest taka wartość &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; zmiennej losowej, że wartości mniejsze lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej ''p'', zaś wartości większe lub równe od &amp;lt;math&amp;gt;x_{p}&amp;lt;/math&amp;gt; są przyjmowane z prawdopodobieństwem co najmniej 1&amp;amp;minus;''p''.&lt;br /&gt;
&lt;br /&gt;
Możemy zatem myśleć o obliczaniu kwantyla tak:&lt;br /&gt;
* zaobserwowaliśmy ''n'' wartości zmiennej losowej,&lt;br /&gt;
* zapiszemy te wartości na liście,&lt;br /&gt;
* następnie listę tę sortujemy w porządku rosnącym,&lt;br /&gt;
* kwantylem rzędu ''p'' jest albo element znajdujący się na liście w pozycji ''np'' jeśli ''np'' jest całkowite albo średnią z elementów położonych najbliżej ''np'' w przeciwnym wypadku.  &lt;br /&gt;
==== Nazwy poszczególnych kwantyli ====&lt;br /&gt;
Kwantyl rzędu 1/2 to inaczej mediana (ściślej zależy to od definicji mediany, przy jej obliczaniu z próbki o parzystej liczbie elementów często stosuje się średnią arytmetyczną dwóch środkowych elementów, szczegóły są w artykule).&amp;lt;br/&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/4, 2/4, 3/4 są inaczej nazywane kwartylami. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/5, 2/5, 3/5, 4/5 to inaczej kwintyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/10, 2/10, ..., 9/10 to inaczej decyle. &amp;lt;br&amp;gt;&lt;br /&gt;
Kwantyle rzędu 1/100, 2/100, ..., 99/100 to inaczej percentyle. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pseudolosowość==&lt;br /&gt;
W obliczeniach numerycznych często korzystamy z liczb &amp;amp;bdquo;losowych&amp;amp;rdquo;. Tak naprawdę sekwencje liczb, których używamy są jedynie pseudolosowe, &lt;br /&gt;
tzn. są wytwarzane w deterministyczny (algorytmiczny) sposób, ale sekwencja generowanych wartości ma pewne cechy losowości. W idealnym przypadku cechą tą jest nieprzewidywalność: na podstawie obserwacji dotychczasowych wartości sekwencji niemożliwe jest podanie kolejnych wartości. W praktyce oznacza to nie możność ustalenie ziarna lub stanu wewnętrznego generatora na podstawie obserwacji dowolnie długiego ciągu wygenerowanych bitów.&lt;br /&gt;
Stan generatora przechowywany jest na zmiennych o skończonej precyzji. Jeśli stan jest przechowywany na &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; bitach to górną granicą na długość unikalnego ciągu liczb jest &amp;lt;math&amp;gt;2^n&amp;lt;/math&amp;gt;. Zazwyczaj unikalna sekwencja jest jednak krótsza. Wynika stąd, że  generatory liczb pseudolosowych mają  okres, po którym sekwencja liczb powtarza się. Podstawowe generatory liczb pseudolosowych wytwarzają liczby podlegające rozkładowi jednostajnemu (płaskiemu).&lt;br /&gt;
&lt;br /&gt;
Istnieją generatory &amp;amp;bdquo;prawdziwych&amp;amp;rdquo; liczb losowych, które są osobnymi urządzeniami. Liczy przez nie dostarczane są pewnymi parametrami jakichś procesów fizycznych, przebiegających w tych urządzeniach (zależnie od producenta). Do naszych zastosowań w zupełności wystarczą liczby generowane przez algorytmy komputerowe.&lt;br /&gt;
&lt;br /&gt;
Proste generatory liczb pseudolosowych można otrzymać jako funkcje używające operacji dzielenia modulo (generatory kongruencyjne):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x_{n+1}=f(x_n,x_{n-1}, ..., x_{n-k})\mod M&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zakładamy, że argumentami funkcji &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; są liczby całkowite ze zbioru &amp;lt;math&amp;gt;{0, 1, ...,M-1}&amp;lt;/math&amp;gt;. Dla ustalenia uwagi mogą to być generatory liniowe typu: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; x_{n+1}= (ax_{n} + c )\mod M&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład generatora liniowego ===&lt;br /&gt;
Dla przykładu zaimplementujmy jeden taki generator:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N=1):&lt;br /&gt;
    '''Przykład generatora liniowego. &lt;br /&gt;
       funkcja zwraca liczby pseudolosowe z przedziału [0,1)&lt;br /&gt;
       x - ziarno, &lt;br /&gt;
       N - ile liczb zwrócić'''&lt;br /&gt;
    m=8191&lt;br /&gt;
    a=101&lt;br /&gt;
    c=1731&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i]= x/m&lt;br /&gt;
    return y    &lt;br /&gt;
x=gen(23,100000)&lt;br /&gt;
py.hist(x)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Liczby &amp;lt;tt&amp;gt; m, a, c&amp;lt;/tt&amp;gt; są parametrami generatora. Liczba &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;, od której startuje generator nazywana jest ziarnem generatora {{ang|seed}}.&lt;br /&gt;
Funkcja &amp;lt;tt&amp;gt;py.hist()&amp;lt;/tt&amp;gt; zlicza i wyrysowuje histogram (czy wiemy co to jest histogram?).&lt;br /&gt;
* Wywołaj funkcję &amp;lt;tt&amp;gt;gen&amp;lt;/tt&amp;gt; dla tego samego ziarna kilka razy zaobserwuj powtarzalność wartości.&lt;br /&gt;
&lt;br /&gt;
W module &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt; mamy do dyspozycji generator liczb pseudolosowych oparty na algorytmie [http://pl.wikipedia.org/wiki/Mersenne_Twister  Mersenne Twister ]&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
kod demonstrujacy pseudolosowosc&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import numpy as np&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(5)&lt;br /&gt;
&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
y=np.random.random(5)&lt;br /&gt;
print('x:', x)&lt;br /&gt;
print('y:', y)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Zaobserwuj powtarzalność wartości.&lt;br /&gt;
* Wygeneruj i wykreśl 200 kolejnych liczb pseudolosowych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
seed=3&lt;br /&gt;
np.random.seed(seed)&lt;br /&gt;
x=np.random.random(200)&lt;br /&gt;
&lt;br /&gt;
py.plot(x,'.')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testy jakości===&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Dla wyżej wymienionych generatorów, proszę wykonać następujące testy:&lt;br /&gt;
* zobrazować rozkład prawdopodobieństwa (narysować histogram);&lt;br /&gt;
&amp;lt;!-- Tymczasowo wylaczane przez RK 14.02.2013 * test zgodności momentów &amp;amp;mdash; czy momenty obliczone dla wygenerowanych liczb są takie jak przewiduje teoria;--&amp;gt;&lt;br /&gt;
* test korelacji na rysunku: sporządzić wykres gdzie na jednej osi są wartości &amp;lt;math&amp;gt;x_n&amp;lt;/math&amp;gt; na drugiej zaś wartości &amp;lt;math&amp;gt;x_{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Tymczasowo wylaczone przez RK 14.02.2013 # momenty dla rozkładu jednostajnego [0, 1]&lt;br /&gt;
# mu = 0.5&lt;br /&gt;
# var = 1/12&lt;br /&gt;
# kurtoza -6/5&lt;br /&gt;
mu=np.mean(x)&lt;br /&gt;
var = np.sum((x - mu)**2)/N&lt;br /&gt;
kurtoza = np.sum((x-mu)**4)/N/var**2-3&lt;br /&gt;
print u'wartości teoretyczne:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':0.5,'v':1.0/12,'k':-6.0/5}&lt;br /&gt;
print u'wartości z próby:'&lt;br /&gt;
print 'mu= %(m).4f, var= %(v).4f, kurtoza= %(k).4f'% {'m':mu,'v':var,'k':kurtoza} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
def gen(x,N):&lt;br /&gt;
    m=8765132137&lt;br /&gt;
    a=42347&lt;br /&gt;
    c=1731&lt;br /&gt;
&lt;br /&gt;
    ## warto porównać wynik dla poniższych parametrów&lt;br /&gt;
    #m=8191&lt;br /&gt;
    #a=101&lt;br /&gt;
    #a=107&lt;br /&gt;
&lt;br /&gt;
    y=np.zeros(shape=(N,))&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        x=(a*x+c) % m&lt;br /&gt;
        y[i] = x/m&lt;br /&gt;
    return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=10000&lt;br /&gt;
x=gen(23,N)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.hist(x,30,normed = True)&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(x[:-1],x[1:],'.')&lt;br /&gt;
py.xlabel('x_n')&lt;br /&gt;
py.ylabel('x_{n+1}')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Bardziej wyczerpujące baterie testów jakości generatorów można znaleźć na przykład w:&lt;br /&gt;
* http://csrc.nist.gov/groups/ST/toolkit/rng/index.html&lt;br /&gt;
* http://www.phy.duke.edu/~rgb/General/rand_rate.php&lt;br /&gt;
&lt;br /&gt;
== Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; ==&lt;br /&gt;
=== Wstęp ===&lt;br /&gt;
Zmienne losowe w module &amp;lt;tt&amp;gt;scipy.stats&amp;lt;/tt&amp;gt; są zaimplementowane jako dwie klasy: &amp;lt;tt&amp;gt;stats.rv_continuous&amp;lt;/tt&amp;gt;  (bazuje na niej ponad 80 typów rozkładów ciągłych zmiennych losowych) i &amp;lt;tt&amp;gt;stats.rv_discrete&amp;lt;/tt&amp;gt; (bazuje na niej 10 typów rozkładów dyskretnych zmiennych losowych). Aktualną listę dostępnych rozkładów można uzyskać np. przy pomocy następującego skryptu:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
from scipy import stats&lt;br /&gt;
dc= [d for d in dir(stats) if isinstance(getattr(stats,d), stats.rv_continuous)]&lt;br /&gt;
print(dc)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Przykładowo: zmienne losowe o rozkładzie normalnym są reprezentowane przez klasę &amp;lt;tt&amp;gt;norm&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Funkcje przydatne do pracy ze zmiennymi losowymi dostępne są jako metody ===&lt;br /&gt;
&lt;br /&gt;
Obiekty reprezentujące zmienne losowe podlegające konkretnym rozkładom posiadają następujące metody:&lt;br /&gt;
* &amp;lt;tt&amp;gt;rvs&amp;lt;/tt&amp;gt;: '''generator zmiennych losowych''' danego typu;&lt;br /&gt;
* &amp;lt;tt&amp;gt;cdf&amp;lt;/tt&amp;gt;: '''dystrybuanta''' (ang. Cumulative Distribution Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;ppf&amp;lt;/tt&amp;gt;: '''funkcja odwrotna do dystrybuanty''' (ang. Percent Point Function (Inverse of CDF));&lt;br /&gt;
* &amp;lt;tt&amp;gt;stats&amp;lt;/tt&amp;gt;: zwraca '''momenty centralne rozkładu''' (średnią, wariancję, skośność i kurtozę);&lt;br /&gt;
* &amp;lt;tt&amp;gt;moment&amp;lt;/tt&amp;gt;: zwraca niecentralne momenty rozkładu.&lt;br /&gt;
* &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt;: '''funkcja gęstości prawdopodobieństwa''' (ang. Probability Density Function);&lt;br /&gt;
* &amp;lt;tt&amp;gt;pmf&amp;lt;/tt&amp;gt; dla rozkładów dyskretnych  &amp;lt;tt&amp;gt;pdf&amp;lt;/tt&amp;gt; jest zamienione na '''funkcję prawdopodobieństwa''' (ang. probability mass function; ''masa'' przez analogię z gęstością masy i masą punktową);&lt;br /&gt;
* &amp;lt;tt&amp;gt;sf&amp;lt;/tt&amp;gt;: funkcja przeżycia (ang. Survival Function) (1&amp;amp;minus;CDF);&lt;br /&gt;
* &amp;lt;tt&amp;gt;isf&amp;lt;/tt&amp;gt;: funkcja odwrotna do funkcji przetrwania (ang. Inverse Survival Function (Inverse of SF));&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Zobaczmy działanie tych metod dla zmiennych losowych z rozkładu normalnego:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
x = st.norm.rvs(size=10000)&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
py.hist(x,bins=bins)&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zmienne losowe mogą być używane na jeden z dwóch sposobów: można podawać wszystkie parametry opisujące rozkład w każdym wywołaniu metody, albo wytworzyć obiekt reprezentujący rozkład o konkretnych parametrach (w dokumentacji &amp;lt;tt&amp;gt;scipy&amp;lt;/tt&amp;gt; jest to nazywane zamrażaniem parametrów rozkładu, ang. ''freezing'')&lt;br /&gt;
Jako przykład zobaczmy funkcję odwrotną do dystrybuanty rozkładu normalnego N(2, 9): &lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; import scipy.stats as st&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.norm.ppf(0.05, loc=2, scale=3))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; my_norm = st.norm(loc=2,scale=3)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(my_norm.ppf(0.05))&lt;br /&gt;
 -2.93456088085&lt;br /&gt;
&lt;br /&gt;
=== Pomoc do poszczególnych rozkładów ===&lt;br /&gt;
Pełną dokumentację każdego rozkładu mamy dostępną w postaci docstringów. Dla przykładu:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
help(st.nct)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
wypisuje pełną informację z docstring o niecentralnym rozkładzie ''t''.&lt;br /&gt;
Podstawowe informacje można uzyskać wypisując treść pola &amp;lt;tt&amp;gt;extradoc&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; print(st.nct.extradoc)&lt;br /&gt;
 Non-central Student T distribution&lt;br /&gt;
 df**(df/2) * gamma(df+1)&lt;br /&gt;
 nct.pdf(x,df,nc) = --------------------------------------------------&lt;br /&gt;
 2**df*exp(nc**2/2)*(df+x**2)**(df/2) * gamma(df/2)&lt;br /&gt;
 for df &amp;gt; 0, nc &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Wypisz pomoc dla (centralnego) rozkładu ''t'' i sprawdź jakie parametry on przyjmuje. Wybierz dowolnie ich wartości, a następnie posiłkując się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład|przykładem]]:&lt;br /&gt;
# Wygeneruj 10000 liczb z rozkładu ''t'' i narysuj ich histogram.&lt;br /&gt;
# Wykreśl gęstość prawdopodobieństwa tego rozkładu.&lt;br /&gt;
# Wykreśl dystrybuantę.&lt;br /&gt;
# Wykreśl funkcję odwrotną do dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=10000       # ile liczb generujemy&lt;br /&gt;
&lt;br /&gt;
# przykładowe parametry rozkładu&lt;br /&gt;
df = 3        # liczba stopni swobody&lt;br /&gt;
&lt;br /&gt;
# generowanie 10000 liczb z rozkładu normalnego &lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
bins=np.linspace(-3,3,50)&lt;br /&gt;
x = st.t.rvs(size=N, df=df)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;) #histtype=&amp;quot;step&amp;quot; daje nam przezroczysty histogram&lt;br /&gt;
x = st.norm.rvs(size=N)&lt;br /&gt;
py.hist(x,bins=bins, histtype=&amp;quot;step&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
py.title('Histogram')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'ilość zliczeń')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie gęstości prawdopodobieństwa&lt;br /&gt;
os_x = np.arange(-3,3,0.01)&lt;br /&gt;
y=st.t.pdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(os_x,y,'g')&lt;br /&gt;
y=st.norm.pdf(os_x)&lt;br /&gt;
py.plot(os_x,y)&lt;br /&gt;
py.title(u'rozkład gęstości prawdopodobieństwa: pdf')&lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'gęstość prawdopodobieństwa')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie dystrybuanty&lt;br /&gt;
z= st.t.cdf(os_x, df=df)&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(os_x,z,'g')&lt;br /&gt;
z= st.norm.cdf(os_x)&lt;br /&gt;
py.plot(os_x,z)&lt;br /&gt;
py.title(u'Dystrybuanta: cdf')&lt;br /&gt;
 &lt;br /&gt;
py.xlabel(u'wartość zmiennej')&lt;br /&gt;
py.ylabel(u'prawdopodobieństwo')&lt;br /&gt;
 &lt;br /&gt;
# wykreślenie funkcji odwrotnej do dystrybuanty&lt;br /&gt;
os_p = np.arange(0,1,0.01)&lt;br /&gt;
f=st.t.ppf(os_p, df=df)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
py.plot(os_p,f,'g')&lt;br /&gt;
f=st.norm.ppf(os_p)&lt;br /&gt;
py.plot(os_p,f)&lt;br /&gt;
py.title(u'funkcja odwrotna do dystrybuanty: ppf')&lt;br /&gt;
py.ylabel(u'wartość zmiennej')&lt;br /&gt;
py.xlabel(u'prawdopodobieństwo')&lt;br /&gt;
&lt;br /&gt;
py.legend([&amp;quot;Rozkład t-Studenta&amp;quot;,&amp;quot;Rozkład normalny&amp;quot;])&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Statystyki i estymatory ===&lt;br /&gt;
Estymator jest statystyką służącą do szacowania pewnej wielkości (np. parametru) na podstawie próby losowej (np. danych eksperymentalnych). Na wykładzie poznaliśmy m.in. takie statystki jak [[WnioskowanieStatystyczne/Momenty|wartość oczekiwana, wariancja i mediana]], z których ostatnia jest szczególnym przypadkiem [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Kwantyle|kwantylu]]. Moduły numpy oraz scipy.stats umożliwiają łatwe estymowanie niektórych statystyk, a także obliczanie ich rzeczywistych wartości, jeśli znamy parametry rozkładu.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jako przykład niech posłuży poniższy kod, w którym szukamy wartości estymatorów wartości oczekiwanej oraz wariancji rozkładu normalnego na podstawie próby losowej, a wynik porównujemy z wartościami rzeczywistymi:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
m=2&lt;br /&gt;
s=0.5&lt;br /&gt;
rozklad = st.norm(m,s) #definiujemy rozkład normalny&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()  # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
var  = rozklad.var()   # rzeczywiste odchylenie standardow&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)  # estymowana wartość oczekiwana&lt;br /&gt;
var_est  = np.var(x)   # estymowana wariancja&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem wygeneruj próby losowe dla następujących rozkładów:&lt;br /&gt;
# Rozkład normalny &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; = 100, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; = 2.&lt;br /&gt;
# Rozkład dwumianowy p = 0.4, n =10.&lt;br /&gt;
# Rozkład poissona &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; = 4.&lt;br /&gt;
# Rozkład jednostajny na przedziale [2, 6).&lt;br /&gt;
Następnie estymuj na ich podstawie wartości poniższych statystyk i porównaj je z wartościami obliczonymi na podstawie znanych parametrów rozkładu:&lt;br /&gt;
# Wartość oczekiwana.&lt;br /&gt;
# Odchylenie standardowe.&lt;br /&gt;
# Wariancja.&lt;br /&gt;
# Mediana.&lt;br /&gt;
# Kurtoza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
Poniżej znajduje się przykładowe rozwiązanie dla rozkładu dwumianowego. Aby uzyskać rozwiązanie dla pozostałych rozkładów wystarczy dostosować pierwszą część kodu, gdzie definiowany jest rozkład.&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
# definiujemy parametry rozkładu, a następnie sam rozkład&lt;br /&gt;
n=10&lt;br /&gt;
p=0.4&lt;br /&gt;
rozklad = st.binom(n,p) #definiujemy nasz rozkład&lt;br /&gt;
&lt;br /&gt;
#określamy wielkość próby losowej&lt;br /&gt;
N = 10000&lt;br /&gt;
&lt;br /&gt;
# dalsza część jest jest niezależna od rodzaju rozkładu, który zdefiniowaliśmy powyżej&lt;br /&gt;
###########################################################################################&lt;br /&gt;
&lt;br /&gt;
#obliczamy statystyki  korzystając z metod obiektu 'rozklad'&lt;br /&gt;
mu   = rozklad.mean()           # rzeczywista wartość oczekiwana naszego rozkładu&lt;br /&gt;
std  = rozklad.std()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
var  = rozklad.var()            # rzeczywiste odchylenie standardowe&lt;br /&gt;
med  = rozklad.median()         # rzeczywista mediana&lt;br /&gt;
kurt = float(rozklad.stats('k'))# rzecz. kurtoza (funkcja zwraca jednoelementową tablicę&lt;br /&gt;
                                # numpy.ndarray, więc trzeba ją ręcznie zrzutować na float)&lt;br /&gt;
&lt;br /&gt;
#losujemy próbę o rozmiarze N&lt;br /&gt;
x = rozklad.rvs(size=N)&lt;br /&gt;
&lt;br /&gt;
#estymujemy statystyki&lt;br /&gt;
mu_est   = np.mean(x)     # estymowana wartość oczekiwana&lt;br /&gt;
std_est  = np.std(x)      # estymowane odchylenie standardowe&lt;br /&gt;
var_est  = np.var(x)      # estymowana wariancja&lt;br /&gt;
med_est  = np.median(x)   # estymowana mediana&lt;br /&gt;
kurt_est = st.kurtosis(x) # estymowana kurtoza&lt;br /&gt;
&lt;br /&gt;
# wypisujemy wyniki z dokładnością do 5 cyfr znaczących&lt;br /&gt;
print(&amp;quot;Wartość oczekiwana rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(mu,mu_est))&lt;br /&gt;
print(&amp;quot;Odchylenie standardowe rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(std,std_est))&lt;br /&gt;
print(&amp;quot;Wariancja rozkładu wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(var,var_est))&lt;br /&gt;
print(&amp;quot;Mediana rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(med,med_est))&lt;br /&gt;
print(&amp;quot;Kurtoza rozkładu  wynosi {:.5g}, wartość estymowana z próby wynosi {:.5g}&amp;quot;.format(kurt,kurt_est))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Generowanie zmiennych losowych podlegającym różnym rozkładom prawdopodobieństwa ==&lt;br /&gt;
Podstawowe typy generatorów liczb losowych wytwarzają liczby losowe podlegające rozkładowi jednostajnemu. Zastanowimy sie teraz jak mając zmienne losowe z rozkładu jednostajnego wytworzyć zmienne losowe o innych rozkładach.&lt;br /&gt;
=== Rozkład dwumianowy ===&lt;br /&gt;
Zmienna losowa, która zlicza liczbę sukcesów &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; próbach, gdzie &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest prawdopodobieństwem sukcesu w pojedynczej próbie, podlega rozkładowi dwumianowemu&lt;br /&gt;
[[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_dwumianowy więcej o rozkładzie dwumianowym]]: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_n(k)=\left(  &lt;br /&gt;
\begin{array}{c} &lt;br /&gt;
n \\&lt;br /&gt;
k&lt;br /&gt;
\end{array} &lt;br /&gt;
\right) p^kq^{n-k}=\frac{n!}{k!(n-k)!}p^kq^{n-k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Jak z rozkładu jednostajnego wytworzyć zmienne losowe o rozkładzie dwumianowym?''&lt;br /&gt;
* Wykonać symulację!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_binom(n,p,N):&lt;br /&gt;
	'''funkcja zwracająca zmienną losową z rozkładu dwumianowego: &lt;br /&gt;
	ilość sukcesów w n próbach przy prawdopodobieństwie sukcesu p&lt;br /&gt;
	parametry:&lt;br /&gt;
		n: liczba prób&lt;br /&gt;
		p: prawdopodobieństwo sukcesu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będącymi liczbami sukcesów&lt;br /&gt;
	'''&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję n liczb z rozkładu jednostajnego [0,1) i jako sukcesy&lt;br /&gt;
	#traktuję wylosowanie liczby nie większej niż p&lt;br /&gt;
	r=np.random.rand(N,n)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
n=20&lt;br /&gt;
N=100000&lt;br /&gt;
p=0.8&lt;br /&gt;
x = gen_binom(n,p,N)&lt;br /&gt;
bins =range(22) #granice binów&lt;br /&gt;
py.hist(x,bins)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Z oszacowań agencji wynika, że średnio 2 z 3 reklam spotyka się z pozytywnym odzewem. Akcja marketingowa obejmuje 12 reklam. Niech &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; oznacza liczbę reklam skutecznych. Czy &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi dwumianowemu?&lt;br /&gt;
Jakie jest prawdopodobieństwo, że 10 reklam będzie skutecznych?&lt;br /&gt;
Prawdopodobieństwo obliczyć ze wzoru oraz korzystając z symulacji.&lt;br /&gt;
&lt;br /&gt;
Wskazówka informacje o zmiennych z rozkładu dwumianowego (&amp;lt;tt&amp;gt;binom&amp;lt;/tt&amp;gt;) można uzyskać tak:&lt;br /&gt;
 # &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
 #   Binomial distribution&lt;br /&gt;
 #&lt;br /&gt;
 #   Counts the number of successes in *n* independent&lt;br /&gt;
 #   trials when the probability of success each time is *pr*.&lt;br /&gt;
 #&lt;br /&gt;
 #   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
 #   for k in {0,1,...,n}&lt;br /&gt;
Odp: ''p'' = 0,127&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang = python&amp;gt; &lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
p=2/3 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n=12   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
&lt;br /&gt;
# ze wzoru &lt;br /&gt;
&lt;br /&gt;
# &amp;gt;&amp;gt;&amp;gt; print(st.binom.extradoc)&lt;br /&gt;
#   Binomial distribution&lt;br /&gt;
#&lt;br /&gt;
#   Counts the number of successes in *n* independent&lt;br /&gt;
#   trials when the probability of success each time is *pr*.&lt;br /&gt;
#&lt;br /&gt;
#   binom.pmf(k,n,p) = choose(n,k)*p**k*(1-p)**(n-k)&lt;br /&gt;
#   for k in {0,1,...,n}&lt;br /&gt;
p_wz = st.binom.pmf(10,n,p)&lt;br /&gt;
print(p_wz)&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =100000 # liczba powtórzeń symulacji&lt;br /&gt;
k = np.zeros(N_powt)&lt;br /&gt;
for i in range(N_powt):&lt;br /&gt;
	r = rnd.random(size=n) # symulowana akcja reklamowa &lt;br /&gt;
	k[i]=np.sum(r&amp;lt;=p)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k==10)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Na egzaminie testowym jest 30 pytań. Na każde pytanie są podane cztery możliwe odpowiedzi, z czego tylko jedna jest prawdziwa. Za prawidłową odpowiedź student otrzymuje 1 punkt a za fałszywą &amp;amp;minus;0,5 punktu. Próg zaliczenia wynosi 15 punktów. Oblicz prawdopodobieństwo, że udzielając czysto losowych odpowiedzi student zaliczy egzamin.&lt;br /&gt;
&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
Liczba prawidłowych odpowiedzi w teście może być potraktowana jako liczba sukcesów k w n = 30 próbach. Prawdopodobieństwo sukcesu pojedynczego zdarzenia (prawidłowa odpowiedź na jedno pytanie) wynosi p = 1/4. Ze względu na obecność ujemnych punktów za fałszywe odpowiedzi zmienia się efektywna liczba punktów wymaganych do zaliczenia zgodnie z równaniem:&lt;br /&gt;
k-0.5*(30-k) = 15&lt;br /&gt;
co daje k = 20&lt;br /&gt;
Zatem problem redukuje się do wyznaczenia prawdopodobieństwa co najmniej 20 sukcesów w 30 próbach, przy czym prawdopodobieństwo sukcesu w 1 próbie wynosi p=1/4:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
p = 1./4 #prawdopodobieństwo sukcesu w jednej próbie&lt;br /&gt;
n = 30   # liczba prób w jednej akcji reklamowej&lt;br /&gt;
k_kryt = 20&lt;br /&gt;
# ze wzoru &lt;br /&gt;
p_wz = np.sum(st.binom.pmf(range(k_kryt,n+1),n,p))&lt;br /&gt;
print(p_wz)&lt;br /&gt;
&lt;br /&gt;
# z symulacji&lt;br /&gt;
N_powt =10000000 # liczba powtórzeń symulacji&lt;br /&gt;
r = np.random.random(size=(n,N_powt)) # symulowany test &lt;br /&gt;
k = np.sum(r&amp;lt;=p,0)	# liczba sukcesów&lt;br /&gt;
p_sym = sum(k&amp;gt;=20)/N_powt&lt;br /&gt;
print(p_sym)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład Poissona ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(k)=\frac{\mu^k e^{-\mu}}{k!}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Rozkładowi Poissona podlegają zmienne losowe zliczające w jednostce czasu liczbę zdarzeń o niskim prawdopodobieństwie zajścia. Np. liczba rozpadów promieniotwórczych na jednostkę czasu [[http://brain.fuw.edu.pl/edu/STAT:Przyk%C5%82adowe_rozk%C5%82ady#Rozk.C5.82ad_Poissona więcej o rozkładzie Poissona]]&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Lekarz pełniący dyżur w szpitalu jest wzywany do pacjentów średnio 3 razy w ciągu nocy. Załóżmy, że liczba wezwań na noc podlega rozkładowi Poissona. Jakie jest prawdopodobieństwo, że noc upłynie lekarzowi spokojnie?&lt;br /&gt;
U nas &amp;lt;math&amp;gt;\mu=3&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;x=0&amp;lt;/math&amp;gt; więc&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(0) = \frac{3^0e^{-3}}{0!} = e^{-3} = 0,0498&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Jak ze zmiennych podlegających rozkładowi jednostajnemu uzyskać zmienne podlegające rozkładowi Poissona?&lt;br /&gt;
&lt;br /&gt;
Wykonać symulację wynikającą z następujących spostrzeżeń:&lt;br /&gt;
&lt;br /&gt;
* Weźmy jednostkę czasu. Ma w niej zachodzić średnio &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; zdarzeń. &lt;br /&gt;
* Podzielmy jednostkę czasu na ''NT'' odcinków o jednakowej długości. &lt;br /&gt;
* Prawdopodobieństwo, że zdarzenie zajdzie w konkretnym odcinku jest &amp;lt;math&amp;gt;p=\frac{\mu}{NT}&amp;lt;/math&amp;gt; Takie prawdopodobieństwo ma też wylosowanie przy pomocy generatora liczb z rozkładu jednostajnego [0,1) liczby nie większej niż ''p''. &lt;br /&gt;
* Zatem, aby wytworzyć jedną liczbę z rozkładu Poissona można policzyć ile spośród ''NT'' liczb z rozkładu jednostajnego [0,1) jest nie większych niż ''p''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
def gen_poiss(mi,NT,N):&lt;br /&gt;
	'''funkcja zwracająca zmienne losowe z rozkładu poissona: &lt;br /&gt;
	średnia ilość zdarzeń o niskim prawdopodobieństwie w jednostce czasu&lt;br /&gt;
	parametry:&lt;br /&gt;
		mi: średnia liczba zdarzeń&lt;br /&gt;
		NT: liczba odcinków czasu&lt;br /&gt;
		N: liczba liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N liczb będących zliczeniami zdarzeń&lt;br /&gt;
	'''&lt;br /&gt;
	p = float(mi)/NT&lt;br /&gt;
	k = np.zeros(N)&lt;br /&gt;
	# w pętli wytwarzam pojedyncze zmienne losowe&lt;br /&gt;
	# losuję NT liczb z rozkładu jednostajnego [0,1) i jako zajście zdarzenia&lt;br /&gt;
	# traktuję wylosowanie liczby nie większej niż p. Ilość zdarzeń to liczba z rozkładu Poissona&lt;br /&gt;
	r=np.random.rand(N,NT)&lt;br /&gt;
	k=np.sum(r&amp;lt;=p,axis=1)&lt;br /&gt;
	return k&lt;br /&gt;
 &lt;br /&gt;
# kod testujący&lt;br /&gt;
mi=4&lt;br /&gt;
N=100000&lt;br /&gt;
NT = 10000&lt;br /&gt;
x = gen_poiss(mi,NT,N)&lt;br /&gt;
bins =np.arange(int(x.max()+1))-0.5&lt;br /&gt;
py.hist(x,bins,normed=True)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# porównanie z generatorami scipy.stats&lt;br /&gt;
p=mi/NT&lt;br /&gt;
k=np.arange(x.max()+1)&lt;br /&gt;
B=st.binom.pmf(k,NT,p)&lt;br /&gt;
py.plot(k,B,'ro')&lt;br /&gt;
P=st.poisson.pmf(k,mi)&lt;br /&gt;
py.plot(k,P,'go')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład normalny i Centralne Twierdzenie Graniczne ===&lt;br /&gt;
Gęstość prawdopodobieństwa [[WnioskowanieStatystyczne/Rozklady-przyklady#Rozk.C5.82ad_Gaussa| rozkładu normalnego]] dana jest wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{ -\frac{(x-\mu)^2}{2 \sigma^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie: &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; &amp;amp;mdash; średnia, &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; &amp;amp;mdash; odchylenie standardowe (&amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; &amp;amp;mdash; wariancja).&lt;br /&gt;
&lt;br /&gt;
Jeden ze  sposóbw wytwarzania zmiennych losowych o rozkładzie normalnym  polega na zastosowaniu [[WnioskowanieStatystyczne/CLT| Centralnego Twierdzenia Granicznego]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;X=\frac{\sqrt{12}}{\sqrt{N}}\left(\sum_{n=1}^N Y_n -\frac{N}{2}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; zmienna losowa z rozkładu jednostajnego &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;&lt;br /&gt;
W granicy dużych &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; rozkład zmiennej &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; dąży do rozkładu normalnego &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt;, która zwraca liczbę losową ''X'' otrzymaną zgodnie powyższym wzorem  przez sumowanie &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt; liczb z rozkładu jednostajnego.&lt;br /&gt;
* napisać funkcję &amp;lt;tt&amp;gt;gen_CTG(N, N_liczb)&amp;lt;/tt&amp;gt; korzystającą z &amp;lt;tt&amp;gt;gen_CTG_1(N)&amp;lt;/tt&amp;gt; i zwracającą zadaną ilość liczb &amp;lt;tt&amp;gt;N_liczb&amp;lt;/tt&amp;gt;&lt;br /&gt;
* narysować histogramy 10 000 liczb &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; uzyskanych kolejno dla &amp;lt;math&amp;gt;N={1,2,...,12}&amp;lt;/math&amp;gt;&lt;br /&gt;
* Jakie parametry charakteryzują rozkład do którego zbiegają sumy? Przy każdym z powyższych histogramów wypisz średnią i wariancję z próby (funkcje &amp;lt;tt&amp;gt;np.mean&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;np.var&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Rozwiązanie:=====&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
 &lt;br /&gt;
def gen_CTG_1(N):&lt;br /&gt;
	'''Funkcja generująca pojedynczą zmienną losową będącą sumą N liczb z rozkładu jednostajnego [0,1)&lt;br /&gt;
	pomnożoną przez czynnik normujący zapewniający wariancję równą 1.&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		jedną liczbę losową'''&lt;br /&gt;
	X = np.sqrt(12/N) * (np.sum(rnd.random(N)) - N/2)&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
def gen_CTG(N,N_liczb):&lt;br /&gt;
	'''Funkcja zwraca wektor (tablicę) zmiennych losowych będących sumami N liczb z rozkładu jednostajnego [0,1).&lt;br /&gt;
	parametry:&lt;br /&gt;
		N: ile liczb sumować&lt;br /&gt;
		N_liczb: ilość liczb do generowania	&lt;br /&gt;
	funkcja zwraca:&lt;br /&gt;
		N_liczb losowych'''&lt;br /&gt;
&lt;br /&gt;
	X=np.zeros(N_liczb)&lt;br /&gt;
&lt;br /&gt;
	for i in range(N_liczb):&lt;br /&gt;
		X[i] = gen_CTG_1(N)&lt;br /&gt;
&lt;br /&gt;
	return X&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# kod testujący&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
Nmax=12&lt;br /&gt;
&lt;br /&gt;
for N in range(1,Nmax+1):&lt;br /&gt;
	X=gen_CTG(N,N_liczb)&lt;br /&gt;
	py.subplot(3,4,N)&lt;br /&gt;
	bins = np.arange(-4,4,0.1)&lt;br /&gt;
	py.hist(X,bins=bins,normed=True)&lt;br /&gt;
	py.title(&amp;quot;N=%i, µ=%.2g, σ²=%.2g&amp;quot;%(N, X.mean(), X.var(ddof=1)))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie: transformacja rozkładu normalnego ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozkład o średniej 0 i wariancji 1 (notacja  &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt;) jest nazywany rozkładem standardowym i często jest oznaczany literą &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;. Dokonując odpowiedniej transformacji można z rozkładu &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; uzyskać dowolny inny rozkład normalny. &lt;br /&gt;
&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować 100000 zmiennych losowych z rozkładu &amp;lt;math&amp;gt;N(0,1)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.rvs(loc=0, scale=1, size=100000)&amp;lt;/tt&amp;gt;) &lt;br /&gt;
* przetransformować je do zmiennych losowych &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt;. &lt;br /&gt;
* narysować histogramy zmiennych przed i po transformacji.&lt;br /&gt;
* narysować rozkład gęstości prawdopodobieństwa dla rozkładu &amp;lt;math&amp;gt;N(2,9)&amp;lt;/math&amp;gt; (skorzystać z funkcji &amp;lt;tt&amp;gt;st.norm.pdf(...)&amp;lt;/tt&amp;gt;) .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===== Rozwiązanie =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
Z=st.norm.rvs(loc=0,scale=1,size=100000) #losowanie liczb z rozkładu N(0,1) (czyli Z)&lt;br /&gt;
&lt;br /&gt;
std=9&lt;br /&gt;
mu=2&lt;br /&gt;
X=Z*std+mu #transformacja do σ=9, µ=2&lt;br /&gt;
&lt;br /&gt;
szerokosc_binu=0.5&lt;br /&gt;
bins=np.arange(-40,40.5,szerokosc_binu) #te same granice binów dla obu histogramów&lt;br /&gt;
&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(Z,bins=bins,normed=True,label=&amp;quot;histogram przed transformacją&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(Z.mean(),Z.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(X,bins=bins,normed=True,label=&amp;quot;histogram po transformacji&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
PDF=st.norm.pdf(bins,loc=mu,scale=std) #modelowa gęstość prawdopodobieństwa dla σ=9, µ=2&lt;br /&gt;
py.plot(bins+szerokosc_binu/2,PDF,&amp;quot;ro&amp;quot;,label=&amp;quot;gęstość prawd.&amp;quot;)&lt;br /&gt;
py.title(&amp;quot;µ = %.3g    σ = %.3g&amp;quot;%(X.mean(),X.std()))&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Transformacja Boxa-Mullera====&lt;br /&gt;
To inna popularna metoda  metoda generowania liczb losowych o rozkładzie normalnym, na podstawie dwóch wartości zmiennej o rozkładzie jednostajnym na przedziale [0,1) http://en.wikipedia.org/wiki/Box-Muller_transform,  ale nie będziemy się nią tu szerzej zajmować.&lt;br /&gt;
&lt;br /&gt;
====Przykład====&lt;br /&gt;
Producent silników twierdzi, że jego silniki mają średnią moc 220 KM, a odchylenie standardowe wynosi 15 KM. Potencjalny klient testuje 100 silników. Jakie jest prawdopodobieństwo, że średnia z próby będzie mniejsza niż 217 KM?&lt;br /&gt;
&lt;br /&gt;
Przypomnijmy, że z CTG dla dużych liczebności próby  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\bar x \sim N(\mu,\sigma^2/n)&amp;lt;/math&amp;gt; [[WnioskowanieStatystyczne/Statystyki_i_estymatory#Estymator_warto.C5.9Bci_oczekiwanej|(dowód)]]. Zatem szukamy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( Z&amp;lt;\frac{217-\mu}{\frac{\sigma}{ \sqrt{n}}} \right)  = P\left( Z&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}} \right)=P(Z&amp;lt;-2)=0,0228&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.norm.cdf(-2)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu normalnego: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
sig=15&lt;br /&gt;
N_prob=100&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e4)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadania====&lt;br /&gt;
Teraz kilka najprostszych zadań dotyczących rozkładu normalnego:&lt;br /&gt;
* Znajdźmy prawdopodobieństwo, że ''Z'' &amp;lt; &amp;amp;minus;2,47. Proszę zrobić to na dwa sposoby: raz z użyciem wygenerowanych zmiennych z rozkładu normalnego, drugi raz z użyciem dystrybuanty   &amp;lt;tt&amp;gt;norm.cdf&amp;lt;/tt&amp;gt;&lt;br /&gt;
[Odp: ''p'' = 0,0068]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = -2.47&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(Z &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf(z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znaleźć prawdopodobieństwo ''P''(|''Z''| &amp;lt; 2)&lt;br /&gt;
[Odp:  ''p'' = 0,9545]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
N=100000&lt;br /&gt;
z_crit = 2&lt;br /&gt;
Z=st.norm.rvs(loc=0, scale=1, size=N)&lt;br /&gt;
p= sum(np.abs(Z) &amp;lt; z_crit )/N&lt;br /&gt;
p_cdf = st.norm.cdf( z_crit, loc=0, scale=1) - st.norm.cdf( -z_crit, loc=0, scale=1)&lt;br /&gt;
print('symulowane p: %.4f' % p )&lt;br /&gt;
print('p z dystrybuanty: %.4f' % p_cdf)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Koncentracja zanieczyszczeń w półprzewodniku używanym do produkcji procesorów podlega rozkładowi normalnemu o średniej 127 cząsteczek na milion i odchyleniu standardowemu 22. Półprzewodnik może zostać użyty jedynie gdy koncentracja zanieczyszczeń spada poniżej 150 cząstek na milion. Jaka proporcja półprzewodników nadaje się do użycia?&lt;br /&gt;
Prawdopodobieństwo obliczyć korzystając z dystrybuanty rozkładu normalnego oraz z symulacji.&lt;br /&gt;
[Odp: ''p'' = 0,852]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu=127&lt;br /&gt;
sig=22&lt;br /&gt;
m_kryt=150&lt;br /&gt;
p=st.norm.cdf(m_kryt, loc = mu, scale = sig )&lt;br /&gt;
print('proporcja odczytana z dystrybuanty rozkładu normalnego: %4g' %p)&lt;br /&gt;
# symulacja&lt;br /&gt;
N_prob=10000&lt;br /&gt;
seria=st.norm.rvs(loc=mu, scale=sig, size=N_prob)&lt;br /&gt;
p = sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
bins = np.arange(60,200,5)&lt;br /&gt;
h=py.hist(seria,bins);&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(seria&amp;lt;=m_kryt)/N_prob&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %.4g' %p1)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rozkład t ===&lt;br /&gt;
&lt;br /&gt;
Gdy nie znamy wariancji populacji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt; używamy w jego miejsce estymatora wariancji próby &amp;lt;math&amp;gt;s^2&amp;lt;/math&amp;gt; danego wzorem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s^2 =\frac{\sum(\bar x - x_i)^2}{n-1} &amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie ''n'' &amp;amp;mdash; rozmiar próby&lt;br /&gt;
&lt;br /&gt;
Wtedy rozkład &amp;lt;math&amp;gt;Y=\frac{\bar X -\mu}{\frac{s}{\sqrt{n}}}&amp;lt;/math&amp;gt; nie podlega rozkładowi normalnemu. Jeśli populacja &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; podlega rozkładowi normalnemu to &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; podlega  [[WnioskowanieStatystyczne/Test_t |rozkładowi ''t'' ]] z  ''n''&amp;amp;minus;1 stopniami swobody.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy na symulacji co to zmienia. Proszę obejrzeć wyniki dla kilku wartości &amp;lt;tt&amp;gt;N&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
 &lt;br /&gt;
N=3&lt;br /&gt;
N_liczb=10000&lt;br /&gt;
mu=2&lt;br /&gt;
sigma=1&lt;br /&gt;
&lt;br /&gt;
y_wyidealizowane=np.zeros(N_liczb)&lt;br /&gt;
m_populacji=np.zeros(N_liczb)&lt;br /&gt;
s_populacji=np.zeros(N_liczb)&lt;br /&gt;
y_estymowane=np.zeros(N_liczb)&lt;br /&gt;
m_estymowane=np.zeros(N_liczb)&lt;br /&gt;
s_estymowane=np.zeros(N_liczb)&lt;br /&gt;
for i in range(N_liczb):&lt;br /&gt;
    x=st.norm.rvs(loc=mu,scale=sigma,size=N)&lt;br /&gt;
    m_populacji[i]=mu&lt;br /&gt;
    s_populacji[i]=sigma/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    m_estymowane[i]=np.mean(x)&lt;br /&gt;
    s_estymowane[i]=np.std(x,ddof=1)/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
    y_wyidealizowane[i]=(m_estymowane[i]-mu)/(s_populacji[i])&lt;br /&gt;
    y_estymowane[i]=(m_estymowane[i]-mu)/(s_estymowane[i])&lt;br /&gt;
 &lt;br /&gt;
py.subplot(311)&lt;br /&gt;
py.title(u'średnia (wartość oczekiwana)')&lt;br /&gt;
py.plot(m_estymowane,label=&amp;quot;estymowana&amp;quot;)&lt;br /&gt;
py.plot(m_populacji,'r',label=&amp;quot;populacji&amp;quot;)&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(312)&lt;br /&gt;
py.title('odchylenie standardowe')&lt;br /&gt;
py.plot(s_estymowane,label=&amp;quot;estymowane&amp;quot;)&lt;br /&gt;
py.plot(s_populacji,'r',label='populacji')&lt;br /&gt;
py.legend()&lt;br /&gt;
&lt;br /&gt;
py.subplot(325)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji wyidealizowanej')&lt;br /&gt;
py.hist(y_wyidealizowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.subplot(326)&lt;br /&gt;
py.title(u'rozkład ilorazu Y dla wersji estymowanej')&lt;br /&gt;
py.hist(y_estymowane,30,(-4,4))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie====&lt;br /&gt;
Dział kontroli jakości producenta silników testuje 10 egzemplarzy silnika nowego typu. Uzyskano wartość średnią 220 KM oraz odchylenie standardowe równe 15 KM. Jakie jest prawdopodobieństwo, że klient, który zamówi 100 silników, otrzyma partię, w której średnia będzie mniejsza niż 217 KM? Wykonaj obliczenia oraz symulację. Porównaj wynik z wcześniejszym [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Przykład_5|przykładem]], gdzie znaliśmy odchylenie standardowe z innego źródła (nie było ono estymowane z próby).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- =====Rozwiązanie=====&lt;br /&gt;
&lt;br /&gt;
Tym razem spoglądamy na problem z punktu widzenia działu kontroli jakości, dla którego zarówno średnia, jak i odchylenie standardowe są wartościami estymowanymi z próby. Zatem szukamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(\bar x &amp;lt;217) =P\left( t&amp;lt;\frac{217-\mu}{\frac{s}{ \sqrt{n_{klient}}}}, df=n_{kontrola}-1 \right) = P\left( t&amp;lt;\frac{217-220}{\frac{15}{ \sqrt{100}}}, df=10-1 \right)=&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;P(t&amp;lt;-2, df=9) = 0,0383&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# ze wzoru&lt;br /&gt;
p=st.t.cdf(-2,df=9)&lt;br /&gt;
print('prawdopodobieństwo odczytane z dystrybuanty rozkładu t-Studenta: %(0).4f' %{'0':p})&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
&lt;br /&gt;
mu=220&lt;br /&gt;
s=15&lt;br /&gt;
N_prob_kontrola= 10 #liczba silników skontrolowana przez dział kontroli jakości&lt;br /&gt;
N_prob_klient  =100 #liczba silników kupowanych przez klienta&lt;br /&gt;
&lt;br /&gt;
m_kryt=217&lt;br /&gt;
&lt;br /&gt;
N_rep=int(1e5)&lt;br /&gt;
srednia=np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    seria=st.t.rvs(df=N_prob_kontrola-1,loc=mu, scale=s, size=N_prob_klient)&lt;br /&gt;
    srednia[i]=np.mean(seria)&lt;br /&gt;
&lt;br /&gt;
h=py.hist(srednia,30);&lt;br /&gt;
&lt;br /&gt;
py.plot([m_kryt, m_kryt],[0, max(h[0])],'r')&lt;br /&gt;
p1=np.sum(srednia&amp;lt;=m_kryt)/N_rep&lt;br /&gt;
print('prawdopodobieństwo uzyskane z symulacji: %(0).4f' %{'0':p1})&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Inne rozkłady uzyskiwane przez transformacje ===&lt;br /&gt;
====Metoda odwracania dystrybuanty====&lt;br /&gt;
&amp;lt;!--[http://wazniak.mimuw.edu.pl/index.php?title=Rachunek_prawdopodobieństwa_i_statystyka/Wykład_14:_Komputerowe_metody_statystyki]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Niech &amp;lt;math&amp;gt;\xi&amp;lt;/math&amp;gt; będzie zmienną losową o rozkładzie jednostajnym na przedziale &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt;. Jej dystrybuanta &amp;lt;math&amp;gt;J&amp;lt;/math&amp;gt; dana jest więc worem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
J(x) = P(\xi \le x) = \left\{ &lt;br /&gt;
\begin{array}{lrl}&lt;br /&gt;
0 &amp;amp; \mathrm{dla} &amp;amp;   x&amp;lt;0\\&lt;br /&gt;
x &amp;amp; \mathrm{dla} &amp;amp;   0 \le x &amp;lt;1 \\&lt;br /&gt;
1 &amp;amp; \mathrm{dla} &amp;amp;   1 \le x &lt;br /&gt;
\end{array}&lt;br /&gt;
\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
oraz niech &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; będzie dystrybuantą interesującego nas rozkładu. Jeśli &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; jest funkcją odwracalną to zmienna losowa zdefiniowana jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\eta = F^{-1}(\xi) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jest zmienną losową podlegającą rozkładowi o dystrybuancie &amp;lt;math&amp;gt; F&amp;lt;/math&amp;gt;.&lt;br /&gt;
Własność tę łatwo sprawdzić. Ponieważ dla każdego &amp;lt;math&amp;gt;x \in R &amp;lt;/math&amp;gt; mamy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(\eta \le x) = P(F^{-1} (\xi) \le x)  = P(\xi \le F(x)) = F(x)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
więc &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;  jest dystrybuantą zmiennej losowej &amp;lt;math&amp;gt;\eta&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Czyli jeśli znamy dystrybuantę interesującego nas rozkładu prawdopodobieństwa i dystrybuanta ta jest odwracalna, to możemy generować liczby z rozkładu o dystrybuancie &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Przykład==== &lt;br /&gt;
Wygenerować liczby pseudolosowe z rozkładu wykładniczego o gęstości prawdopodobieństwa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;f(x) = \lambda e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
* Znajdujemy dystrybuantę tego rozkładu:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;F(x) = 1-e^{-\lambda x} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Znajdujemy funkcję odwrotną do dystrybuanty:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;G(u)=F^{-1}(u) = -\frac{1}{\lambda}\ln(1-u) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Generujemy liczby losowe &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; z przedziału &amp;lt;math&amp;gt;[0,1)&amp;lt;/math&amp;gt; i stosujemy transformację &amp;lt;math&amp;gt;G(u)&amp;lt;/math&amp;gt;&lt;br /&gt;
* Test generowanego rozkładu robimy przez porównanie dystrybuanty teoretycznej i empirycznej. Proszę zwrócić uwagę na funkcję estymującą dystrybuantę empiryczną&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_wykladniczy(lam, N):&lt;br /&gt;
	'''funkcja zwraca N liczb z rozkładu wykładniczego o parametrze lam&lt;br /&gt;
	korzystając z metody odwracania dystrybuanty&lt;br /&gt;
	Dystrybuanta rozkładu wykładniczego: F(x) = 1- exp(-lam*x)&lt;br /&gt;
	Funkcja do niej odwrotna: G(u) = -1/lam ln(1-u)'''&lt;br /&gt;
&lt;br /&gt;
	u = np.random.random(N)&lt;br /&gt;
	return -1.0/lam* np.log(1.-u)&lt;br /&gt;
	&lt;br /&gt;
def dystrybuanta(X,od=0, do=4, krok=0.05):&lt;br /&gt;
	'''funkcja zwraca dystrybuantę empiryczną &lt;br /&gt;
	zmiennej X na przedziale (od, do) z krokiem krok'''&lt;br /&gt;
	&lt;br /&gt;
	os_x = np.arange(od,do,krok)&lt;br /&gt;
	nx = len(os_x)&lt;br /&gt;
	N_liczb = len(X)&lt;br /&gt;
	D=np.zeros(nx) #wyzerowany wektor na naszą dystrybuantę&lt;br /&gt;
	for i in range(nx):&lt;br /&gt;
		D[i] = sum(X &amp;lt;= os_x[i])/N_liczb&lt;br /&gt;
	return (os_x, D)&lt;br /&gt;
	&lt;br /&gt;
# testujemy: narysujemy dystrybuantę oczekiwaną i empiryczną&lt;br /&gt;
lam=3&lt;br /&gt;
N=10000&lt;br /&gt;
&lt;br /&gt;
x = np.arange(0,4,0.01)&lt;br /&gt;
F = 1-np.exp(-lam*x)&lt;br /&gt;
X = gen_wykladniczy(lam, N)&lt;br /&gt;
(os_x, F_emp) = dystrybuanta(X,od=0, do=4, krok=0.1)&lt;br /&gt;
py.plot(x,F,'r',label = 'dystrybuanta teoretyczna')&lt;br /&gt;
py.plot(os_x, F_emp,'.b', label = 'dystrybuanta empiryczna')&lt;br /&gt;
py.legend()&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że nie zawsze jest łatwo wyznaczyć efektywnie  &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; &amp;amp;mdash; jest tak na przykład w przypadku rozkładu normalnego. W takich sytuacjach można szukać przybliżonej wartości &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt;, rozwiązując numerycznie równanie:&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)=u&amp;lt;/math&amp;gt;, co sprowadza się do znalezienia miejsc zerowych funkcji &amp;lt;math&amp;gt;H(x)=F(x)-u&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie ====&lt;br /&gt;
Posiłkując się powyższym przykładem napisz funkcję ''MyGen(N)'' dla rozkładu, którego funkcja gęstości prawdopodobieństwa jest dana wzorem:&lt;br /&gt;
&amp;lt;math&amp;gt; f(x) = \frac{1}{\pi (1+x^{2})} &amp;lt;/math&amp;gt;&lt;br /&gt;
Następnie narysuj dla niego dystrybuantę i dystrybuantę empiryczną na przedziale [-10, 10].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
#f(x) = 1/(π(1+x²))             -- f. gęstości prawdopodobieństwa&lt;br /&gt;
#zatem F(x) = arctg(x)/π + 1/2  -- dystrybuanta&lt;br /&gt;
#zatem F⁻¹(x) = tg(π(x-1/2))    -- f. odwrotna do dystrybuanty&lt;br /&gt;
&lt;br /&gt;
def MyGen(size=1):&lt;br /&gt;
	x=np.random.random(size) # liczby z generatora jednostajnego na przedziale [0,1)&lt;br /&gt;
	y=np.tan(np.pi*(x-1/2))  # korzystamy z metody odwracania dystrybuanty&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
x=MyGen(int(1e6))&lt;br /&gt;
bins=np.linspace(-10,10,101)&lt;br /&gt;
py.subplot(211)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step')&lt;br /&gt;
py.plot(bins,1./(np.pi*(1+bins**2)),'r')&lt;br /&gt;
py.subplot(212)&lt;br /&gt;
py.hist(x,bins,normed=True,histtype='step',cumulative=True)&lt;br /&gt;
py.plot(bins,np.arctan(bins)/np.pi+0.5,'r')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8533</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8533"/>
		<updated>2021-02-18T10:18:51Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Elektrownia jądrowa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8532</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8532"/>
		<updated>2021-02-18T10:18:13Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zadania */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8531</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8531"/>
		<updated>2021-02-18T10:17:59Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Sonda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8530</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8530"/>
		<updated>2021-02-18T10:17:41Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Czy stosunek do marihuany się zmienił? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8529</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8529"/>
		<updated>2021-02-18T10:16:55Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Wzrost mocy turbin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8528</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8528"/>
		<updated>2021-02-18T10:16:33Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Wybory prezydenckie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8527</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8527"/>
		<updated>2021-02-18T10:16:13Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zawały serca i cholesterol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8526</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8526"/>
		<updated>2021-02-18T10:15:53Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Czy gęstości planet się różnią? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8525</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8525"/>
		<updated>2021-02-18T10:15:34Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Czy gęstości planet się różnią? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8524</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8524"/>
		<updated>2021-02-18T10:14:56Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Elektrownia jądrowa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8437</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8437"/>
		<updated>2020-06-16T08:48:19Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Wzrost mocy turbin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8436</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8436"/>
		<updated>2020-06-16T07:43:15Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Elektrownia jądrowa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8435</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8435"/>
		<updated>2020-06-16T07:43:10Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zawały serca i cholesterol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8434</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8434"/>
		<updated>2020-06-16T07:43:05Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Czy stosunek do marihuany się zmienił? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8433</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8433"/>
		<updated>2020-06-16T07:43:00Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Wybory prezydenckie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8432</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8432"/>
		<updated>2020-06-16T07:42:55Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Sonda */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8431</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8431"/>
		<updated>2020-06-16T07:42:50Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Wzrost mocy turbin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8430</id>
		<title>WnioskowanieStatystyczne/ Testowanie hipotez</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=WnioskowanieStatystyczne/_Testowanie_hipotez&amp;diff=8430"/>
		<updated>2020-06-16T07:42:45Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* Zanieczyszczenie środowiska */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Testowanie hipotez dotyczących jednej lub dwóch populacji ==&lt;br /&gt;
===Wstęp===&lt;br /&gt;
Schemat weryfikowania hipotez omówiony jest w wykładzie [[WnioskowanieStatystyczne/Weryfikacja hipotez |Weryfikacja hipotez statystycznych]]. Tu przypomnimy tylko krótko podstawowe pojęcia i decyzje, które trzeba pojąć w procedurze weryfikacji.&lt;br /&gt;
====Hipoteza zerowa i alternatywna====&lt;br /&gt;
Podstawą sukcesu w statystycznym testowaniu hipotez jest prawidłowe ich sformułowanie. &lt;br /&gt;
Hipotezy muszą być rozłączne. Najczęściej jako hipotezę zerową przyjmujemy zdanie, które chcemy odrzucić, &lt;br /&gt;
gdyż błąd takiej decyzji można kontrolować. Logika testowania jest następująca: tworzymy &lt;br /&gt;
funkcję od zmiennych losowych, dla której przy spełnieniu przez owe zmienne hipotezy zerowej potrafimy &lt;br /&gt;
podać prawdopodobieństwa z jakimi przyjmuje ona różne wartości. Ta funkcja nazywana jest ''statystyką''. &lt;br /&gt;
Następnie obliczamy wartość tej funkcji dla badanej próby. Jeśli prawdopodobieństwo osiągnięcia otrzymanej &lt;br /&gt;
bądź jeszcze bardziej ekstremalnej wartości statystyki jest niskie to wątpimy, że nasze dane są zgodne&lt;br /&gt;
z hipotezą zerową i jesteśmy skłonni przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
====Wybór statystyki====&lt;br /&gt;
Wybierając statystykę można posłużyć się następującym schematem:&lt;br /&gt;
* Jeżeli znamy rozkład prawdopodobieństwa, z którego pochodzą nasze dane, lub umiemy je przetransformować do znanego rozkładu, to wybierzemy klasyczny test parametryczny np. test ''t'' ([http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.ttest_rel.html ttest_rel], [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html ttest_ind]), &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; itp.&lt;br /&gt;
* Jeżeli nie znamy rozkładu prawdopodobieństwa naszych danych albo nie chcemy nic o nim zakładać to mamy dwie możliwości: &lt;br /&gt;
** korzystamy z klasycznego [[WnioskowanieStatystyczne/Test_Wilcoxona|testu nieparametrycznego]] np.:&lt;br /&gt;
&amp;lt;!--http://mail.scipy.org/pipermail/scipy-user/2009-July/021679.html--&amp;gt;&lt;br /&gt;
**; test Wilcoxona dla obserwacji sparowanych: testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej (przekłada się to na równość dystrybuant). Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''są''' sparowane. W pythonie mamy ten test zaimplementowany jako: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html &amp;lt;tt&amp;gt;scipy.stats.wilcoxon(x, y=None)&amp;lt;/tt&amp;gt;]. Ta implementacja stosuje przybliżenie dużych prób i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;!--    Calculate the Wilcoxon signed-rank test&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon signed-rank test tests the null hypothesis that two related samples come from the same distribution. It is a a non-parametric version of the paired T-test.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x : array_like&lt;br /&gt;
        The first set of measurements&lt;br /&gt;
    y : array_like, optional, default None&lt;br /&gt;
        The second set of measurements. If y is not given, then the x array is considered to be the differences between the two sets of measurements.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
        The test statistic under the large-sample approximation that the signed-rank statistic is normally distributed.&lt;br /&gt;
    p-value : float&lt;br /&gt;
        The two-sided p-value for the test&lt;br /&gt;
    Notes&lt;br /&gt;
    Because the normal approximation is used for the calculations, the samples used should be large. A typical rule is to require that n &amp;gt; 20.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
scipy.stats.ranksums(x, y)&lt;br /&gt;
&lt;br /&gt;
    Compute the Wilcoxon rank-sum statistic for two samples.&lt;br /&gt;
&lt;br /&gt;
    The Wilcoxon rank-sum test tests the null hypothesis that two sets of measurements are drawn from the same distribution. The alternative hypothesis is that values in one sample are more likely to be larger than the values in the other sample.&lt;br /&gt;
&lt;br /&gt;
    This test should be used to compare two samples from continuous distributions. It does not handle ties between measurements in x and y. For tie-handling and an optional continuity correction see `stats.mannwhitneyu`_&lt;br /&gt;
    Parameters:	&lt;br /&gt;
&lt;br /&gt;
    x,y : array_like&lt;br /&gt;
&lt;br /&gt;
        The data from the two samples&lt;br /&gt;
&lt;br /&gt;
    Returns:	&lt;br /&gt;
&lt;br /&gt;
    z-statistic : float&lt;br /&gt;
&lt;br /&gt;
        The test statistic under the large-sample approximation that the rank sum statistic is normally distributed&lt;br /&gt;
&lt;br /&gt;
    p-value : float&lt;br /&gt;
&lt;br /&gt;
        The two-sided p-value of the test&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
**; test Manna-Whitney'a : testuje hipotezę zerową, że dwie próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;, które ze sobą porównujemy pochodzą z tej samej populacji ciągłej. Próby &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; i&amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; '''nie są''' sparowane. Implementacja w pyhtonie: [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html &amp;lt;tt&amp;gt;scipy.stats.mannwhitneyu(x, y, use_continuity=True)&amp;lt;/tt&amp;gt;] stosuje przybliżenia i zalecana jest dla &amp;lt;math&amp;gt;n&amp;gt;20&amp;lt;/math&amp;gt; w każdej z prób. Funkcja zwraca wartość ''p'' dla hipotezy jednostronnej. Jeśli testujemy hipotezę dwustronną trzeba otrzymane ''p'' pomnożyć przez 2.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
scipy.stats.mannwhitneyu(x, y, use_continuity=True)¶&lt;br /&gt;
&lt;br /&gt;
    Computes the Mann-Whitney rank test on samples x and y.&lt;br /&gt;
    Parameters:	&lt;br /&gt;
    x, y : array_like&lt;br /&gt;
        Array of samples, should be one-dimensional.&lt;br /&gt;
    use_continuity : bool, optional&lt;br /&gt;
        Whether a continuity correction (1/2.) should be taken into account. Default is True.&lt;br /&gt;
    Returns:	&lt;br /&gt;
    u : float&lt;br /&gt;
        The Mann-Whitney statistics.&lt;br /&gt;
    prob : float&lt;br /&gt;
        One-sided p-value assuming a asymptotic normal distribution.&lt;br /&gt;
    Notes&lt;br /&gt;
    Use only when the number of observation in each sample is &amp;gt; 20 and you have 2 independent samples of ranks. Mann-Whitney U is significant if the u-obtained is LESS THAN or equal to the critical value of U.&lt;br /&gt;
&lt;br /&gt;
    This test corrects for ties and by default uses a continuity correction. The reported p-value is for a one-sided hypothesis, to get the two-sided p-value multiply the returned p-value by 2.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** wytwarzamy rozkład statystyki na podstawie naszych danych przez repróbkowanie ([[WnioskowanieStatystyczne/Bootstrap|bootstrap]] lub [[WnioskowanieStatystyczne/Testy_permutacyjne| permutacje]]). W podejściu repróbkowania tworzymy statystyczny model badanego procesu '''zgodny z hipotezą zerową''' i następnie badamy w drodze symulacji prawdopodobieństwa generowania przez ten model interesujących nas sytuacji. Największą uwagę musimy tu poświęcić na prawidłowe sformułowanie modelu, a następnie precyzyjne określenie prawdopodobieństwo jakiego zdarzenia nas naprawdę interesuje.&lt;br /&gt;
&lt;br /&gt;
===Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;===&lt;br /&gt;
; Błąd pierwszego rodzaju : błąd polegający na odrzuceniu hipotezy zerowej, która w rzeczywistości jest prawdziwa. Oszacowanie prawdopodobieństwa popełnienia błędu pierwszego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; i nazywamy poziomem istotności testu.&lt;br /&gt;
; Błąd drugiego rodzaju : polegaja na nieodrzuceniu hipotezy zerowej, która jest w rzeczywistości fałszywa. Oszacowanie prawdopodobieństwo popełnienia błędu drugiego rodzaju oznaczamy symbolem &amp;lt;math&amp;gt; \beta&amp;lt;/math&amp;gt;, a jego dopełnienie do jedności nazywane jest '''mocą testu'''.&lt;br /&gt;
&lt;br /&gt;
Wartość &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest to wartość prawdopodobieństwa, że wobec posiadanych danych  hipoteza zerowa jest prawdziwa. Jest ono obliczane jako prawdopodobieństwo zaobserwowania wartości ''statystyki'' takiej jak dla badanej próby, lub bardziej ekstremalnej, przy prawdziwej hipotezie zerowej.&lt;br /&gt;
Najczęściej porównujemy ''p'' z wcześniej ustalonym poziomem istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Poziom istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; to wartość krytyczna prawdopodobieństwa, taka że jeżeli &amp;lt;math&amp;gt; p&amp;lt; \alpha&amp;lt;/math&amp;gt; to odrzucamy hipotezę zerową.&lt;br /&gt;
&lt;br /&gt;
==Formułowanie hipotez==&lt;br /&gt;
===Przykład: mutacje muszek owocowych===&lt;br /&gt;
Załóżmy, że badamy muszki owocowe. W standardowej populacji proporcja samic do samców jest 1:1. Opracowaliśmy metodę powodującą taką mutację muszek owocowych, że potomstwo ich nie będzie miało jednakowej szansy na bycie samcem lub samiczką. W pierwszych 20 zbadanych przypadkach uzyskujemy 14 samców i 6 samiczek.&lt;br /&gt;
; Pytanie naukowe: Czy wyniki eksperymentu potwierdzają, że nasza metoda zaburza proporcję płci?&lt;br /&gt;
Najpierw musimy przetłumaczyć pytanie naukowe na pytanie statystyczne. &lt;br /&gt;
; Pytanie statystyczne: Jakie jest prawdopodobieństwo uzyskania zaobserwowanej proporcji (14:6), lub bardziej ekstremalnej w próbie 20 osobników,  jeśli rzeczywista proporcja płci jest 1:1?&lt;br /&gt;
&lt;br /&gt;
Z tego pytania wynikają dwie możliwe hipotezy:&lt;br /&gt;
* Hipoteza zerowa: Nowa metoda nie zaburza proporcji płci 1:1. Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''jest'' 1:1&lt;br /&gt;
* Hipoteza alternatywna: Zaobserwowana próbka pochodzi z populacji, w której proporcja płci ''nie jest'' 1:1.&lt;br /&gt;
; Prawdopodobieństwo, które musimy oszacować: Jakie jest prawdopodobieństwo uzyskania 14 lub więcej jedynek w serii 20 prób, jeśli prawdopodobieństwo jedynki jest &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;?  &lt;br /&gt;
# Oznaczmy 1: samiec 0: samiczka.&lt;br /&gt;
# Zróbmy wektor 20-elementowy zawierający 10 zer i 10 jedynek.&lt;br /&gt;
# Wylosujmy ze zwracaniem nowy wektor 20-elementowy. (Jest to nasz model uzyskiwania 20 elementowej próbki z populacji o proporcji 1:1.) Zapamiętajmy liczbę jedynek.&lt;br /&gt;
# Powtórzmy poprzedni krok 1000 razy&lt;br /&gt;
# Zróbmy histogram ilości jedynek.&lt;br /&gt;
# Policzmy ile razy zdarzyło sie 14 lub więcej jedynek (to odpowiada 14 lub więcej samców) i dodajmy do tego ilość przypadków gdy mieliśmy 6 lub mniej jedynek (to odpowiada 14 lub więcej samiczek). Wynik podzielmy przez ilość losowań (1000).&lt;br /&gt;
&lt;br /&gt;
Powyższa procedura opisuje test dwustronny. Testu dwustronnego musimy użyć jeśli nie mamy ''istotnych'' powodów, żeby wierzyć, że nowa metoda działa ''jedynie na zwiększenie'' szansy pojawienia się samca.&lt;br /&gt;
&lt;br /&gt;
Jak powyższy problem rozwiązać w sposób parametryczny? &lt;br /&gt;
Próby podlegają rozkładowi dwumianowemu, można więc obliczyć szukane prawdopodobieństwo korzystając z jego dystrybuanty.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat średniej==&lt;br /&gt;
Firma rozwożąca przesyłki po mieście deklaruje średni czas dostarczenia 28 minut. Przeprowadźmy test tej hipotezy na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu \ne 28&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wybieramy losową próbę 100 przesyłek, mierzymy czas dostarczenia, liczymy średnią z próby &amp;lt;math&amp;gt;\bar x = 31,5&amp;lt;/math&amp;gt; minut i odchylenie standardowe próby &amp;lt;math&amp;gt;s = 5&amp;lt;/math&amp;gt; minut. &lt;br /&gt;
&lt;br /&gt;
Test ten można przeprowadzić z użyciem przedziałów ufności:&lt;br /&gt;
* Konstruujemy przedziały ufności 95% dla średniej &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;.Formalnie, ponieważ wyliczyliśmy odchylenie standardowe z próby powinniśmy zastosować wartości krytyczne z rozkładu t. Rozmiar próby wynosi 100 więc rozkład t ma 99 stopni swobody. Wartość krytyczna w tym rozkladzie to &amp;lt;math&amp;gt;t_{97.5} =  1.984 &amp;lt;/math&amp;gt;. Mamy zatem:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar x \pm 1,984 \frac{s}{\sqrt{n}} = 31,5 \pm 1,984*\frac{5}{\sqrt{100}} = 31,5 \pm 0,992 = [30,51 \quad 32,49]&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Możemy więc być na 95% pewni, że nieznana średnia leży pomiędzy 30,51 a 32,49 a więc na 95% nie leży poza tym przedziałem. &lt;br /&gt;
Skoro &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; podaje &amp;lt;math&amp;gt;\mu = 28&amp;lt;/math&amp;gt; (poza przedziałem), możemy odrzucić tę hipotezę.  Jeśli &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; jest prawdziwe, istnieje prawdopodobieństwo 0,05, że skonstruowany przedział nie będzie zawierał &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt;. Istnieje zatem prawdopodobieństwo 0,05 popełnienia błądu I-go rodzaju. Mówimy, że przeprowadziliśmy test na poziomie istotności 0,05.&lt;br /&gt;
&lt;br /&gt;
Test można też przeprowadzić następująco:&lt;br /&gt;
* Jako statystykę wybieramy &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Obliczmy jej wartość dla danych z próby: &amp;lt;math&amp;gt;t = \frac{\bar x - \mu}{s/\sqrt{n}}  = (31,5 -28)/(5/\sqrt{100}) = 7 &amp;lt;/math&amp;gt;&lt;br /&gt;
* Porównujemy otrzymaną wartość z wartością krytyczna dla przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;. Konstuowany przez nas test ma być testem dwustronnym więc musimy wziąć do porównania wartość krytyczna dla &amp;lt;math&amp;gt;\alpha/2&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt; t_{\alpha/2} = t_{0,025}= -1,984&amp;lt;/math&amp;gt;&lt;br /&gt;
* Wnioskowanie: Dla naszej próby otrzymaliśmy wartość statystyki równą 6.96. Dla przyjętego poziomu istotności wartość statystyki wynosi 1,984. Prawdopodobieństwo zaobserwowania statystyki o wartości 7 lub bardziej ekstremalnej (tu: większej) jest mniejsze niż założony poziom istotności więc odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Testowanie hipotez na temat wariancji==&lt;br /&gt;
&lt;br /&gt;
Do testowania hipotez na temat wariancji używamy statystyki chi-kwadrat o &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; stopniach swobody:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(n-1)s^2}{\sigma_0^2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;\sigma_0^2&amp;lt;/math&amp;gt; jest wartością wariancji podaną w &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Przykład===&lt;br /&gt;
Do produkcji baterii używane są metalowe płytki o średniej średnicy 5mm. Jeśli wariancja średnicy płytki jest nie większa niż 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt;, produkcja jest kontynuowana. Jeśli wariancja przekracza 1mm&amp;lt;math&amp;gt;^2&amp;lt;/math&amp;gt; proces produkcji trzeba przerwać. Kontroler przeprowadza test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 5&amp;lt;/math&amp;gt;%: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 \le 1&amp;lt;/math&amp;gt; i &lt;br /&gt;
&amp;lt;math&amp;gt;H_1:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sigma^2 &amp;gt; 1&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Wybiera losową próbę 31 płytek i znajduje wariancję próby &amp;lt;math&amp;gt;s^2 = 1,62&amp;lt;/math&amp;gt;. Czy daje to podstawy do przerwania produkcji ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\chi^2 = \frac{(31-1) \cdot 1,62}{1} = 48,6&amp;lt;/math&amp;gt;. Znajdujemy poziom &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; dla tej wartości &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; z 30 stopniami swobody. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
p = 1-st.chi2.cdf(48.6,30)&lt;br /&gt;
print(p)&lt;br /&gt;
&lt;br /&gt;
#ilustracja&lt;br /&gt;
x = py.arange(0,60,1)  &lt;br /&gt;
py.plot(x, st.chi2.pdf(x,30)) #rysujemy funkcję gęstości prawdopodobieństwa chi2 o 30 st. swobody&lt;br /&gt;
x2 = py.arange(48.8,60,1)&lt;br /&gt;
py.fill_between(x2,st.chi2.pdf(x2,30)) #cieniujemy obszar pod funkcją geęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymaliśmy &amp;lt;math&amp;gt; p = 0,017 &amp;lt;/math&amp;gt;.&lt;br /&gt;
Wniosek:  Odrzucamy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Błąd drugiego rodzaju. Moc testu.==&lt;br /&gt;
Błąd II-go rodzaju popełniamy wtedy gdy przyjmujemy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; a prawdziwe jest &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Załóżmy następujący test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu = 60&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu = 65&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Niech rozmiar próby wynosi &amp;lt;math&amp;gt;n = 100&amp;lt;/math&amp;gt; a odchylenie standardowe w populacji &amp;lt;math&amp;gt;\sigma = 20&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Powinniśmy tu zastosować test jednostronny (mamy tylko dwie możliwości: &amp;lt;math&amp;gt;\mu = 60&amp;lt;/math&amp;gt; lub &amp;lt;math&amp;gt;65&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Znajdźmy punkt krytyczny &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; dla poziomu istotności &amp;lt;math&amp;gt;\alpha =  0,05&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C = \mu_0 + 1,645\frac{\sigma}{\sqrt{n}} = 60 + 1,645(20/10) = 63,29&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd pierwszego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;gt; C&amp;lt;/math&amp;gt; i prawdziwe będzie &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Prawdopodobieństwo błędu pierwszego rodzaju ustaliliśmy z góry na poziomie &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\alpha = P(\bar x &amp;gt; C| \mu = \mu_0)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Błąd drugiego rodzaju popełnimy gdy &amp;lt;math&amp;gt;\bar x &amp;lt; C&amp;lt;/math&amp;gt; a prawdziwe będzie &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
Prawdopodobieństwo popełnienia tego błędu wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = P(\bar x &amp;lt; C| \mu = \mu_1) = P\left( \frac{\bar x - \mu_1}{\sigma/\sqrt{n}}  &amp;lt; \frac{C - \mu_1}{\sigma/\sqrt{n}}\right)= &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= P\left( Z &amp;lt; \frac{63,29 - 65}{20/10}\right)  = P(Z &amp;lt; -0,855) = 0,1963&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moc testu jest dopełnieniem błędu II rodzaju.&lt;br /&gt;
A moc testu czyli prawdopodobieństwo odrzucenia hipotezy zerowej podczas gdy jest ona fałszywa wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;1 - \beta = 0,8037&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Porównanie dwóch populacji==&lt;br /&gt;
[[WnioskowanieStatystyczne/Test_t#Test_t_.28Studenta.29_r.C3.B3.C5.BCnicy_.C5.9Brednich|Dla przypomnienia]]:&lt;br /&gt;
Jeśli mamy dwie próbki danych:&lt;br /&gt;
:&amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_1&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_1^2&amp;lt;/math&amp;gt; i &lt;br /&gt;
:&amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; o liczebności &amp;lt;math&amp;gt;n_2&amp;lt;/math&amp;gt; i estymowanej wariancji &amp;lt;math&amp;gt;s_2^2&amp;lt;/math&amp;gt;  &lt;br /&gt;
:gdzie &amp;lt;math&amp;gt;s_{i}^2= \frac{1}{(n_i-1)}\sum\limits_{j=1}^{n_i} (x_{j}-\overline{x}_{i})^{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
pochodzących z rozkładu normalnego o takiej samej wariancji &amp;lt;math&amp;gt;\sigma&amp;lt;/math&amp;gt; to:&lt;br /&gt;
*wspólna wariancja może być estymowana jako: &amp;lt;math&amp;gt;s^2=\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2} &amp;lt;/math&amp;gt;&lt;br /&gt;
*wariancja różnicy średnich może być estymowana jako: &amp;lt;math&amp;gt;s_{\Delta}^2=s_{\bar{x}_1}^2+s_{\bar{x}_2}^2=\frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{n_1+n_2}{n_1n_2}s^2&amp;lt;/math&amp;gt;&lt;br /&gt;
Jeśli postawimy hipotezę zerową: &amp;lt;math&amp;gt;H_0:\; \mu_1 = \mu_2&amp;lt;/math&amp;gt; to&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
t= \frac{\bar{x}_1-\bar{x}_2}{s_{\Delta}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pochodzi z rozkładu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; o &amp;lt;math&amp;gt;n_1+n_2-2&amp;lt;/math&amp;gt; stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
===Przykład: promocja===&lt;br /&gt;
Producent odtwarzaczy CD chce sprawdzić czy małe obniżenie ceny produktu wpłynie korzystnie na sprzedaż. Losowa próba 15 tygodni sprzedaży przed obniżką dała średni dochód 6598 zł i standardowe odchylenie 844 zł. Losowa próba 12 tygodni sprzedaży w trakcie promocji dała średnią 6870 i odchylenie standardowe 669 zł. Czy dane te wykazują poprawę sprzedaży w trakcie promocji (przyjąć poziom istotności 5%) ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1 = 6598&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_2 = 6870&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Treść zadania odpowiada testowi jednostronnemu z poniższymi hipotezami:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_0: \mu_1 = \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1: \mu_1 &amp;lt; \mu_2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Różnica średnich wynosi:&lt;br /&gt;
&amp;lt;math&amp;gt;\bar{x}_1-\bar{x}_2 = 6598 - 6870 = -272 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estymowana wariancja różnicy średnich:&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta}^2 =  \frac{1}{n_1}s_1^2+\frac{1}{n_2}s_2^2 = \frac{844^2}{15} + \frac{669^2}{12} = 84785,82&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zatem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;s_{\Delta} = 291,18&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; t = -272/ 291,18 = - 0,934&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ilość stopni swobody: &amp;lt;math&amp;gt;n_1+n_2-2 = 25&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t_{25} \le -0,934) = 0.18 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wniosek: Nie możemy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;. Nie mamy podstaw by uznać że mała obniżka cen poprawiła sprzedaż.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do testowania równości wariancji w dwóch populacjach stosuje się test &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;F_{(n1 -1, n2 - 1)} = \frac{s_1^2}{s_2^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W przykładzie powyżej założyliśmy równość wariancji. Korzystając z testu &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; sprawdzić czy założenie było uzasadnione.&lt;br /&gt;
&lt;br /&gt;
==Badanie założenia o normalności rozkładu==&lt;br /&gt;
We wszystkich wspomnianych powyżej klasycznych testach statystycznych &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; istotnym założeniem jest to, że dane wejściowe w próbie mają rozkład normalny. W powyższych zadaniach po prostu to zakładaliśmy, ale w praktyce, kiedy dostajemy próbę do analizy, musimy sami sprawdzić,  czy możemy uznać ją za pochodzącą z rozkładu normalnego. Do weryfikacji takiej hipotezy służą narzędzia graficzne:&lt;br /&gt;
&lt;br /&gt;
=== Histfit: histogram z naniesionym fitem rozkładu normalnego ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
''' &lt;br /&gt;
x - dane&lt;br /&gt;
N_bins -ilość binów w histogramie&lt;br /&gt;
&lt;br /&gt;
Funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
o średniej i wariancji estymowanych z x.&lt;br /&gt;
&lt;br /&gt;
Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st''' &lt;br /&gt;
 &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	# Rysujemy histogram i w jawny sposób odbieramy zwracane przez p.hist obiekty&lt;br /&gt;
	#   - normujemy histogram do jedności&lt;br /&gt;
	#   - ustalamy kolor prostokątów na zielony&lt;br /&gt;
	#   - ustawiamy przezroczystość prostokątów na 0.75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1])&lt;br /&gt;
	# wytwarzamy tablicę z centrami binów korzystając z granic binów&lt;br /&gt;
	# zwróconych przez py.hist w macierzy bins&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x))&lt;br /&gt;
	# obliczamy momenty rozkładu x: średnią i wariancję (tak naprawdę to jej pierwiastek czyli standardowe odchylenie)&lt;br /&gt;
	# obliczamy wartości w normalnym rozkładzie gęstości prawdopodobieństwa&lt;br /&gt;
	# o średniej np.mean(x) i standardowym odchyleniu np.std(x) dla wartości bincenters&lt;br /&gt;
 &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
	# do histogramu dorysowujemy linię &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Normplot ===&lt;br /&gt;
Jest to wykres wartości w próbie, wzg. prawdopodobieństwa uzyskania takiej wartości w rozkładzie normalnym. Wykres ten jest szczególnym przypadkiem kwantylowego wykresu prawdopodobieństwa [http://en.wikipedia.org/wiki/Q-Q_plot]. Konstruuje się go następująco: &lt;br /&gt;
*Na osi pionowej odkładamy uporządkowane zaobserwowane wartości &amp;lt;math&amp;gt;x_1 \le x_2 \le \dots \le x_n &amp;lt;/math&amp;gt;. Estymują one położenie kwantyli w populacji.&lt;br /&gt;
*Na osi poziomej odkładamy położenia kwantyli w rozkładzie normalnym. Obliczamy je: &amp;lt;math&amp;gt;F^{-1}\left(\frac{i-r_{pop}}{n+n_{pop}} \right)&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F^{-1}&amp;lt;/math&amp;gt; jest funkcją odwrotną do dystrybuanty rozkładu teoretycznego (w tym szczególnym przypadku normalnego) &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; jest numerem obserwacji a &amp;lt;math&amp;gt;r_{pop}, n_{pop}&amp;lt;/math&amp;gt; są czynnikami (&amp;lt;math&amp;gt;\le 0.5 &amp;lt;/math&amp;gt;) zapewniającymi, że argument funkcji odwrotnej do dystrybuanty nie przyjmuje wartości 0 ani 1. &lt;br /&gt;
Jeśli dane ''x'' podlegają rozkładowi normalnemu to ich położenia kwantyli powinny być zgodne z położeniami kwantyli w rozkładzie normalnym, zatem wykres powinien przedstawiać linię prostą. Odstępstwa od prostej świadczą o odstępstwie od rozkładu normalnego.&lt;br /&gt;
W pythonie możemy ten typ wykresu zaimplementować np. tak (współczynniki zaczerpnięte z [http://www.itl.nist.gov/div898/handbook/eda/section3/normprpl.htm]):&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test Shapiro-Wilka ===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;W,p = st.shapiro(x)&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja ta zwraca wartość statystyki ''W'' i prawdopodobieństwo ''p''  zaobserwowania takiej lub bardziej ekstremalnej wartości statystyki ''W'' dla danych podlegających rozkładowi normalnemu. Jeśli ''p'' ma wysoką wartość (większą niż przyjęta &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;) to nie możemy odrzucić hipotezy, że dane podlegają  rozkładowi normalnemu. Test Shapiro-Wilka nie jest wrażliwy na parametry rozkładu, z którego pochodzą dane (dane mogą pochodzić z rozkładu o dowolnej średniej i dowolnym odchyleniu standardowym).&lt;br /&gt;
&lt;br /&gt;
=== Test Kołmogorowa-Smirnowa ===&lt;br /&gt;
Jest on oparty  na badaniu maksymalnej różnicy pomiędzy dystrybuantą empiryczną (z próby) a teoretyczną dystrybuantą rozkładu. Dla testowania normalności próby powinniśmy wywołać &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)) #sposób zalecany&lt;br /&gt;
#lub &lt;br /&gt;
D , p = st.kstest((x-np.mean(x))/np.std(x,ddof=1), 'norm') #sposób niezalecany, ale również prawidłowy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja zwraca wartość statystyki ''D'' i prawdopodobieństwo zaobserwowania takiej bądź bardziej ekstremalnej wartości statystyki jeśli testowane dane pochodzą z tego samego rozkładu. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''UWAGA!''' Test Kołmogorowa-Smirnowa '''jest wrażliwy na parametry rozkładu''', z którego pochodzą dane. Wywołanie poniższego kodu jest błędem:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'norm') #BŁĘDNE użycie testu Kołmogorowa-Smirnowa&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Test dla innych postaci rozkładu====&lt;br /&gt;
Za pomocą testu Kołmogorowa-Smirnowa możemy zbadać również założenie o pochodzeniu danych z populacji podlegającej dowolnemu innemu rozkładowi ciągłemu. W tym celu należy podać zamiast 'norm' odpowiednią nazwę rozkładu z modułu scipy.stats oraz parametry tegoż rozkładu w odpowiedniej kolejności (należy w tym celu zajrzeć do dokumentacji). Przykład jak to należy zrobić dla rozkładu wykładniczego:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
D , p = st.kstest(x, 'expon', args=(0, 1/np.mean(x)) #test, czy dane podlegają rozkładowi wykładniczemu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład===&lt;br /&gt;
Proszę wygenerować 1000 liczb z rozkładu normalnego. Liczby te obejrzyjmy na wykresach &amp;lt;tt&amp;gt;histfit&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;normplot&amp;lt;/tt&amp;gt; i zbadamy ich normalność testem  Shapiro-Wilka i Kołmogorova-Smirnova. &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x,ddof=1)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,2,1)&lt;br /&gt;
	normplot(x)&lt;br /&gt;
	py.subplot(2,2,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x)&lt;br /&gt;
	D,p_ks = st.kstest(x, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	# wybieramy pierwsze dziesięć punktów  &lt;br /&gt;
	y=x[0:10]&lt;br /&gt;
	py.subplot(2,2,3)&lt;br /&gt;
	normplot(y)&lt;br /&gt;
	py.subplot(2,2,4)&lt;br /&gt;
	histfit(y,15)&lt;br /&gt;
	W,p_sw = st.shapiro(y)&lt;br /&gt;
	D,p_ks = st.kstest(y, 'norm', args=(np.mean(x),np.std(x,ddof=1)))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
 &lt;br /&gt;
x = st.norm.rvs(size=1000, loc=0, scale=10)&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(x)&lt;br /&gt;
# A teraz zbadajmy dane z rozkładów innych niż normalny:&lt;br /&gt;
 &lt;br /&gt;
x = st.t.rvs(df = 2, size=1000, loc=0, scale=1)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
x = st.expon.rvs(size=1000,loc=0,scale=1)&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(x)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proszę zapuścić skrypt kilka razy i zwrócić uwagę na to, jak trudno jest ocenić normalność danych przy małych próbach.&lt;br /&gt;
&lt;br /&gt;
===Przykład: transformacja Boxa-Coxa===&lt;br /&gt;
Często normalność danych można poprawić przez zastosowanie odpowiedniej transformacji. Ogólną rodzinę transformacji, które często prowadzą do normalizacji danych można zapisać tak (trasformacja Box-Cox'a [http://www.jstor.org/stable/2984418]):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
y^{(\lambda)}=\left\{\begin{matrix} \frac{y^\lambda-1} {\lambda} &amp;amp; \mbox{dla }\lambda \ne 0 \\ \ln(y) &amp;amp; \mbox{dla }\lambda = 0\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W module scipy.stats mamy tę transformację zaimplementowaną jako &amp;lt;tt&amp;gt;boxcox()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jej działanie na następującym przykładzie:&lt;br /&gt;
&lt;br /&gt;
Proszę pobrać i zapisać w pliku tekstowym następujące &lt;br /&gt;
[[Media:Samochody.txt| dane]]. Zawierają one 8 kolumn charakterystyk samochodów:&lt;br /&gt;
*zużycie paliwa&lt;br /&gt;
*cylindry&lt;br /&gt;
*pojemność skokowa&lt;br /&gt;
*moc w koniach mechanicznych&lt;br /&gt;
*masa&lt;br /&gt;
*przyspieszenie&lt;br /&gt;
*rocznik&lt;br /&gt;
*pochodzenie&lt;br /&gt;
&lt;br /&gt;
Proszę narysować histfit i normplot  oraz policzyć testy Shapiro-Wilka i Kolmogorowa-Smirnowa dla masy pojazdów, a następnie zastosować do niej transformację Boxa-Coxa i zbadać normalność przetransformowanych danych.&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
	x_ord = sorted(list(x))&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = float(i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
	&lt;br /&gt;
def histfit(x,N_bins):  &lt;br /&gt;
	''' funkcja rysuje histogram i na jego tle dorysowuje wykres &lt;br /&gt;
	funkcji gęstości prawdopodobieństwa rozkładu normalnego &lt;br /&gt;
	o średniej i wariancji estymowanych z x &lt;br /&gt;
	Funkcja wymaga zaimportowania modułów pylab as py i scipy.stats as st'''  &lt;br /&gt;
	n, bins, patches = py.hist(x, N_bins, normed=True, facecolor='green', alpha=0.75)&lt;br /&gt;
	bincenters = 0.5*(bins[1:]+bins[:-1]) &lt;br /&gt;
	y = st.norm.pdf( bincenters, loc = np.mean(x), scale = np.std(x)) &lt;br /&gt;
	l = py.plot(bincenters, y, 'r--', linewidth=1)&lt;br /&gt;
def porownania(x):&lt;br /&gt;
	py.subplot(2,1,1)&lt;br /&gt;
	normplot(x);&lt;br /&gt;
	py.subplot(2,1,2)&lt;br /&gt;
	histfit(x,15)&lt;br /&gt;
	W,p_sw = st.shapiro(x);&lt;br /&gt;
	D,p_ks = st.kstest(x,'norm',args=(np.mean(x),np.std(x) ))&lt;br /&gt;
	title = 'SW: %(sw).2f KS: %(ks).2f'%{'sw':p_sw, 'ks':p_ks}&lt;br /&gt;
	py.title(title)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
dane = np.loadtxt('Samochody.txt')&lt;br /&gt;
# Badamy przyspieszenia&lt;br /&gt;
w = dane[:,5]&lt;br /&gt;
py.figure(1)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
# badamy masy&lt;br /&gt;
w = dane[:,4]&lt;br /&gt;
py.figure(3)&lt;br /&gt;
porownania(w)&lt;br /&gt;
# A teraz stosujemy transformację Box-Coxa&lt;br /&gt;
wt,lam = st.boxcox(w)&lt;br /&gt;
py.figure(4)&lt;br /&gt;
porownania(wt)&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pierwszym przypadku - asymetrię rozkładu przyspieszeń udało się transformacją B-C poprawić, ale w drugim przypadku, masa, asymetrię dało się skorygować (widać to na histfit) ale nie da się poprawić ''ciężkich ogonów'' - widać to zarówno na normplocie jak i na wynikach testów.&lt;br /&gt;
Ogólnie: zanim zaczniemy analizować dane dobrze jest je pooglądać na różnych wykresach i chwilę ''pomyśleć''.&lt;br /&gt;
&lt;br /&gt;
==Przykład (zastosowanie różnych testów do tych samych danych): karma==&lt;br /&gt;
Badamy dwie nowe karmy A i B. Mamy dwie grupy po 12 zwierząt. Uzyskane przyrosty masy są następujące:&lt;br /&gt;
&lt;br /&gt;
A: 31 34 29 26 32 35 38 34 31 29 32 31&lt;br /&gt;
&lt;br /&gt;
B: 26 24 28 29 30 29 31 29 32 26 28 32&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czy któraś z karm daje istotnie większe przyrosty masy?&lt;br /&gt;
&lt;br /&gt;
Poniżej rozwiążemy to zadanie stopniowo różnymi metodami. Kolejne kawałki kodu można dopisywać do tego samego pliku.&lt;br /&gt;
&lt;br /&gt;
ROZWIĄZANIE:&lt;br /&gt;
Przyjmujemy poziom istotności, na którym przeprowadzamy testy &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Badamy rozkłady danych:===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=[ 31, 34, 29, 26, 32, 35, 38, 34, 31, 29, 32, 31];&lt;br /&gt;
B=[ 26, 24, 28, 29, 30, 29, 31, 29, 32, 26, 28, 32];&lt;br /&gt;
W, p_A = st.shapiro(A)&lt;br /&gt;
print('Dla grupy A:', p_A)&lt;br /&gt;
W, p_B = st.shapiro(B)&lt;br /&gt;
print('Dla grupy B:', p_B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla obu grup test Shapiro-Wilka nie daje nam podstaw do odrzucenia założenia o normalności rozkładów.&lt;br /&gt;
&lt;br /&gt;
===Test parametryczny===&lt;br /&gt;
Nie odrzuciliśmy hipotezy o normalnym rozkładzie danych zatem możemy zastosować  [[WnioskowanieStatystyczne/Test_t | test ''t'' ]] dla różnicy średnich.&lt;br /&gt;
&lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: średni przyrost masy w grupie A &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; średni przyrost masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
t, p = st.ttest_ind(A,B)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Otrzymujemy ''p'' = 0.01.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;p &amp;lt; \alpha &amp;lt;/math&amp;gt;,  zatem na przyjętym poziomie istotności odrzucamy hipotezę zerową i stwierdzamy, że grupa A ma inną średnią niż grupa B.&lt;br /&gt;
&lt;br /&gt;
===Test nieparametryczny ===&lt;br /&gt;
Nie zakładajac postaci  rozkładu danych mozemy zastosować test [[WnioskowanieStatystyczne/Test_Wilcoxona| ze statystykami opartymi na rangach]]. &lt;br /&gt;
Formułujemy hipotezy:&lt;br /&gt;
* &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A &amp;lt;math&amp;gt;=&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
* &amp;lt;math&amp;gt;H_1&amp;lt;/math&amp;gt;: mediana przyrostu masy w grupie A&amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; mediana przyrostu masy w grupie B&lt;br /&gt;
Przeprowadzamy test:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
U, p = st.mannwhitneyu(A, B)&lt;br /&gt;
p_dwustronne = 2*p&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
W pythonie zaimplementowana jest wersja jednostronna tego testu. Aby otrzymać prawdopodobieństwo ''p'' dla testu dwustronnego musimy pomnożyć je przez 2.&lt;br /&gt;
&lt;br /&gt;
===Testy bootstrapowe===&lt;br /&gt;
Teraz to samo sprawdzimy za pomocą testu repróbkowanego.&lt;br /&gt;
Przyda nam się tu funkcja do pobierania losowej próbki z powtórzeniami z danych:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor o dłougości N z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W testech repróbkowanych statystykę możemy wybrać dość dowolnie, ale jak pokażemy poniżej nie każda jest równie dobra.&lt;br /&gt;
Zgodnie z hipotezą zerową próbka A i  B pochodza z tej samej populacji.&lt;br /&gt;
Nasza najlepsza wiedza o owej populacji to połączone próbki A i B:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
POP=np.concatenate((A, B))&lt;br /&gt;
&lt;br /&gt;
N=len(POP)&lt;br /&gt;
NA=len(A)&lt;br /&gt;
NB=len(B)&lt;br /&gt;
# Zasymulujemy N_rep razy wyciagniecie z POP prob o rozmiarach NA i NB i&lt;br /&gt;
# zobaczymy jak czesto zdarzają się wartości statystyki  sie roznica srednich taka jak w oryginalnym&lt;br /&gt;
# pomiarze lub jeszcze wieksza. &lt;br /&gt;
N_rep=10000&lt;br /&gt;
# oryginalna roznica srednich i median:&lt;br /&gt;
mi_0 = np.abs(np.mean(A) - np.mean(B))&lt;br /&gt;
T_0  = np.abs(np.mean(A) - np.mean(B))/np.std(POP)&lt;br /&gt;
me_0 = np.abs(np.median(A) - np.median(B))&lt;br /&gt;
&lt;br /&gt;
mi = np.zeros(N_rep)&lt;br /&gt;
T  = np.zeros(N_rep)&lt;br /&gt;
me = np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	AA = randsample(POP,NA)&lt;br /&gt;
	BB = randsample(POP,NB)&lt;br /&gt;
	R_POP = np.concatenate((AA,BB))&lt;br /&gt;
	mi[i] = np.abs(np.mean(AA)-np.mean(BB)) # abs bo test dwustronny&lt;br /&gt;
	T[i]  = np.abs(np.mean(AA)-np.mean(BB))/np.std(R_POP)&lt;br /&gt;
	me[i] = np.abs(np.median(AA)-np.median(BB))&lt;br /&gt;
&lt;br /&gt;
p_mi = np.sum(mi&amp;gt;=mi_0)/N_rep&lt;br /&gt;
p_T  = np.sum( T&amp;gt;=T_0 )/N_rep&lt;br /&gt;
p_me = np.sum(me&amp;gt;=me_0)/N_rep&lt;br /&gt;
&lt;br /&gt;
print('testy repróbkowane: ')&lt;br /&gt;
print('rożnica średnich: ', p_mi)&lt;br /&gt;
print('pseudo T: ', p_T)&lt;br /&gt;
print('różnica median: ', p_me)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Widzimy, że dla testu ze statystyką różnicy średnich i  pseudo T dostajemy podobne wyniki, z tym, że pseudo T jest nieco silniejszy. Test ze statystyką różnicy średnich jest na tyle słaby, że nie pozwala na odrzucenie hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
===Wnioskowanie w oparciu o przedziały ufności ===&lt;br /&gt;
Wnioskowanie o równości średnich dwóch grup można też przerowadzić w oparciu o przedziały ufności. W naszym przykładzie przedziały można skonstruować zarówno parametrycznie jak i nieparametrycznie.&lt;br /&gt;
==== Wersja parametryczna ====&lt;br /&gt;
Konstruujemy 95% przedział ufności wokół oryginalnej różnicy średnich.&lt;br /&gt;
Dla dwóch grup wariancję różnicy średnich znajdujemy sumując wariancje śrenich estymowane dla każdej z grup:&lt;br /&gt;
:&amp;lt;math&amp;gt; &lt;br /&gt;
\mathrm{var}_{\Delta} = \frac{1}{N_1}\mathrm{var}(x_1) + \frac{1}{N_2} \mathrm{var}(x_2)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
ilość stopni swobody:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 df = N_1+N_2-2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
co prowadzi do estymatora&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
s^2_\Delta = \frac{N_1s_1^2 + N_2s_2^2}{N_1+N_2-2} \cdot \frac{N_1+N_2}{N_1N_2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
f = NA+NB-2;&lt;br /&gt;
v_A = np.var(A)&lt;br /&gt;
v_B = np.var(B)&lt;br /&gt;
sig = np.sqrt( ((NA*v_A +NB*v_B))/f * (NA + NB)/(NA*NB) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy w wyniku &amp;lt;tt&amp;gt;przedział ufności dla różnicy średnich przy założeniu normalności 0.77 5.56&amp;lt;/tt&amp;gt;. Oznacza to, że w 95% analogicznych badań powinniśmy otrzymać różnicę średnich zawartą w tym przedziale. Przedził ten nie zawiera wartości 0, zatem na przyjętym poziomie istotności średnie grupy A i B są różne.&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# POP zawiera świat zgodny z H0&lt;br /&gt;
roznica_oryginalna = np.mean(A) - np.mean(B)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	gA = randsample(POP, NA)&lt;br /&gt;
	gB = randsample(POP, NB)&lt;br /&gt;
	r[i] = np.mean(gA) - np.mean(gB)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
# print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d+roznica_oryginalna, 'g':ci_g+roznica_oryginalna})&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wynik:&lt;br /&gt;
&amp;lt;tt&amp;gt;przedział ufności: -2.50 2.50&lt;br /&gt;
oryginalna różnica średnich: 3.17&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Przedział ufności 95% na różnicę skonstruowany zgodnie z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; nie zawiera oryginalnej różnicy średnich, &lt;br /&gt;
zatem różnica 3.17 w świecie zgodnym z &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; zdarza się nie częściej niż w 5% przypadków. Wniosek: średnie grup A i B są różne  na przyjętym poziomie ufności.&lt;br /&gt;
&lt;br /&gt;
== Zadanie: Przeżywalność myszy ==&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. Myszy traktowane specjalnie przeżyły &amp;lt;br&amp;gt;&lt;br /&gt;
94, 38, 23, 197, 99, 16, 141 dni&amp;lt;br&amp;gt;&lt;br /&gt;
a myszy traktowane standardowo:&amp;lt;br&amp;gt;&lt;br /&gt;
52, 10, 40, 104, 51, 27, 146, 30, 46 dni&amp;lt;br&amp;gt;&lt;br /&gt;
Średnia różnica wynosi 30,63 dni dłużej dla myszy traktowanych po nowemu.&lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie poprawia przeżywalność.&lt;br /&gt;
Zadanie proszę rozwiązać wszystkimi możliwymi sposobami, analogicznie do powyższego przykładu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Odp'': &lt;br /&gt;
:przedział ufności: [&amp;amp;minus;51,64 52,89]&lt;br /&gt;
:oryginalna różnica średnich: 30,63&lt;br /&gt;
:przedział ufności dla różnicy średnich przy założeniu normalności [&amp;amp;minus;27,99  89,26]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
'''Przedział ufności dla różnicy dwóch średnich&lt;br /&gt;
&lt;br /&gt;
Mamy 7 myszy, którym podano środek, który miał poprawić ich przeżywalność &lt;br /&gt;
po operacji oraz 9 myszy kontrolnych, którym owego środka nie podano. &lt;br /&gt;
Myszy traktowane specjalnie przeżyły&lt;br /&gt;
94 38 23 197 99 16 141 dni&lt;br /&gt;
a myszy traktowane standardowo:&lt;br /&gt;
52 10 40 104 51 27 146 30 46 dni&lt;br /&gt;
Średnia różnica wynosi 30.63 dni dłużej dla myszy traktowanych po nowemu. &lt;br /&gt;
Pytanie, na które chcielibyśmy znać odpowiedź to: Czy nowy środek faktycznie &lt;br /&gt;
poprawia przeżywalność.&lt;br /&gt;
&lt;br /&gt;
Skonstruujmy przedział ufności 95% dla średniej różnicy w przeżywalności.&lt;br /&gt;
&lt;br /&gt;
Uwaga: przy tym problemie każdą z grup traktujemy jako reprezentantów bardzo &lt;br /&gt;
dużych populacji. '''&lt;br /&gt;
def randsample(x,ile):&lt;br /&gt;
	ind = st.randint.rvs(0,len(x),size = ile)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
m_sp = np.array([94, 38, 23, 197, 99, 16, 141])&lt;br /&gt;
N_sp = len(m_sp)&lt;br /&gt;
m_st = np.array([52, 10, 40, 104, 51, 27, 146, 30, 46])&lt;br /&gt;
N_st = len(m_st)&lt;br /&gt;
alfa = 0.05&lt;br /&gt;
# zgodnie z hipotezą zerową (H0) nie ma różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# symulacja&lt;br /&gt;
# tworzymy świat zgodny z H0&lt;br /&gt;
m = np.concatenate((m_sp,m_st))&lt;br /&gt;
&lt;br /&gt;
roznica_oryginalna = np.mean(m_sp) - np.mean(m_st)&lt;br /&gt;
&lt;br /&gt;
N_rep = 10000&lt;br /&gt;
r = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	g1 = randsample(m, N_sp)&lt;br /&gt;
	g2 = randsample(m, N_st)&lt;br /&gt;
	r[i] = np.mean(g1) - np.mean(g2)&lt;br /&gt;
ci_d = st.scoreatpercentile(r, per = alfa/2*100)&lt;br /&gt;
ci_g = st.scoreatpercentile(r, per = (1-alfa/2)*100)&lt;br /&gt;
print('przedział ufności: %(d).2f %(g).2f'%{'m':np.mean(r),'d':ci_d, 'g':ci_g})&lt;br /&gt;
print('oryginalna różnica średnich: %(ro).2f'%{'ro':roznica_oryginalna})&lt;br /&gt;
# przedział ufności na różnicę skonstruowany zgodnie z H0 zawiera oryginalną różnicę średnich, &lt;br /&gt;
# zatem różnica taka jest na przyjętym poziomie ufności możliwa &lt;br /&gt;
# do zaobserwowania w przypadku braku różnicy między grupami&lt;br /&gt;
&lt;br /&gt;
# zakładając normalność&lt;br /&gt;
f = N_sp+N_st-2;&lt;br /&gt;
v_1 = np.var(m_sp)&lt;br /&gt;
v_2 = np.var(m_st)&lt;br /&gt;
sig = np.sqrt( ((N_sp*v_1 +N_st*v_2))/f * (N_sp + N_st)/float(N_sp*N_st) )&lt;br /&gt;
t_2_5 = st.t.ppf(0.025,f);&lt;br /&gt;
t_97_5 = st.t.ppf(0.975,f);&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':sig*t_2_5+ roznica_oryginalna,'g':sig*t_97_5+roznica_oryginalna})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print('przedział ufności dla różnicy średnich przy założeniu normalności %(d).2f %(g).2f'%{'d':s_delta*t_2_5+ roznica_oryginalna,'g':s_delta*t_97_5+roznica_oryginalna})&lt;br /&gt;
# skonstruowany wokoł oryginalnej różnicy średnich przedział ufności zawiera 0, zatem nie możemy odrzucić możliwości,&lt;br /&gt;
# że nie ma różnicy między grupami&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Linie lotnicze==&lt;br /&gt;
Linie lotnicze, projektując nowy samolot chcą sprawdzić czy średnia waga bagażu ręcznego zabieranego przez pasażerów nie zmieniła się od czasu poprzednich badań i wynosi wciąż 12 kg. Analiza ma być przeprowadzona na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,05&amp;lt;/math&amp;gt;. Analityk pobrał próbę bagażu ręcznego 144 pasażerów i obliczył wartość średnią z próby &amp;lt;math&amp;gt;\bar x = 14,6&amp;lt;/math&amp;gt; kg i odchylenie standardowe z próby &amp;lt;math&amp;gt;s = 7,8&amp;lt;/math&amp;gt;. Przeprowadź test hipotezy, że &amp;lt;math&amp;gt;\mu = 12&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
Standardowe importy modułów&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zmienne występujące w treści przykładu&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
mu_0=12&lt;br /&gt;
a=0.05&lt;br /&gt;
N=144&lt;br /&gt;
x=14.6&lt;br /&gt;
s=7.8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test dotyczy średniej wiec obliczamy odchylenie standardowe średniej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wyjaśnienie |title= Obliczamy wartość statystyki:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odchylenie standardowe estymowaliśmy z próby. Wartości powyższej statystyki podlegają zatem rozkładowi  t. Obliczamy wartości krytyczne odpowiadające poziomowi istotności a. Test jest dwustronny mamy wiec dwie wartości krytyczne: jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo,  a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Możemy też obliczyć prawdopodobieństwo zaobserwowania wartości ''t'' takiej jak w naszym zadaniu lub bardziej ekstremalnej:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
p =  (st.t.cdf(-np.abs(t),N-1)) + (1-st.t.cdf(np.abs(t), N-1))  # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wartości t: %(p).4f'%{'p':p})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wyniki te możemy zilustrować:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt; &lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot((t,), (0,), 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiedź: Wyliczone ''t'' leży poza obszarem akceptacji hipotezy zerowej, zatem odrzucamy hipotezę zerową i akceptujemy alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Agencja nieruchomości==&lt;br /&gt;
Agencja nieruchomości w Japonii podała, że ceny gruntu w centrum Tokio wzrosły o 49% w ciągu ostatniego roku. Inwestor chcąc przetestować te dane, znajduje próbę 18 nieruchomości w centrum Tokio, dla których zna cenę obecna i sprzed roku. Zakłada, że ceny podlegają rozkładowi normalnemu. Dla każdej nieruchomości oblicza procentowy wzrost wartości a następnie znajduje średnią i odchylenie standardowe z próby. Estymatory dla próby wynoszą &amp;lt;math&amp;gt;\bar x = 38&amp;lt;/math&amp;gt;% i &amp;lt;math&amp;gt;s = 14&amp;lt;/math&amp;gt;%. Przeprowadź test na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
mu_0=49;&lt;br /&gt;
x=38;&lt;br /&gt;
s=14;&lt;br /&gt;
N=18;&lt;br /&gt;
a=0.01;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# test dotyczy sredniej wiec jej std:&lt;br /&gt;
std_mu=s/np.sqrt(N)&lt;br /&gt;
&lt;br /&gt;
# odchylenie std obliczylismy z proby =&amp;gt; stosujemy test t&lt;br /&gt;
# obliczamy wartość statystyki &lt;br /&gt;
t=(mu_0-x)/std_mu&lt;br /&gt;
# obliczamy wartości krytyczne odpowiadające poziomowi istotności a&lt;br /&gt;
# test jest dwustronny mamy wiec dwie wartosci krytyczne &lt;br /&gt;
# jedna odcina obszar pod funkcja gęstości prawdopodobieństwa na lewo, &lt;br /&gt;
# a druga na prawo od siebie. Pole każdego z tych obszarów wynosi a/2&lt;br /&gt;
  &lt;br /&gt;
t_kryt_lewy = st.t.ppf(a/2,N-1)&lt;br /&gt;
t_kryt_prawy = st.t.ppf( 1-a/2, N-1)&lt;br /&gt;
&lt;br /&gt;
print('obliczona wartość statystyki t: ', t)&lt;br /&gt;
print('wartości krytyczne t: %(tl).2f %(tp).2f '%{'tl':t_kryt_lewy, 'tp':t_kryt_prawy})&lt;br /&gt;
&lt;br /&gt;
# Możemy też obliczyć prawdopodobieństwo zaobserwowania wrtości t takiej jak w naszym zadaniu &lt;br /&gt;
# lub bardziej ekstremalnej:&lt;br /&gt;
p = (1-st.t.cdf(t, N-1)) + (st.t.cdf(-t,N-1)) # sumujemy po obu ogonach  bo test jest dwustronny&lt;br /&gt;
		&lt;br /&gt;
print('Prawdopodobieństwo zaobserwowania bardziej ekstremalnych wrtości t: %(p).3f'%{'p':p})&lt;br /&gt;
# Wyniki te możemy zilustrować&lt;br /&gt;
os_t = np.arange(-5, 5, 0.1)&lt;br /&gt;
py.plot(os_t, st.t.pdf(os_t,N-1)) #rysujemy funkcję gęstości prawdopodobieństwa t o N-1 st. swobody&lt;br /&gt;
&lt;br /&gt;
#cieniujemy lewy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(-5, t_kryt_lewy, 0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
#cieniujemy prawy obszary pod funkcją gęstości prawdopodobieństwa odpowiadający obliczonemu p&lt;br /&gt;
os_t2 = np.arange(t_kryt_prawy, 5,  0.1)&lt;br /&gt;
py.fill_between(os_t2,st.t.pdf(os_t2,N-1)) &lt;br /&gt;
&lt;br /&gt;
# zaznaczamy obliczoną wartość statystyki:&lt;br /&gt;
py.plot(t, 0, 'ro')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 'Odp: Wyliczone t lezy poza obszarem akceptacji hipotezy zerowej,&lt;br /&gt;
# zatej odrzucamy hipoteze zerowa i akceptujemy alternatywna.'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. Odrzucamy &amp;lt;math&amp;gt;H_0:&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mu_0 = 49&amp;lt;/math&amp;gt;, na poziomie istotności 0,01.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Zabiegi bio-inżynieryjne==&lt;br /&gt;
Załóżmy, że krowy są bardziej wartościowe od byków. Bio-inżynier twierdzi, że przy pomocy pewnych zabiegów jest w stanie spowodować zwiększenie szansy na urodzenie się krowy powyżej 50%. W jego eksperymencie na 10 urodzonych zwierząt 9 było krowami, a tylko 1 bykiem. Czy powinnniśmy wierzyć temu bio-inżynierowi? Jakia jest szansa na uzyskanie takiego, bądź bardziej ekstremalnego wyniku przy założeniu, że procedura stosowana przez naszego inżyniera nia ma żadnych efektów? W tym problemie dla odmiany założymy, że w normalnych warunkach 100 spośród 206 cieląt to krowy.&lt;br /&gt;
Zadanie rozwiązać metodą parametryczną i przez repróbkowanie. [[WnioskowanieStatystyczne/_Testowanie_hipotez#Przykład:_mutacje_muszek_owocowych|Wskazówka]]&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
# sposób pierwszy:&lt;br /&gt;
# zmienna urodzenie byka/krowy podlega rozkladowi dwumianowemu &lt;br /&gt;
p = 100.0/206&lt;br /&gt;
N = 10&lt;br /&gt;
k = 9&lt;br /&gt;
p_bino = 1-st.binom.cdf(k-1,N,p) #prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach &lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach: %(p).4f'%{'p':p_bino})&lt;br /&gt;
# W jego mwetodzie chyba cos jest&lt;br /&gt;
&lt;br /&gt;
# sposob drugi: repróbkowanie&lt;br /&gt;
# model swiata z ktorego pochodza byki(0)/krowy(1):&lt;br /&gt;
w = np.concatenate((np.ones(100), np.zeros(106)))&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
wynik = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wynik[i] = np.sum(randsample(w,10))&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(wynik&amp;gt;=k))/N_rep&lt;br /&gt;
print('Prawdopodobieństwo wylosowania 9 lub 10 krów w 10 probach estymowane z symulacji: %(p).4f'%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Odp'':  ''p'' = 0,008. Odrzucamy ''H''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; o braku efektów.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Porównanie lekarstwa i placebo==&lt;br /&gt;
Badamy skuteczność leku na raka. Mamy grupę 12 chorych: 6 osobom podajemy lek &amp;amp;mdash; poprawa wystąpiła u 5 osób, pozostałym sześciu osobom podajemy placebo &amp;amp;mdash; poprawa wystąpiła u 2 osób. Czy te wyniki upoważniają do stwierdzenia, że lek istotnie zwiększa szansę poprawy? Test przeprowadzić na poziomie istotności 5%.&lt;br /&gt;
&lt;br /&gt;
Wskazówka: jako statystykę przyjąć różnicę w ilości popraw między grupą z lekiem a grupą z placebo. Interesuje nas prawdopodobieństwo zaobserwowania takiej (3) bądź większej różnicy. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Formułujemy hipotezy &lt;br /&gt;
# H0: lek nie daje poprawy &lt;br /&gt;
# H1: lek daje poprawę&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# zgodnie z H0 obie próby pochodzą ze świata:&lt;br /&gt;
# pierwszy sposób: repróbkowanie&lt;br /&gt;
w = np.concatenate((np.ones(7), np.zeros(5))) # jedynki -&amp;gt; wystąpiła poprawa&lt;br /&gt;
&lt;br /&gt;
n_l = 5 # ilosc popraw w grupie leku&lt;br /&gt;
n_p = 2 #ilosc popraw w grupie placebo&lt;br /&gt;
# jako statystykę testową przyjmiemy różnicę w ilości popraw miedzy grupami&lt;br /&gt;
# w tym problemie istotne jest zwiększenie ilości popraw wiec stosujemy test&lt;br /&gt;
# jednostronny&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
&lt;br /&gt;
st_0= n_l - n_p&lt;br /&gt;
st_rep=np.zeros(N_rep)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    n_l_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    n_p_rep   = np.sum(randsample(w,6))&lt;br /&gt;
    st_rep[i] = n_l_rep - n_p_rep # wartość statystyki w i-tym repróbkowaniu&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p_rep = float(np.sum(st_rep &amp;gt;= st_0))/N_rep&lt;br /&gt;
print('''Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: %(p).4f'''%{'p':p_rep})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drugi sposób:&lt;br /&gt;
# zmienna uzyskanie poprawy podlega rozkładowi dwumianowemu &lt;br /&gt;
p = 7.0/12&lt;br /&gt;
N = 6&lt;br /&gt;
k1 = 5&lt;br /&gt;
k2 = 2&lt;br /&gt;
p_param = 0&lt;br /&gt;
for d in range(N-st_0+1):  # w tej pętli sumujemy prawdopodobieństwa zdarzeń  sprzyjających zaobserwowaniu różnicy co najmniej st_0 popraw &lt;br /&gt;
	p_bino1 = 1-st.binom.cdf(st_0 - 1 +d, N, p)  # prawdopodobieństwo uzyskania poprawy w co najmniej st_0 +d próbach&lt;br /&gt;
	p_bino2 = st.binom.pmf(d,N,p)   # prawdopodobieństwo uzyskania poprawy w d próbach&lt;br /&gt;
	p_param += p_bino1 * p_bino2 # prawdopodobieństwo zaobserwowania jednocześnie obu powyższych sytuacji&lt;br /&gt;
&lt;br /&gt;
print('Prawdopodobieństwo estymowane parametrycznie: %(p).4f'%{'p':p_param})&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Odp: Prawdopodobieństwo wylosowania takiej samej bądź większej różnicy w ilości popraw estymowane z symulacji: 0,0702&lt;br /&gt;
Prawdopodobieństwo estymowane parametrycznie: 0,0699. Wniosek: nie mamy podstaw do odrzucenia hipotezy zerowej.&lt;br /&gt;
&lt;br /&gt;
==Zadanie: Pomiar masy cząstki elementarnej==&lt;br /&gt;
W pomiarach wstępnych zbadano masę spoczynkową pewnej cząstki elementarnej. Otrzymano następujące wyniki [MeV/c²]:&lt;br /&gt;
&lt;br /&gt;
139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74, 139.38, 139.54,&lt;br /&gt;
139.38, 139.46, 140.09, 139.77, 139.52, 139.47, 139.89, 138.95, 139.99, 139.64,&lt;br /&gt;
139.37, 139.49, 139.15, 139.77, 140.10, 139.48, 139.84, 139.44, 140.13&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być naładowany pion.&lt;br /&gt;
&lt;br /&gt;
Zbadaj na poziomie istotności 1%, czy cząstką tą mógł być neutralny pion.&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
dane = np.array([139.20, 139.34, 140.22, 139.56, 139.42, 139.64, 139.22, 139.74,&lt;br /&gt;
                 139.38, 139.54, 139.38, 139.46, 140.09, 139.77, 139.52, 139.47,&lt;br /&gt;
                 139.89, 138.95, 139.99, 139.64, 139.37, 139.49, 139.15, 139.77,&lt;br /&gt;
                 140.10, 139.48, 139.84, 139.44, 140.13])&lt;br /&gt;
&lt;br /&gt;
Pi_plus_min = 139.57 # masa pionów naładowanych Pi+ i Pi-&lt;br /&gt;
Pi_neutral = 134.98  # masa pionu neutralnego Pi0&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o wartości oczekiwanej Pi_plus_min&lt;br /&gt;
t1, p1 = st.ttest_1samp(dane,Pi_plus_min)&lt;br /&gt;
print(&amp;quot;Poziom p dla hipotezy, że był do pion naładowany&amp;quot;,p1)&lt;br /&gt;
if p1&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&lt;br /&gt;
# test t hipotezy H0, że dane pochodzą z rozkładu normalnego o średniej Pi_neutral&lt;br /&gt;
t2, p2 = st.ttest_1samp(dane,Pi_neutral)&lt;br /&gt;
print(&amp;quot;\nPoziom p dla hipotezy, że był do pion neutralny&amp;quot;,p2)&lt;br /&gt;
if p2&amp;gt;=alfa: print(&amp;quot;Nie możemy odrzucić tej hipotezy na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
else: print(&amp;quot;Możemy odrzucić tę hipotezę na poziomie istotności {}%&amp;quot;.format(100*alfa))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Przykład: Średnie grup sparowanych: Lek przeciwdepresyjny==&lt;br /&gt;
Poniższa tabela prezentuje wyniki 9 pacjentów wykonujących pewien test diagnostyczny przed podaniem leku i po podaniu leku. &lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class='wikitable'&lt;br /&gt;
!przed	&lt;br /&gt;
!po&lt;br /&gt;
|-&lt;br /&gt;
|1,83	&lt;br /&gt;
|0,878&lt;br /&gt;
|-&lt;br /&gt;
|0,50	&lt;br /&gt;
|0,647&lt;br /&gt;
|-&lt;br /&gt;
|1,62	&lt;br /&gt;
|0,598&lt;br /&gt;
|-&lt;br /&gt;
|2,48	&lt;br /&gt;
|2,05&lt;br /&gt;
|-&lt;br /&gt;
|1,68	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|1,88	&lt;br /&gt;
|1,29&lt;br /&gt;
|-&lt;br /&gt;
|1,55	&lt;br /&gt;
|1,06&lt;br /&gt;
|-&lt;br /&gt;
|3,06	&lt;br /&gt;
|3,14&lt;br /&gt;
|-&lt;br /&gt;
|1,3	&lt;br /&gt;
|1,29&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PRZED = [1.83, 0.5, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.3]&lt;br /&gt;
PO = [0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29]&lt;br /&gt;
&lt;br /&gt;
Skonstruować test, który pozwoli stwierdzić czy lek jest skuteczny. Porównać różne wersje testu:&lt;br /&gt;
* bootstrapową (losowanie z powtórzeniami), &lt;br /&gt;
* permutacyjną, &lt;br /&gt;
* test parametryczny &lt;br /&gt;
* test nieparametryczny. &lt;br /&gt;
&lt;br /&gt;
Jakie założenia przyjmujemy przy każdej z wersji testu?&lt;br /&gt;
&lt;br /&gt;
===Rozwiązanie===&lt;br /&gt;
W tym zadaniu mamy dwie grupy ''przed'' i ''po'' ale oprócz tego istnieje ścisły porządek w parach, bez sensu jest porównywanie ''przed'' od jednego pacjenta z ''po'' drugiego pacjenta. Musimy stosować testy, które biorą ten porządek pod uwagę (testy pairwise).&lt;br /&gt;
&lt;br /&gt;
Jako miarę tego czy lek jest skuteczny przyjmiemy różnicę (''po'' - ''przed'').  Każda z zaobserwowanych różnic to zmienna losowa. Ich średnia to nasza STATYSTYKA. Będziemy wierzyli, że lek działa jeśli ta różnica jest istotnie mniejsza od zera. Mamy stąd hipotezy:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_0: \bar r \geq 0&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;H_1: \bar r &amp;lt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja bootstrapowa====&lt;br /&gt;
&lt;br /&gt;
Założenie, które czynimy w wersji bootstrapowej testu jest następujące:&lt;br /&gt;
Zaobserwowana grupa pacjentów jest reprezentatywna, tzn. istnieje duża populacja pacjentów spośród której moglibyśmy pobrać wiele innych grup podobnych pod względem interesujących nas parametrów do grupy zaobserwowanej w tym konkretnym eksperymencie. Konsekwencją tego założenia jest to, że jeśli w naszej grupie mamy już pacjenta z wynikami: [1.83,	0.878], to szansa na wylosowanie kolejnego pacjenta o takich wynikach się nie zmienia i nadal wynosi 1/9. Prowadzi to do implementacji zawierającej losowanie z powtórzeniami.&lt;br /&gt;
&lt;br /&gt;
Losowość występuje tu w dwóch miejscach:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; losujemy pacjentów z powtórzeniami - zakładamy, że badana grupa jest reprezentatywna dla bardzo dużej populacji.&lt;br /&gt;
&amp;lt;li&amp;gt; dla każdego z wybranych pacjentów losujemy jego wynik ''przed'' oraz wynik ''po'' z wyników, które uzyskał w rzeczywistości --- to jest zgodne z hipotezą zerową.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Dla każdego losowania obliczamy wartość statystyki w tym losowania uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich losowań tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' (średnia różnica) przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. &lt;br /&gt;
         Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
&lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
	&lt;br /&gt;
	r = np.max(x) - np.min(x)&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
&lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny)&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83,	0.878],&lt;br /&gt;
[0.50,	0.647],&lt;br /&gt;
[1.62,	0.598],&lt;br /&gt;
[2.48,	2.05],&lt;br /&gt;
[1.68,	1.06],&lt;br /&gt;
[1.88,	1.29],&lt;br /&gt;
[1.55,	1.06],&lt;br /&gt;
[3.06,	3.14],&lt;br /&gt;
[1.30,	1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr})&lt;br /&gt;
&lt;br /&gt;
N = len(r)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
r_boot = np.zeros(N_rep)&lt;br /&gt;
przed = np.zeros(N)&lt;br /&gt;
po = np.zeros(N)&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    ix=randsample(np.arange(0,N,1),N) # wybieramy pacjentów z powtórzeniami&lt;br /&gt;
    B=np.array(A[ix,:])&lt;br /&gt;
    for j in range(N):   # mieszamy losowo przypisując wyniki do grupy przed i po&lt;br /&gt;
                         # zakładając, że pacjent może uzyskać dwukrotnie taki sam wynik&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            przed[j]=B[j,0]&lt;br /&gt;
        else:&lt;br /&gt;
            przed[j]=B[j,1]&lt;br /&gt;
        s = np.random.rand()&lt;br /&gt;
        if s &amp;gt; 0.5:&lt;br /&gt;
            po[j]=B[j,1]&lt;br /&gt;
        else:&lt;br /&gt;
            po[j]=B[j,0]&lt;br /&gt;
    rr=po-przed&lt;br /&gt;
    r_boot[i] = np.mean(rr)&lt;br /&gt;
&lt;br /&gt;
hist_z_markerem(r_boot,30,mr)&lt;br /&gt;
p_h0 = np.sum( r_boot &amp;lt;=  mr)/N_rep&lt;br /&gt;
s_boot = u'dla repróbkowanego testu jednostronnego: %(p_h0).5f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_boot)&lt;br /&gt;
py.title(s_boot)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja permutacyjna====&lt;br /&gt;
&lt;br /&gt;
W tym teście zakładamy, że grupa pacjentów jest unikalna, więc w procedurze wytwarzania empirycznego rozkładu statystyki  korzystamy z danych wszystkich pacjentów w każdej iteracji. &lt;br /&gt;
&lt;br /&gt;
Zgodnie z hipotezą zerową pomiary ''przed'' i ''po'' są równoważne można je zatem zamieniać. Wykonamy wszystkie możliwe zamiany ''przed'' i ''po''. Możliwych zamian jest &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;.  Skorzystamy z faktu, że bity w reprezentacji binarnej liczb całkowitych od 0 do &amp;lt;math&amp;gt;2^{N-1}&amp;lt;/math&amp;gt; zawierają wszystkie możliwe permutacje ciągów zer i jedynek o długości ''N''. Wartości 1 zamienimy na logiczne True a wartości 0 na False. Zinterpretujemy True jako zamianę  i False jako brak zamiany. &lt;br /&gt;
&lt;br /&gt;
Dla każdej permutacji obliczamy wartość statystyki uśredniając  różnice indywidualne.&lt;br /&gt;
Wartości statystyki otrzymane dla wszystkich permutacji tworzą jej empiryczny rozkład, przy założeniu, że hipoteza zerowa jest prawdziwa. Jako estymator prawdopodobieństwa zaobserwowania oryginalnej wartości statystyki ''mr'' przy prawdziwej hipotezie zerowej przyjmujemy frakcję rozkładu empirycznego, w której wartości statystyki były nie większe niż ''mr''. Wynik ilustrujemy histogramem rozkładu empirycznego z zaznaczoną ową frakcją. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def dec2bin(n, l):&lt;br /&gt;
    '''konwertuje dziesiętną liczbę całkowitą na tablicę &lt;br /&gt;
    przedstawiającą reprezentację binarną tej liczby&lt;br /&gt;
    n liczba do konwersji&lt;br /&gt;
    l długość reprezentacji binarnej &lt;br /&gt;
    zwracana jest binarna reprezentacja liczby &lt;br /&gt;
    skonwertowana do tablicy logicznej (0-&amp;gt;False, 1-&amp;gt; True)&lt;br /&gt;
    '''&lt;br /&gt;
    b = np.zeros(l, dtype = bool)&lt;br /&gt;
    if n &amp;lt; 0:  raise ValueError(&amp;quot;must be a positive integer&amp;quot;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        b[l-i] = bool( n % 2 ) &lt;br /&gt;
        n = n &amp;gt;&amp;gt; 1&lt;br /&gt;
        i += 1&lt;br /&gt;
    return b&lt;br /&gt;
 &lt;br /&gt;
def hist_z_markerem(x, N_bins, marker):&lt;br /&gt;
	'''Rysuje histogram wartości w tablicy x, używając N_bins binów. &lt;br /&gt;
	Na lewo od wartości wskazanej przez marker dorysowywany jest prostokąt'''&lt;br /&gt;
 &lt;br /&gt;
	r = np.max(x) - np.min(x)	&lt;br /&gt;
	szer_binu = r/N_bins&lt;br /&gt;
 &lt;br /&gt;
	#konstruujemy biny&lt;br /&gt;
        # robimy biny od markera co szerokość binu aż do x minimalnego&lt;br /&gt;
	biny_na_lewo = np.arange( marker, np.min(x), -szer_binu)&lt;br /&gt;
        # odwracamy kolejność tej sekwencji żeby była rosnąca&lt;br /&gt;
	biny_na_lewo = biny_na_lewo[-1::-1] &lt;br /&gt;
         # robimy biny od markera co szerokość binu aż do x maksymalnego&lt;br /&gt;
	biny_na_prawo = np.arange(marker,np.max(x), szer_binu)&lt;br /&gt;
        # sklejamy oba zakresy binów&lt;br /&gt;
	biny = np.concatenate((biny_na_lewo, biny_na_prawo))&lt;br /&gt;
	(n,xx,patch) = py.hist(x,bins = biny )&lt;br /&gt;
	py.fill([np.min(xx), np.min(xx), marker, marker] , [0, np.max(n), np.max(n), 0] ,'r' ,alpha = 0.2)&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
 &lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
mr = np.mean(r)  # średnia z tych różnic to wartość statystyki zaobserwowana dla oryginalnych danych&lt;br /&gt;
print( 'średnia różnica: %(mr).2f'%{'mr':mr} )&lt;br /&gt;
 &lt;br /&gt;
N = len(r)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
N_perm = 2**N&lt;br /&gt;
r_perm = np.zeros(N_perm)&lt;br /&gt;
for i in range(2**N):&lt;br /&gt;
	B = np.array(A)   # B zawiera kopię tablicy A&lt;br /&gt;
	zamiana = dec2bin(i,N) # w których wierszach dokonać zamiany?&lt;br /&gt;
	# print( i,': ', zamiana )&lt;br /&gt;
	# wiersze tablicy B wskazane przez True w wektorze indeksów ind zamieniamy wartości  'przed' z wartościami 'po'&lt;br /&gt;
	B[zamiana, 0] = A[zamiana, 1] &lt;br /&gt;
	B[zamiana, 1] = A[zamiana, 0]&lt;br /&gt;
	rr = B[:,1] - B[:,0] # Obliczam wartości zmiennych losowych dla tej zamiany&lt;br /&gt;
	r_perm[i] = np.mean(rr) # Obliczmy wartość statystyki dla tej zamiany&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
p_h0 = np.sum( r_perm &amp;lt;=  mr)/N_perm&lt;br /&gt;
s_perm = u'dla permutacyjnego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_h0}&lt;br /&gt;
print( s_perm)&lt;br /&gt;
hist_z_markerem(r_perm,30,mr)&lt;br /&gt;
py.title(s_perm)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja parametryczna====&lt;br /&gt;
&lt;br /&gt;
Jeśli badane różnice ''przed'' i ''po'' podlegają rozkładowi normalnemu to do testowania czy średnia wartość różnicy jest równa 0 można zastosować test ''t'' dla prób zależnych &amp;lt;tt&amp;gt;st.ttest_rel()&amp;lt;/tt&amp;gt;. Aby się upewnić, że możemy zastosować ten test badamy normalność różnic przy pomocy &amp;lt;tt&amp;gt;normplot()&amp;lt;/tt&amp;gt; oraz testu Shapiro-Wilka &amp;lt;tt&amp;gt;st.shapiro()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
def normplot(x):&lt;br /&gt;
	'''normplot: x dane do testowania'''&lt;br /&gt;
 &lt;br /&gt;
	x_ord = sorted(x)&lt;br /&gt;
	N = len(x)&lt;br /&gt;
	y = np.zeros(N)&lt;br /&gt;
	y[0]=st.norm.ppf(1- 0.5**(1.0/N) )&lt;br /&gt;
	y[N-1] = st.norm.ppf(0.5**(1.0/N) )&lt;br /&gt;
	for i in range(1,N-1):&lt;br /&gt;
		arg = (i-0.3175)/(N+0.365)&lt;br /&gt;
		y[i] = st.norm.ppf(arg)&lt;br /&gt;
	py.plot(y,x_ord,'.')&lt;br /&gt;
 &lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
&lt;br /&gt;
r = A[:,1] - A[:,0] # od drugiej kolumny odejmuję pierwszą&lt;br /&gt;
&lt;br /&gt;
normplot(r)&lt;br /&gt;
py.title(&amp;quot;Wyniki testów na normalność różnic\n Shapiro-Wilka:  W=%.3f, p=%.3f&amp;quot;%st.shapiro(r)&lt;br /&gt;
        +&amp;quot;\nKołmogorowa-Smirnowa: D=%.3f, p=%.3f&amp;quot;%st.kstest(r, 'norm', args=(np.mean(r),np.std(r,ddof=1))))&lt;br /&gt;
t, p = st.ttest_rel(A[:,1],A[:,0])&lt;br /&gt;
p_t = p/2 # aby test był jednostronny&lt;br /&gt;
s_t = u'dla parametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_t}&lt;br /&gt;
print(s_t)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Wersja nieparametryczna====&lt;br /&gt;
&lt;br /&gt;
W ogólności, nie zakładając normalności różnic można by przeprowadzić test Wilcoxona. W aktualnej implementacji tego testu w scipy.stats jest on dla naszych danych niedokładny, gdyż mamy małą liczebność grupy, a implementacja stosuje przybliżenia asymptotyczne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A=np.array([[1.83, 0.878], [0.50, 0.647], [1.62, 0.598], [2.48, 2.05], [1.68, 1.06], [1.88, 1.29], [1.55, 1.06], [3.06, 3.14], [1.30, 1.29]])&lt;br /&gt;
z, p = st.wilcoxon(A[:,1],A[:,0] )&lt;br /&gt;
p_w = p/2 # aby test był jednostronny&lt;br /&gt;
s_w = u'dla nieparametrycznego testu jednostronnego: %(p_h0).3f'%{'p_h0': p_w}&lt;br /&gt;
print( s_w)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Podsumowanie====&lt;br /&gt;
 średnia różnica: -0.43&lt;br /&gt;
 dla repróbkowanego testu jednostronnego: 0.0013&lt;br /&gt;
 dla permutacyjnego testu jednostronnego: 0.014&lt;br /&gt;
 Wynik testu Shapiro-Wilka na normalność różnic &lt;br /&gt;
 	 statystyka W: 0.921 &lt;br /&gt;
 	 prawdopodobieństwo takiej wartości statystyki dla rozkładu normalnego: 0.404&lt;br /&gt;
 dla parametrycznego testu jednostronnego: 0.008&lt;br /&gt;
 dla nieparametrycznego testu jednostronnego: 0.019&lt;br /&gt;
&lt;br /&gt;
Wszystkie testy wskazują prawdopodobieństwo zaobserwowania odpowiadających im statystyk poniżej przyjętego poziomu istotności &amp;lt;math&amp;gt;\alpha = 0.05&amp;lt;/math&amp;gt;. Zatem hipotezę zerową należy odrzucić i przyjąć hipotezę alternatywną.&lt;br /&gt;
&lt;br /&gt;
==Zadania==&lt;br /&gt;
&lt;br /&gt;
===Zanieczyszczenie środowiska===&lt;br /&gt;
Agencja ochrony środowiska ustaliła limit na koncentrację zanieczyszczeń emitowanych przez fabryki. Załóżmy, że dopuszczalny poziom zanieczyszczeń wynosi 55 cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. Kontrola przeprowadza 100 pomiarów o różnej porze dnia i roku w promieniu dwóch km od pewnej fabryki. Średnia z próby wyniosła 60 cz/m a odchylenie standardowe &amp;lt;math&amp;gt;s = 20&amp;lt;/math&amp;gt; cz/m. Czy dane te są wystarczające by na poziomie istotności &amp;lt;math&amp;gt;\alpha = 0,01&amp;lt;/math&amp;gt; uznać, że fabryka łamie prawo?&lt;br /&gt;
&lt;br /&gt;
Fabryka łamie prawo jeśli emituje zanieczyszczenia na poziomie wyższym niż dopuszczalny więc należy przeprowadzić test jednostronny (w tym przypadku prawostronny). Czy moglibyśmy odrzucić &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; na tym samym poziomie stosując test dwustronny?&lt;br /&gt;
Jest ważne aby w zależności od problemu wybrać odpowiedni test: jedno- lub dwustronny.&lt;br /&gt;
 &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
 &lt;br /&gt;
x_c = 55 #cząstek na milion (cz/m) w promieniu dwóch kilometrów od fabryki. &lt;br /&gt;
#Kontrola przeprowadza &lt;br /&gt;
N = 100 # pomiarów o różnej porze dnia i roku w promieniu dwóch km. od pewnej fabryki. &lt;br /&gt;
#średnia z próby wyniosła &lt;br /&gt;
x_s = 60 # cz/m &lt;br /&gt;
# a odchylenie standardowe &lt;br /&gt;
s = 20 # cz/m. &lt;br /&gt;
# Czy dane te są wystarczające by uznać, że fabryka łamie prawo ?&lt;br /&gt;
alpha = 0.01&lt;br /&gt;
 &lt;br /&gt;
# H0: mu &amp;lt;=x_c&lt;br /&gt;
# H1: mu &amp;gt; x_c&lt;br /&gt;
# wystarczy sprawdzić jakie jest p dla największego dopuszczalnego stężenia &lt;br /&gt;
# mu = x_c zaobserwowania wartości średniej większej bądź równej zaobserwowanej x_s. &lt;br /&gt;
# Odchylenie std. dane jest dla populacji i trzeba je przeliczyć na odchylenie std. średniej.&lt;br /&gt;
p = 1 - st.t.cdf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############################&lt;br /&gt;
#inne (tożsame) rozwiązania:&lt;br /&gt;
&lt;br /&gt;
##wykorzystaniem &amp;quot;Survival function&amp;quot; zamiast dystrybuanty&lt;br /&gt;
p = st.t.sf(x_s, df=N-1, loc = x_c, scale = s/np.sqrt(N) )&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
##obliczając statystykę t&lt;br /&gt;
t=(x_s-x_c)/(s/N**0.5)&lt;br /&gt;
p = 1-st.t.cdf(t,df=N-1)&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,007&amp;lt;\alpha&amp;lt;/math&amp;gt;, zatem możemy odrzucić hipotezę &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt; (głoszącą, że fabryka nie łamie prawa) na poziomie &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;  = 0,01.&lt;br /&gt;
&lt;br /&gt;
===Wzrost mocy turbin===&lt;br /&gt;
Turbina hydroelektryczna generuje moc średnią 25,2 kW. Po unowocześnieniu maszyny chcemy przetestować czy średnia moc generowana zmieniła się (na + lub &amp;amp;minus;). Przeprowadzono 115 pomiarów, które dały średnią 26,1 kW i odch. std. 3,2 kW. Przeprowadzić test statystyczny na poziomie istotności 1%, zinterpretować wynik. Wnioskowanie przeprowadzić także w oparciu oprzedział ufności.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#-*- coding:utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N=115&lt;br /&gt;
m=25.2	#hipoteza zerowa mówi, że tyle wynosi moc&lt;br /&gt;
sr=26.1	#w pomiarach uzyskaliśmy taką średnią moc&lt;br /&gt;
s=3.2	#przy takim odchyleniu standardowym&lt;br /&gt;
&lt;br /&gt;
alfa=0.01&lt;br /&gt;
&lt;br /&gt;
#obliczenie poziomu p&lt;br /&gt;
t=(m-sr)/(s/N**0.5)&lt;br /&gt;
p = st.t.cdf(t,df=N-1) * 2 #mnozymy przez 2, bo chcemy testu dwustronnego&lt;br /&gt;
print(&amp;quot;poziom p&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
#alternatywnie - obliczenie przedziału ufności&lt;br /&gt;
lo,hi = st.t.ppf([alfa/2, 1-alfa/2],df=N-1,loc=sr,scale=s/N**0.5)&lt;br /&gt;
print(&amp;quot;przedzial ufnosci [%.3g,%.3g]&amp;quot;%(lo,hi))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Odp.: &amp;lt;math&amp;gt;p=0,\!003&amp;lt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
&lt;br /&gt;
Odp. (alt.): &amp;lt;math&amp;gt;\mu = 25,\!2 \not\in[25,\!3; 26,\!9]&amp;lt;/math&amp;gt;, zatem odrzucamy H0.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sonda===&lt;br /&gt;
Władze miasta chciałyby wiedzieć, czy przyznać koncesję operatorowi sieci kablowej. W tym celu zleciły nam przeprowadzenie sondy wśród mieszkańców. Zapytaliśmy o zdanie 50 przypadkowo wybranych osób. 30 osób powiedziało &amp;amp;bdquo;tak&amp;amp;rdquo; a 20 &amp;amp;bdquo;nie&amp;amp;rdquo;. Na ile pewnie otrzymane wyniki wskazują, że mieszkańcy chcą tej kablówki?&lt;br /&gt;
&lt;br /&gt;
Celem naszych badań jest uniknięcie błędu polegającego na tym, że powiemy iż większość mieszkańców chce kablówki podczas gdy tak na prawdę to nie chce. &lt;br /&gt;
&lt;br /&gt;
Wskazówka: Granicznym przypadkiem popełnienia tego błędu jest proporcja 1:1 zwolenników i przeciwników kablówki. Jeśli przeciwników kablówki byłoby jeszcze więcej to uzyskanie naszych wyników byłoby jeszcze mniej prawdopodobne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
N=50&lt;br /&gt;
odp_na_tak=30&lt;br /&gt;
odp_na_nie=20&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#(propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy)&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
P=0.5 #prawdopodobieństwo, że respondent udzieli odpowiedzi na 'tak'&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne wymaga użycia rozkładu dwumianowego:&lt;br /&gt;
p = 1 - st.binom.cdf(29,50,P) #od 1 odejmujemy sumaryczne prawdopodobieństwo wszystkich przypadków udzielenia mniej niż 30 odpowiedzi na tak (czyli do 29 włącznie)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
Nrand=100000&lt;br /&gt;
R=0 #rezultat, czyli liczba przypadków, w których przynajmniej 30 osób odpowiedziało tak&lt;br /&gt;
for i in range(Nrand):&lt;br /&gt;
	odpowiedzi = (rnd.random(N)&amp;lt;P) #losujemy odpowiedzi od N osób&lt;br /&gt;
	if odpowiedzi.sum() &amp;gt;=odp_na_tak: #jeśli zdażyło się co najmniej 30 odpowiedzi na tak, to dodajemy jeden do liczby takich przypadków&lt;br /&gt;
		R+=1&lt;br /&gt;
	&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wybory prezydenckie===&lt;br /&gt;
W ankiecie uzyskaliśmy 840 głosów popierających kandydaturę A i 660 kandydaturę B. Jaka jest szansa, że tak naprawdę kandydat B ma  poparcie 50% lub większe? Jakie jest prawdopodobieństwo pojawienia sie zaobserwowanej próbki lub próbki wskazującej na jeszcze większe poparcie dla kandydata A, jeśli w rzeczywistości poparcie kandydata A byłoby  50% lub mniej.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy.random as rnd&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
A = 840&lt;br /&gt;
B = 660&lt;br /&gt;
N = A+B&lt;br /&gt;
&lt;br /&gt;
#przypadek graniczny, który daje najwyższe prawdopodobieństwo uzyskania fałszywego wyniku na 'tak',&lt;br /&gt;
#to mieszkańcy niezdecydowani, czyli propocja 1:1&lt;br /&gt;
#propocja przechylona w kierunki 'nie', da nam niższe oszacowanie&lt;br /&gt;
#a propocja przechylona w kierunku 'tak' nie oznaczałaby fałszywego wyniku sondy&lt;br /&gt;
#zatem hipoteza zerowa brzmi, że nasz wynik pochodzi z populacji niezdecydowanej:&lt;br /&gt;
p_sukces = 0.5&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie parametryczne&lt;br /&gt;
p = 1 - st.binom.cdf(A-1,N,p_sukces)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (parametrycznie)&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#rozwiązanie przez symulację:&lt;br /&gt;
&lt;br /&gt;
#wiemy już, że musimy oszacować bardzo niskie prawdopodobieństwo, zatem symulacja musi być długa&lt;br /&gt;
#(gdybyśmy nie wiedzieli, to łatwo byśmy zauważyli, że krótka symulacja nie daje w ogóle zdarzeń sprzyjających dając wynik p=0)&lt;br /&gt;
#niestety trzeba pokusić się o optymalizację (mimo to kod będzie się wykonywał kilkadziesiąt sekund do kilku minut):&lt;br /&gt;
#chemy mieć przynajmniej 10^7 sond, ale każda sonda to 1500 odpowiedzi, zatem łącznie musimy wylosować 1.5*10^10 liczb&lt;br /&gt;
#losowanie w pętli 10^7 razy kolejnych sond po 1500 odpowiedzi zajmie bardzo bardzo dużo czasu&lt;br /&gt;
#tablica 1.5*10^10 odpowiedzi wygenerowana jednym poleceniem nie zmieści się w pamięci&lt;br /&gt;
#musimy skorzystać z rozwiązania pośredniego&lt;br /&gt;
#będziemy losować 100 razy po 1.5*10^8 odpowiedzi i dodamy wyniki&lt;br /&gt;
&lt;br /&gt;
Nrand_1=100    # 10^2&lt;br /&gt;
Nrand_2=100000 # 10^5&lt;br /&gt;
N = A+B        # 1.5*10^3&lt;br /&gt;
&lt;br /&gt;
Nrand_total = Nrand_1*Nrand_2&lt;br /&gt;
&lt;br /&gt;
R=0 #liczba sond, w których kandydat A uzyskał poparcie 840 lub większe&lt;br /&gt;
#po każdym przebiegu pętli będziemy dodawać liczbę takich przypadków (jeśli wystąpiły w danej iteracji)&lt;br /&gt;
&lt;br /&gt;
for i in range(Nrand_1):&lt;br /&gt;
	#w każdej iteracji losujemy odpowiedzi od N osób w Nrand_2 sondach&lt;br /&gt;
	#iteracji będzie w sumie Nrand_1, co da nam łącznie N osób w Nrand_total sondach&lt;br /&gt;
	#jako, że zakładamy równe prawdopodobieństwo, to może możemy wylosować tablicę zawierającą tylko 0 i 1&lt;br /&gt;
	#gdzie 1 oznacza sukces (głos na kandydata A), a 0 porażkę&lt;br /&gt;
	#korzystając z funksji randint, która zwraca (pseudo)losowe liczby całkowite z zakresu [a,b)&lt;br /&gt;
	a,b = 0,2 &lt;br /&gt;
	odpowiedzi = rnd.randint(a,b,size=(N,Nrand_2)) &lt;br /&gt;
	S = np.sum(odpowiedzi,axis=0)  #wyniki kolejnych sond (sumujemy sukcesy w wierszach)&lt;br /&gt;
&lt;br /&gt;
	R+=np.sum(S&amp;gt;=A) #dodajemy liczbę sond, w których kandydat A uzyskał poparcie 840 lub większe (w danej iteracji pętli)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;poziom p (z symulacji)&amp;quot;,R/Nrand_total) #na koniec dzielimy przez liczbę wszystkich sond w symulacji&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy stosunek do marihuany się zmienił?===&lt;br /&gt;
Rozważmy dwie ankiety przeprowadzone w USA, pytano 1500 respondentów o stosunek do legalizacji marihuany. Pierwszą ankietę przeprowadzono w 1980, wówczas za legalizacją opowiadało się 52% a drugą w 1985 i za legalizacją było 46%. Czy wyniki tych dwóch ankiet są istotnie różne?&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
za1 = int(0.52*1500)&lt;br /&gt;
za2 = int(0.46*1500)&lt;br /&gt;
N = 1500&lt;br /&gt;
&lt;br /&gt;
# H0: stosunek się nie zmienił zatem p_za było w obu anlietach takie samo:&lt;br /&gt;
p_za = (0.52+0.46)/2&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowoania wyników ankiet o takiej bądź większej &lt;br /&gt;
# różnicy głosów za, jeśli obie są zgodne z H0 ?&lt;br /&gt;
D = za1 - za2&lt;br /&gt;
&lt;br /&gt;
#musimy zsumować wszystkie możliwości, w których wystąpiła taka różnica lub większa&lt;br /&gt;
#zrobimy to w pętli&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k in range(N-D+1):&lt;br /&gt;
	p1 = st.binom.pmf(k,N,p_za) # prawdopodobieństwo uzyskania dokładnie k głosów za&lt;br /&gt;
	&lt;br /&gt;
	# sumujemy prawdopodobieństwa uzyskania liczby głosów różnej przynajmniej o D&lt;br /&gt;
	przypadki_o_roznicy_przynajmniej_D = np.arange(k+D,N+1)&lt;br /&gt;
	p2 = np.sum(st.binom.pmf(przypadki_o_roznicy_przynajmniej_D,N,p_za))&lt;br /&gt;
	#co jest równoważne:&lt;br /&gt;
	#p2 = 1-st.binom.cdf(k+D-1,N,p_za)&lt;br /&gt;
	&lt;br /&gt;
	#sumujemy dla kolejnych k&lt;br /&gt;
	p_binom += p1*p2 # mnożymy prawdopodobieństwa ponieważ są wyniki obu sond są niezależne&lt;br /&gt;
	&lt;br /&gt;
p=2*p_binom #mnożymy przez 2, ponieważ robimy test dwustronny (różnica mogła wystąpić również w drugą stronę)&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,p)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne (tym razem skorzystamy z randsample)&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N*(1-p_za)), np.ones(N*p_za)))&lt;br /&gt;
&lt;br /&gt;
a = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	w1 = np.sum(randsample(H0,N))&lt;br /&gt;
	w2 = np.sum(randsample(H0,N))&lt;br /&gt;
	a[i] = np.abs(w1-w2)&lt;br /&gt;
p = np.sum(a&amp;gt;=D)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zawały serca i cholesterol===&lt;br /&gt;
Badano grupę 605 osób. 135 osób z tej grupy miało wysoki poziom cholesterolu a 470 niski. W grupie z wysokim poziomem cholesterolu odnotowano 10 przypadków zawału serca a w grupie z niskim poziomem 21, w czasie 16 lat obserwacji. Nasze pytanie brzmi: Czy możemy uznać, że wysoki poziom cholesterolu zwiększa ryzyko zawału serca?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie parametryczne&lt;br /&gt;
wysoki = 135&lt;br /&gt;
niski = 470&lt;br /&gt;
N = 605&lt;br /&gt;
wysoki_zawaly = 10&lt;br /&gt;
niski_zawaly = 21&lt;br /&gt;
N_zaw = wysoki_zawaly + niski_zawaly &lt;br /&gt;
&lt;br /&gt;
# H0: proporcja zawałowców w obu grupach taka sama:&lt;br /&gt;
p_zawalu = N_zaw/N&lt;br /&gt;
# H1: proporcja jest różna, test jednostronny (wysoki cholesterol ZWIĘKSZA ryzyko)&lt;br /&gt;
&lt;br /&gt;
# Jakie jest prawdopodobieństwo zaobserwowania wyników badania o takiej bądź większej &lt;br /&gt;
# różnicy proporcji zawałów, jeśli obie są zgodne z H0 ?&lt;br /&gt;
roznica = wysoki_zawaly/wysoki - niski_zawaly/niski&lt;br /&gt;
&lt;br /&gt;
p_binom = 0.0&lt;br /&gt;
for k_wys in range(wysoki+1):&lt;br /&gt;
	p_wys = st.binom.pmf(k_wys,wysoki,p_zawalu) # prawdopodobieństwo uzyskania k_wys zawałów grupie o liczebności wysoki&lt;br /&gt;
	for k_nis in range(niski+1): &lt;br /&gt;
		if k_wys/wysoki - k_nis/niski&amp;gt;=roznica: # czy liczebności k_wys i k_nis dają większą bądź równą różnice proporcji?&lt;br /&gt;
			p_nis = st.binom.pmf(k_nis,niski,p_zawalu) # prawdopodobieństwo uzyskania k_nis zawałów w grupie o niskim cholesterolu&lt;br /&gt;
			p_binom += p_wys*p_nis # zdarzenia są niezależne&lt;br /&gt;
&lt;br /&gt;
print(p_binom)&lt;br /&gt;
&lt;br /&gt;
# rozwiązanie symulacyjne&lt;br /&gt;
def randsample(x, N):&lt;br /&gt;
	'''zwraca wektor z losowo wybranymi elementami wektora x. Losowanie odbywa się z powtórzeniami''' &lt;br /&gt;
	n=len(x)&lt;br /&gt;
	ind = np.random.randint(n, size = N)&lt;br /&gt;
	y = x[ind]&lt;br /&gt;
	return y&lt;br /&gt;
&lt;br /&gt;
N_rep = 100000&lt;br /&gt;
# świat zgodny z H0:&lt;br /&gt;
H0 = np.concatenate((np.zeros(N-N_zaw), np.ones(N_zaw)))&lt;br /&gt;
&lt;br /&gt;
wyn = np.zeros(N_rep)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
	wysoki_zawaly_r = np.sum(randsample(H0,wysoki))&lt;br /&gt;
	niski_zawaly_r = np.sum(randsample(H0,niski))&lt;br /&gt;
	wyn[i] = wysoki_zawaly_r/wysoki - niski_zawaly_r/niski&lt;br /&gt;
p = np.sum(wyn&amp;gt;=roznica)/N_rep&lt;br /&gt;
print(p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Czy gęstości planet się różnią?===&lt;br /&gt;
Rozważmy pięć planet znanych w antycznym świecie. Chcemy zbadać, czy planety wewnętrzne Merkury (0,68) i Wenus (0,94) mają istotnie większe gęstości niż planety zewnętrzne Mars (0,71) Jowisz (0,24) i Saturn (0,12)?&lt;br /&gt;
&lt;br /&gt;
Wskazówki: &lt;br /&gt;
* Unikalność zestawu planet wskazuje na zastosowanie testu permutacyjnego.&lt;br /&gt;
* Moduł implementujący funkcje kombinatoryczne w pythonie to &amp;lt;tt&amp;gt;itertools &amp;lt;/tt&amp;gt;. Zawiera on funkcję &amp;lt;tt&amp;gt;permutations&amp;lt;/tt&amp;gt;. Wywołanie &amp;lt;tt&amp;gt;itertools.permutations(sekwencja[, r])&amp;lt;/tt&amp;gt; zwraca obiekt permutacji. Obiekt ten zwraca kolejne permutacje o długości r elementów w sekwencji (np. w wektorze). Przykład:&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
for kolejny in itertools.permutations(range(3), 2):&lt;br /&gt;
    print(kolejny)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import itertools as itt&lt;br /&gt;
PLANETY = np.array([0.68,0.94,0.71,0.24,0.12])&lt;br /&gt;
N=len(PLANETY)&lt;br /&gt;
&lt;br /&gt;
r=[] #używamy listy, bo nie chcemy obliczać ile będzie przypadków (aczkolwiek można to zrobić)&lt;br /&gt;
&lt;br /&gt;
for planety in itt.permutations(PLANETY):&lt;br /&gt;
	r.append(np.mean(planety[:2])-np.mean(planety[2:]))&lt;br /&gt;
&lt;br /&gt;
R=np.mean(PLANETY[:2])-np.mean(PLANETY[2:]) #prawdziwa różnica&lt;br /&gt;
&lt;br /&gt;
r=np.array(r) #porównanie z liczbą działa tylko dla tablic numpy, a nie dla list&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;p =&amp;quot;,np.sum(r&amp;gt;=R)/len(r))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Elektrownia jądrowa===&lt;br /&gt;
Przed wybudowaniem elektrowni jądrowej przeprowadzono pomiary intensywności promieniowania jonizującego w pobliżu planowanego budynku reaktora. Powtórzono te pomiary po uruchomieniu reaktora. Czy zebrane dane pozwalają stwierdzić, że poziom promieniowania istotnie wzrósł? Dane pomiarowe wczytaj z [[Media:pomiary_skazen.txt| pliku]].&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Rozwiązanie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
alfa = 0.01 # poziom istotności&lt;br /&gt;
&lt;br /&gt;
PRZED, PO = np.loadtxt('Pomiary_skazen.txt') #wczytanie danych (dwa zbiory przed uruchomieniem i po)&lt;br /&gt;
&lt;br /&gt;
t, p = st.ttest_ind(PRZED, PO) # wykorzystanie gotowej funkcji wykonującej DWUSTRONNY test t na różnicę średnich&lt;br /&gt;
                            # dla danych NIESPAROWANYCH (niezależnych)&lt;br /&gt;
                            # ttest_ind  - ind od independent &lt;br /&gt;
                            # ttest_rel  - rel od related &lt;br /&gt;
&lt;br /&gt;
p/=2 # dzielimy przez dwa ponieważ chcemy zrobić test jednostronny&lt;br /&gt;
print(&amp;quot;Poziom p&amp;quot;,p)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odp. &amp;lt;math&amp;gt;p=0,\!39&amp;gt;\alpha=0,\!01&amp;lt;/math&amp;gt;, zatem nie mamy podstaw do odrzucenia hipotezy &amp;lt;math&amp;gt;H_0&amp;lt;/math&amp;gt;, że poziom promieniowania istotnie wzrósł.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8429</id>
		<title>Wnioskowanie Statystyczne - wykład</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Wnioskowanie_Statystyczne_-_wyk%C5%82ad&amp;diff=8429"/>
		<updated>2020-06-13T22:01:44Z</updated>

		<summary type="html">&lt;p&gt;Atartas: /* zasady zaliczenia przedmiotu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
https://docs.google.com/document/d/1PHoVNlKhBkOVmkJzgvm7Tu7nF-aXlhWAEXTJbv5qqQY/edit&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Wnioskowanie statystyczne (wykład)=&lt;br /&gt;
&lt;br /&gt;
'''UWAGA: wymagane zaliczenie Technologii Informacyjnych i Komunikacyjnych z ćwiczeniami z programowania w Pythonie w wymiarze 45 godzin ćwiczeń'''&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady|Rozkłady gęstości prawdopodobieństwa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Momenty|Wariancja, mediana...]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Rozklady-przyklady|Przykładowe rozkłady]]&lt;br /&gt;
# &lt;br /&gt;
## [[WnioskowanieStatystyczne/CLT|Centralne Twierdzenie Graniczne]]&lt;br /&gt;
#  &lt;br /&gt;
## [[WnioskowanieStatystyczne/wstep|Wstęp]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Klasyczna_teoria|Teoria klasyczna]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Statystyki_i_estymatory|Statystyki i estymatory]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Weryfikacja_hipotez|Weryfikacja hipotez statystycznych]] &lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_t|Test ''t'' Studenta]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_chi2|Test &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Z_komputerem|Monte Carlo]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Testy_nieprametryczne|Testy nieparametryczne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_serii|Test serii]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Test_Wilcoxona|Test Wilcoxona-Manna-Whitneya]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Testy_permutacyjne|Testy permutacyjne]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bootstrap|Bootstrap]]&lt;br /&gt;
#&lt;br /&gt;
##  [[WnioskowanieStatystyczne/MLF|Metoda największej wiarygodności]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Regresja_liniowa|Regresja liniowa]]&lt;br /&gt;
##  [[WnioskowanieStatystyczne/Interpretacja współczynnika korelacji|Interpretacja współczynnika korelacji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Bonferroni|Problem porównań wielokrotnych  -- miejskie legendy i przepowiednie]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Analiza_wariancji|Analiza wariancji]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Twierdzenie_Bayesa|Twierdzenie Bayesa]]&lt;br /&gt;
## [[WnioskowanieStatystyczne/Prawdopodobienstwo|Prawdopodobieństwo]]&lt;br /&gt;
#&lt;br /&gt;
## [[WnioskowanieStatystyczne/Elementy_statystyki_wielowymiarowej|Elementy statystyki wielowymiarowej]]&lt;br /&gt;
#&lt;br /&gt;
## [[Sztuczne sieci neuronowe (ANN )|Sztuczne sieci neuronowe]]&lt;br /&gt;
## [[Algorytmy Genetyczne|Algorytmy Genetyczne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{color|green|'''Całość podręcznika jest udostępniona na licencji [http://creativecommons.org/licenses/by-sa/3.0/pl Creative Commons Uznanie autorstwa-Na tych samych zasadach 3.0 Polska].'''}} [[Grafika:CC-88x31.png]]&lt;br /&gt;
Autor: [http://durka.name Piotr Durka].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1yPKnOfmO3dEp0SeslNXwSfOoPzQFSanc?usp=sharing slajdy z wykładów]&lt;br /&gt;
&lt;br /&gt;
===zasady zaliczenia przedmiotu===&lt;br /&gt;
&lt;br /&gt;
Punktacja [[Wnioskowanie_Statystyczne_-_ćwiczenia | ćwiczeń]]:&lt;br /&gt;
*'''Prace domowe (25 pkt)''' sukcesywnie zadawane po ćwiczeniach&lt;br /&gt;
**zakres: zmienne losowe, przedziały ufności, testowanie hipotez&lt;br /&gt;
*'''Projekt (25 pkt)'''&lt;br /&gt;
**kod do napisania i indywidualnej obrony u prowadzącego (kod należy wysłać do 18.06.2020, a następnie umówić się indywidualnie na obronę do 19.06.2020)&lt;br /&gt;
**zakres: chi2&lt;br /&gt;
**propozycje zadań zostaną podane w trakcie semestru&lt;br /&gt;
*Obecności&lt;br /&gt;
**Obecność na ćwiczeniach jest obowiązkowa. Dopuszczalne są dwie nieusprawiedliwione nieobecności. Za każdą kolejną odejmowanych jest 5 punktów.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie ćwiczeń:&lt;br /&gt;
* Minimum 25 pkt łącznie&lt;br /&gt;
* Zaliczenie ćwiczeń jest warunkiem koniecznym dopuszczenia do egzaminu pisemnego (z wykładu).&lt;br /&gt;
* W przypadku braku uzyskania zaliczenia z ćwiczeń: '''kolokwium poprawkowe''' w sesji jesiennej.&lt;br /&gt;
&lt;br /&gt;
Zaliczenie wykładu:&lt;br /&gt;
Egzamin pisemny lub ustny — w zależności od rozwoju pandemii. &lt;br /&gt;
*Jeśli będzie egzamin pisemny, to będzie się składać z dwóch części: pytań zamkniętych jednokrotnego wyboru (analogicznie jak na egzaminie z TI) oraz pytań otwartych, na przykład:&lt;br /&gt;
** Sformułuj Centralne Twierdzenie Graniczne. &lt;br /&gt;
** Wypisz i przedyskutuj definicje prawdopodobieństwa.&lt;br /&gt;
** Wypisz założenia wersji Centralnego Twierdzenia Granicznego, którą można stosunkowo prosto udowodnić (twierdzenie Lindeberga-Levy'ego). Udowodnij lub spróbuj nakreślić szkic dowodu.&lt;br /&gt;
** Oblicz wartość oczekiwaną rozkładu równomiernego, określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2  lub  ''x''&amp;lt;0.&lt;br /&gt;
** Oblicz wariancję rozkładu równomiernego określonego na odcinku [0, 2], danego wzorami  p(''x'') =  0,5 dla &amp;lt;math&amp;gt;0\leq x\leq 2&amp;lt;/math&amp;gt; i p(''x'') =  0 dla ''x''&amp;gt;2 lub  ''x''&amp;lt;0&lt;br /&gt;
** Co to jest &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt;?&lt;br /&gt;
** Wypisz / wyprowadź wzory na wartość oczekiwaną i wariancję rozkładu Poissona.&lt;br /&gt;
** Z rozkładu dwumianowego wylicz prawdopodobieństwo, że wśród czworga dzieci będą co najmniej trzy dziewczynki — zakładając, że prawdopodobieństwa urodzenia dziecka każdej płci są równe.&lt;br /&gt;
** Testy parametryczne i nieparametryczne: wady, zalety, przykłady.&lt;br /&gt;
** Co ma wspólnego poziom istotności testu z poprawką Bonferroniego?&lt;br /&gt;
** Co to jest i jak obliczamy moc testu?&lt;br /&gt;
** Opisz w punktach (zwięźle i konkretnie) procedurę weryfikacji hipotezy o różnicy średnich dwóch grup wyników &amp;lt;math&amp;gt;\{x_{i}, i=1\dots N$\}&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\{y_{j}, j=1\dots M\}&amp;lt;/math&amp;gt; metodą repróbkowania (resampling).&lt;br /&gt;
** Wyprowadź wzór na średnią ''N'' pomiarów &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; o różnych wariancjach &amp;lt;math&amp;gt;\sigma_{i}^2&amp;lt;/math&amp;gt; z metody największej wiarygodności.&lt;br /&gt;
** Dany jest zbiór rozłącznych hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt; pokrywających całą przestrzeń zdarzeń &amp;lt;math&amp;gt;\Omega&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\sum_{i}H_{i}=\Omega&amp;lt;/math&amp;gt; oraz prawdopodobieństwa wyniku eksperymentu W w świetle każdej z hipotez &amp;lt;math&amp;gt;H_{i}&amp;lt;/math&amp;gt;, czyli &amp;lt;math&amp;gt;P(W\mid H_{i})&amp;lt;/math&amp;gt;. Korzystając z tych oznaczeń, wypisz i wyprowadź twierdzenie Bayesa, czyli wzór na prawdopodobieństwo prawdziwości hipotezy &amp;lt;math&amp;gt;H_{j}&amp;lt;/math&amp;gt; w świetle wyników eksperymentu W.&lt;br /&gt;
* Jeśli będzie egzamin ustny, to będzie obejmował tematy omawiane na wykładzie, jak np. powyższe.&lt;br /&gt;
* W obu przypadkach na ocenę końcową będą wpływać oceny z zadawanych na bieżąco prac domowych i punkty za aktywność.&lt;br /&gt;
&lt;br /&gt;
W ocenie końcowej będą brane pod uwagę aktywność na zajęciach oraz prace domowe, dostępne na platformie Kampus: [https://kampus.come.uw.edu.pl/course/view.php?id=4039]&lt;br /&gt;
&lt;br /&gt;
Ocena końcowa z przedmiotu = średnia ocen z ćwiczeń i z wykładu, pod warunkiem zaliczenia ćwiczeń '''i''' wykładu.&lt;/div&gt;</summary>
		<author><name>Atartas</name></author>
		
	</entry>
</feed>