Teil 2 führt eine statistische Schätzung durch. In der Naturwissenschaft ist es nicht möglich, alle zu untersuchenden Objekte (Natur) direkt zu untersuchen, daher ist eine Probenuntersuchung üblich.
Zu diesem Zeitpunkt besteht die statistische Schätzung darin, die Verteilung der gesamten unbekannten Population aus der erhaltenen Stichprobe (einem Teil der Population) zu schätzen. p>
![img02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261241/9644934b-ac72-2959-f1fc-9d09f0d8c031.png)
%matplotlib inline
import numpy as np
from scipy import stats
import math
import pandas as pd
from matplotlib import pyplot as plt
Laden Sie zunächst die erforderlichen Bibliotheken. Die erste Zeile ist ein magischer Befehl zum Anzeigen von matplotlib in Jupyter Notebook wie in Teil 1.
Die zweite und die folgenden Zeilen sind die diesmal verwendeten Bibliotheken. Von diesen Bibliotheken ist die Mathematikbibliothek standardmäßig in Python integriert. Andere Bibliotheken sind in Anaconda installiert.
Übrigens haben Mathe und Numpy ähnliche Funktionen, aber Mathe ist eine in Standard-Python integrierte Funktion, und Numpy ist ein Erweiterungsmodul, das komplexe numerische Berechnungen effizient macht und deren Rollen unterschiedlich sind.
Bibliothek th> | Übersicht th> | Verwendungszweck dieses Mal th> | Offizielle URL th> |
---|---|---|---|
NumPy | Numerische Berechnungsbibliothek td> | Wird für die numerische Berechnung in der statistischen Verarbeitung verwendet td> | https://www.numpy.org |
Scipy | Wissenschaftliche Berechnungsbibliothek td> | Wird zur Berechnung statistischer Schätzungen verwendet td> | https://www.scipy.org |
math | Standardbibliothek für numerische Berechnungen td> | Wird für einfache Berechnungen wie Quadratwurzeln td> verwendet | https://docs.python.org/ja/3/library/math.html |
pandas | Datenanalysebibliothek td> | Wird zum Lesen und Formatieren von Daten verwendet td> | https://pandas.pydata.org |
Matplotlib | Grafikzeichnungsbibliothek td> | Wird zur Datenvisualisierung verwendet td> | https://matplotlib.org |
Dieses Mal werden wir die Daten von Katsuo ( Katsuwonus pelamis i>) verwenden. Lesen Sie Kapitel 0 von Teil 0 und laden Sie die Messdaten der Bonito-Probendaten von der Probensuche von ChemTHEATER herunter.
Verschieben Sie nach dem Herunterladen die Messdaten und Probendaten in den Ordner, der diese Notizbuchdatei enthält. Lesen Sie anschließend nach dem Neustart von Anaconda sowohl die Messdaten als auch die Probendaten mit der Funktion read_csv von Pandas wie in Teil 1. p>
data_file = "measureddata_20190930045953.tsv" #Ändern Sie die in die Variable eingegebene Zeichenfolge in den tsv-Dateinamen Ihrer Messdaten
chem = pd.read_csv(data_file, delimiter="\t")
chem = chem.drop(["ProjectID", "ScientificName", "RegisterDate", "UpdateDate"], axis=1) #Entfernen Sie doppelte Spalten, wenn Sie später mit Samples verbinden
sample_file = "samples_20190930045950.tsv" #Ändern Sie die in die Variable eingegebene Zeichenfolge in den tsv-Dateinamen Ihrer Beispiele
sample = pd.read_csv(sample_file, delimiter="\t")
Wenn Sie eine Datei wie Python programmgesteuert lesen oder verarbeiten, sollten Sie sich angewöhnen, zu prüfen, ob die Datei wie erwartet gelesen werden kann. Wenn Sie im Fall von Jupyter Notebook nur den Variablennamen eingeben, wird der Inhalt dieser Variablen übrigens in Out angezeigt, was praktisch ist. p>
chem
MeasuredID | SampleID | ChemicalID | ChemicalName | ExperimentID | MeasuredValue | AlternativeData | Unit | Remarks | |
---|---|---|---|---|---|---|---|---|---|
0 | 1 | SAA000001 | CH0000096 | ΣPCBs | EXA000001 | 6.659795 | NaN | ng/g wet | NaN |
1 | 2 | SAA000002 | CH0000096 | ΣPCBs | EXA000001 | 9.778107 | NaN | ng/g wet | NaN |
2 | 3 | SAA000003 | CH0000096 | ΣPCBs | EXA000001 | 5.494933 | NaN | ng/g wet | NaN |
3 | 4 | SAA000004 | CH0000096 | ΣPCBs | EXA000001 | 7.354636 | NaN | ng/g wet | NaN |
4 | 5 | SAA000005 | CH0000096 | ΣPCBs | EXA000001 | 9.390950 | NaN | ng/g wet | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
74 | 75 | SAA000082 | CH0000096 | ΣPCBs | EXA000001 | 3.321208 | NaN | ng/g wet | NaN |
75 | 76 | SAA000083 | CH0000096 | ΣPCBs | EXA000001 | 3.285111 | NaN | ng/g wet | NaN |
76 | 77 | SAA000084 | CH0000096 | ΣPCBs | EXA000001 | 0.454249 | NaN | ng/g wet | NaN |
77 | 78 | SAA000085 | CH0000096 | ΣPCBs | EXA000001 | 0.100000 | <1.00E-1 | ng/g wet | NaN |
78 | 79 | SAA000086 | CH0000096 | ΣPCBs | EXA000001 | 0.702224 | NaN | ng/g wet | NaN |
79 rows × 9 columns
sample
ProjectID | SampleID | SampleType | TaxonomyID | UniqCodeType | UniqCode | SampleName | ScientificName | CommonName | CollectionYear | ... | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | PRA000001 | SAA000001 | ST008 | 8226 | es-BANK | EF00564 | NaN | Katsuwonus pelamis | Skipjack tuna | 1998 | ... |
1 | PRA000001 | SAA000002 | ST008 | 8226 | es-BANK | EF00565 | NaN | Katsuwonus pelamis | Skipjack tuna | 1998 | ... |
2 | PRA000001 | SAA000003 | ST008 | 8226 | es-BANK | EF00566 | NaN | Katsuwonus pelamis | Skipjack tuna | 1998 | ... |
3 | PRA000001 | SAA000004 | ST008 | 8226 | es-BANK | EF00567 | NaN | Katsuwonus pelamis | Skipjack tuna | 1998 | ... |
4 | PRA000001 | SAA000005 | ST008 | 8226 | es-BANK | EF00568 | NaN | Katsuwonus pelamis | Skipjack tuna | 1998 | ... |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
74 | PRA000001 | SAA000082 | ST008 | 8226 | es-BANK | EF00616 | NaN | Katsuwonus pelamis | Skipjack tuna | 1999 | ... |
75 | PRA000001 | SAA000083 | ST008 | 8226 | es-BANK | EF00617 | NaN | Katsuwonus pelamis | Skipjack tuna | 1999 | ... |
76 | PRA000001 | SAA000084 | ST008 | 8226 | es-BANK | EF00619 | NaN | Katsuwonus pelamis | Skipjack tuna | 1999 | ... |
77 | PRA000001 | SAA000085 | ST008 | 8226 | es-BANK | EF00620 | NaN | Katsuwonus pelamis | Skipjack tuna | 1999 | ... |
78 | PRA000001 | SAA000086 | ST008 | 8226 | es-BANK | EF00621 | NaN | Katsuwonus pelamis | Skipjack tuna | 1999 | ... |
79 rows × 66 columns
Nach dem Lesen der Daten besteht der nächste Schritt darin, die Daten vorzubereiten.
Zunächst werden die zweigeteilten Daten (chem und Probe) integriert und nur die erforderlichen Daten extrahiert. Dieses Mal möchten wir die Daten von Katsuos ΣPCB verwenden, daher werden nur die Daten extrahiert, deren Wert in der Spalte "ChemicalName" "ΣPCB" ist. p>
df = pd.merge(chem, sample, on="SampleID")
data = df[df["ChemicalName"] == "ΣPCBs"]
Überprüfen Sie als Nächstes, ob die Maßeinheit unterschiedlich ist. Dies liegt daran, dass es nicht möglich ist, einfach zu vergleichen und zu integrieren, wenn die Dateneinheiten wie in Teil 1 unterschiedlich sind. p>
data["Unit"].unique()
array(['ng/g wet'], dtype=object)
Sie können die eindeutige Methode
pandas verwenden, um eine Liste der in diesem Datenrahmen enthaltenen Werte anzuzeigen. Wenn Sie hier eine Liste von Werten ausgeben, die in der Spalte "Einheit" enthalten sind, sehen Sie, dass es sich nur um "ng / g nass" handelt. Diesmal ist es nicht erforderlich, die Daten nach Einheiten zu teilen. </ p>
Schließlich wird die Spalte mit nur N / A gelöscht und die Datenvorbereitung abgeschlossen. p>
data = data.dropna(how='all', axis=1)
data
MeasuredID | SampleID | ChemicalID | ChemicalName | ExperimentID | MeasuredValue | AlternativeData | Unit | ProjectID | SampleType | ... | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | SAA000001 | CH0000096 | ΣPCBs | EXA000001 | 6.659795 | NaN | ng/g wet | PRA000001 | ST008 | ... |
1 | 2 | SAA000002 | CH0000096 | ΣPCBs | EXA000001 | 9.778107 | NaN | ng/g wet | PRA000001 | ST008 | ... |
2 | 3 | SAA000003 | CH0000096 | ΣPCBs | EXA000001 | 5.494933 | NaN | ng/g wet | PRA000001 | ST008 | ... |
3 | 4 | SAA000004 | CH0000096 | ΣPCBs | EXA000001 | 7.354636 | NaN | ng/g wet | PRA000001 | ST008 | ... |
4 | 5 | SAA000005 | CH0000096 | ΣPCBs | EXA000001 | 9.390950 | NaN | ng/g wet | PRA000001 | ST008 | ... |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
74 | 75 | SAA000082 | CH0000096 | ΣPCBs | EXA000001 | 3.321208 | NaN | ng/g wet | PRA000001 | ST008 | ... |
75 | 76 | SAA000083 | CH0000096 | ΣPCBs | EXA000001 | 3.285111 | NaN | ng/g wet | PRA000001 | ST008 | ... |
76 | 77 | SAA000084 | CH0000096 | ΣPCBs | EXA000001 | 0.454249 | NaN | ng/g wet | PRA000001 | ST008 | ... |
77 | 78 | SAA000085 | CH0000096 | ΣPCBs | EXA000001 | 0.100000 | <1.00E-1 | ng/g wet | PRA000001 | ST008 | ... |
78 | 79 | SAA000086 | CH0000096 | ΣPCBs | EXA000001 | 0.702224 | NaN | ng/g wet | PRA000001 | ST008 | ... |
79 rows × 35 columns
Von den statistischen Schätzungen, die die Population aus der Stichprobe schätzen, ist die Punktschätzung die punktgenaue Schätzung des Werts. Hier wird die ΣPCB-Konzentration der Population (ganzes Individuum im Sammelgebiet) aus der Stichprobe der im Bonito nachgewiesenen ΣPCB-Konzentration geschätzt. p>
Überprüfen Sie zunächst, wie viele Jahre Daten enthalten sind, um jedes Jahr zu berechnen, und sehen Sie den Übergang der Änderung. p>
data['CollectionYear'].unique()
array([1998, 1997, 1999, 2001], dtype=int64)
Aus der obigen eindeutigen Methode wurde festgestellt, dass der Datensatz Daten für die drei Jahre 1997-1999 und 2001 enthält. Lassen Sie uns zunächst die Daten von 1997 herausnehmen. Ändern Sie zu diesem Zeitpunkt die extrahierten Daten in das Numpy-Format ndarray 1 sup>, damit zukünftige Berechnungen einfacher werden. p>
In ähnlicher Weise werden auch die Daten für 1998 und 1999 extrahiert. p>
Hier werden die unverzerrten Schätzungen von Mittelwert und Varianz berechnet. Berechnen Sie auf ähnliche Weise die unverzerrte Schätzung der Varianz. Beachten Sie, dass die var-Funktion von Numpy beide Varianzen berechnen kann und die unverzerrte Varianz mit dem Parameter ddof = 1 ausgegeben wird. Beachten Sie jedoch, dass die Stichprobenverteilung von ddof = 0 standardmäßig ausgegeben wird. Berechnen Sie in ähnlicher Weise die unvoreingenommenen Schätzungen des Mittelwerts und der Varianz für 1998 und 1999. p>
Hier fassen wir die erhaltenen repräsentativen Werte zusammen. Erstens p>
In Kapitel 5 wird im Gegensatz zu der in Kapitel 4 erhaltenen Punktschätzung die Intervallschätzung durchgeführt, um den Populationsmittelwert und die Populationsvarianz innerhalb eines statistisch konstanten Bereichs zu schätzen. p>
Überprüfen Sie zunächst die Anzahl der Daten im Datensatz jedes Jahres, bevor Sie das Intervall schätzen. Die Anzahl der Daten kann mithilfe der in Python standardmäßig implementierten len-Funktion berechnet werden. p>
Aus dem oben Gesagten ist die Gesamtzahl der Daten im Datensatz für jedes Jahr von 1997 bis 1999 bekannt. p>
Von diesen ist der Datensatz von 1997 eine große Stichprobe von $ n = 50 $, und die Datensätze von 1998 und 1999 sind $ n = \ left \ {\ begin {array} {ll}. 15 & \ left (1998 \ right) \\ 13 & \ left (1999 \ right) \ end {array} \ right. $, Eine kleine Stichprobe. Zunächst wird das Intervall des Bevölkerungsdurchschnitts aus dem Datensatz von 1997 geschätzt. In diesem Fall ist der Stichprobenmittelwert ($ \ override X $) eine Normalverteilung $ N \ left (\ mu, \ frac {s ^ 2} {, da die Populationsvarianz unbekannt ist und eine große Stichprobe ($ n> 30 $) n} \ right) $ kann angenähert werden. Wenn daher der Populationsmittelwert durch die Zuverlässigkeit ($ \ alpha $) geschätzt wird, ist das Konfidenzintervall wie in der folgenden Gleichung gezeigt. p>
$\overline X - z_\frac{\alpha}{2} \sqrt{\frac{s^2}{n}} < \mu < \overline X - z_\frac{\alpha}{2} \sqrt{\frac{s^2}{n}} $
Wenn Sie in Python stas.norm.interval () von Scipy verwenden, können Sie den Bereich von Alpha × 100% in der Normalverteilung von Mittelwert (loc) und Standardabweichung (Skala) erhalten, die auf dem Median zentriert ist. Als Nächstes schätzen wir das mittlere Populationsintervall für die Datensätze 1998 und 1999. Dies sind kleine Stichproben ($ n \ leq 30 $) mit unbekannter Populationsvarianz. In diesem Fall ist der Populationsmittelwert $ \ mu $ nicht die Normalverteilung $ N \ left (\ mu, \ frac {s ^ 2} {n} \ right) $, sondern die t-Verteilung mit Freiheitsgraden ($ n-1 $). Benutzen. Wenn daher der Populationsmittelwert durch die Zuverlässigkeit ($ \ alpha $) geschätzt wird, ist das Konfidenzintervall wie in der folgenden Gleichung gezeigt. p>
$\overline X - t_\frac{\alpha}{2}\left(n-1\right)\sqrt{\frac{s^2}{n}} < \mu < \overline X + t_\frac{\alpha}{2}\left(n-1\right)\sqrt{\frac{s^2}{n}} $
Wenn Sie in Python stats.t.interval () verwenden, wird der Bereich, in dem die t-Verteilung von Mittelwert (loc), Standardabweichung (Skala) und Freiheitsgrad (df) Alpha × 100% beträgt, auf den Medianwert zentriert. Erhältlich als. Das 95% -Konfidenzintervall bedeutet, dass der Bevölkerungsdurchschnitt mit einer Wahrscheinlichkeit von 95% innerhalb dieses Bereichs liegt. Das heißt, wenn die Zuverlässigkeit ($ \ alpha $) verringert wird, wird die Wahrscheinlichkeit verringert, dass der Bevölkerungsdurchschnitt in das Konfidenzintervall aufgenommen wird, und gleichzeitig wird das Konfidenzintervall verringert. p>
Als nächstes wird die Intervallschätzung der Populationsvarianz durchgeführt. Bei der Intervallschätzung der Populationsvarianz ($ \ sigma ^ 2 $) hat $ \ frac {\ left (n-1 \ right) s ^ 2} {\ sigma ^ 2} $ einen Freiheitsgrad $ (n-1) $. Verwenden Sie diese Option, um der Verteilung von $ \ chi ^ 2 $ von zu folgen. p>
$\chi_\frac{\alpha}{2}\left(n-1\right) \leq \frac{\left( n-1 \right)s^2}{\sigma^2} \leq \chi_{1-\frac{\alpha}{2}}\left(n-1\right)$
Zuerst der Prozentpunkt ($ \ chi_ \ frac {\ alpha} {2} \ left (n-1 \ right), \ chi_ der $ \ chi ^ 2 $ -Verteilung der Freiheit ($ n-1 $) Suchen Sie {1- \ frac {\ alpha} {2}} \ left (n-1 \ right) $). Hier beträgt die Zuverlässigkeit 0,95. Suchen Sie als Nächstes das Konfidenzintervall. Beziehen Sie sich für die Ableitung auf die folgende Formel. p>
$\frac{\left(n-1\right)s^2}{\chi_\frac{\alpha}{2}\left(n-1\right)} \leq \sigma^2 \leq \frac{\left(n-1\right)s^2}{\chi_{1-\frac{\alpha}{2}}\left(n-1\right)}$
In ähnlicher Weise wird für die Datensätze 1998 und 1999 die Intervallintervallschätzung der Varianz durchgeführt. Beachten Sie, dass im Gegensatz zur Intervallschätzung des Populationsmittelwerts die Verteilung von $ \ frac {\ left (n-1 \ right) s ^ 2} {\ sigma ^ 2} $ unabhängig von der Stichprobengröße $ \ chi ^ 2 beträgt. Folgen Sie der $ -Verteilung. p>
Lassen Sie uns nun den in Kapitel 4 und Kapitel 5 geschätzten Bevölkerungsdurchschnitt in einem Diagramm visualisieren. p>
Zunächst werden die in Kapitel 4 geschätzten Werte des Bevölkerungsmittelwerts in Zeitreihen zusammengefasst. p>
Als nächstes wird das in Kapitel 5 geschätzte Konfidenzintervall des Bevölkerungsdurchschnitts mit einer Zuverlässigkeit von 95% in Zeitreihen zusammengefasst. p>
Das 95% -Konfidenzintervall des Bevölkerungsdurchschnitts kann nicht für die Visualisierung verwendet werden, daher wird die Breite des Konfidenzintervalls berechnet. p>
Visualisieren Sie abschließend mit matplotlib. Das Vertrauensintervall wird mit einer Fehlerleiste angezeigt. Verwenden Sie die Fehlerbalkenmethode, um die Fehlerleiste mit matplotlib anzuzeigen. 1 sup> Ein Datenformat, in dem die Matrix n-ter Ordnung in Numpy gespeichert ist. p>
Recommended Posts
pcb_1997 = np.array(data[data['CollectionYear']==1997]["MeasuredValue"]) #Extrahieren Sie nur 1997 Messungen
pcb_1997
array([ 10.72603788, 9.22208078, 7.59790835, 30.95079465,
15.27462553, 14.15719633, 13.28955903, 14.87712806,
9.86650189, 18.26554514, 3.39951845, 6.58172781,
12.43564814, 6.1948639 , 6.41605666, 4.98827291,
12.36669815, 31.17955551, 8.16184346, 4.60893266,
36.85826409, 52.99841724, 39.22500351, 53.92302702,
69.4308048 , 73.97686479, 125.3887794 , 45.39974771,
54.12726127, 39.77794045, 101.2736126 , 38.06220403,
126.8301693 , 70.25308435, 31.24246301, 21.3958656 ,
41.85726522, 30.91112132, 81.12597135, 10.76755148,
24.20442213, 24.57497594, 14.84353549, 59.53687389,
52.78443082, 8.4644697 , 4.15293758, 3.31957452,
4.51832675, 6.98373973])
pcb_1998 = np.array(data[data['CollectionYear']==1998]["MeasuredValue"]) #Extrahieren Sie nur Messungen von 1998
pcb_1999 = np.array(data[data['CollectionYear']==1999]["MeasuredValue"]) #Extrahieren Sie nur Messungen von 1999
Erstens die unvoreingenommene Schätzung des Mittelwerts ($ \ hat {\ mu} $), die die Tatsache ausnutzt, dass der erwartete Wert des Stichprobenmittelwerts ($ \ override {X} $) gleich dem Populationsmittelwert ist. (Siehe Formel unten)
$$ E \left(\overline X \right) = E\left(\frac{1}{n} \sum_{i=1}^{n} \left(x_i\right)\right) = \frac{1}{n}\sum_{i=1}^{n} E\left(x_i\right) = \frac{1}{n} \times n\mu = \mu \\ \therefore \hat\mu = \overline{x} $$s_mean_1997 = np.mean(pcb_1997)
s_mean_1997
31.775384007760003
Zu diesem Zeitpunkt nimmt der erwartete Wert der Stichprobenvarianz ($ S ^ 2 $) nicht den gleichen Wert wie die Populationsvarianz ($ \ sigma ^ 2 $) an, und es ist erforderlich, stattdessen die unverzerrte Varianz ($ s ^ 2 $) zu erhalten. Beachten.
$$\hat\sigma^2 \neq S^2 = \frac{1}{n} \sum_{i=1}^{n} \left( x_i - \overline X \right) \\ \hat\sigma^2 = s^2 = \frac{1}{n-1} \sum_{i=1}^{n} \left( x_i - \overline X \right)$$
$$\mathrm{np.var}\left(x_1 \ldots x_n, \mathrm{ddof=0}\right): S^2 = \frac{1}{n} \sum_{i=1}^{n} \left( x_i - \overline X \right) \\
\mathrm{np.var}\left(x_1 \ldots x_n, \mathrm{ddof=1}\right): \hat\sigma^2 = \frac{1}{n-1} \sum_{i=1}^{n} \left( x_i - \overline X \right)$$u_var_1997 = np.var(pcb_1997, ddof=1)
u_var_1997
942.8421749786518
s_mean_1998, s_mean_1999 = np.mean(pcb_1998), np.mean(pcb_1999)
u_var_1998, u_var_1999 = np.var(pcb_1998, ddof=1), np.var(pcb_1999, ddof=1)
s_mean_1997, s_mean_1998, s_mean_1999
(31.775384007760003, 17.493267312533337, 30.583242522000003)
u_var_1997, u_var_1998, u_var_1999
(942.8421749786518, 240.2211176248311, 1386.7753819003349)
Kapitel 5 Abschnitt Schätzung und Vertrauensabschnitt
Abschnitt 5-1 Intervallschätzung des Bevölkerungsdurchschnitts
n_1997 = len(pcb_1997)
n_1997
50
n_1998, n_1999 = len(pcb_1998), len(pcb_1999)
n_1998, n_1999
(15, 13)
Daher ist zu beachten, dass die Verarbeitung der Intervallschätzung danach geringfügig anders ist. p>
Hier wird das Konfidenzintervall durch die Zuverlässigkeit berechnet ($ \ alpha = 0,95 $). p>
m_interval_1997 = stats.norm.interval(alpha=0.95, loc=s_mean_1997, scale=math.sqrt(pcb_1997.var(ddof=1)/n_1997))
m_interval_1997
(23.26434483549182, 40.28642318002819)
Hier wird das Konfidenzintervall basierend auf der Zuverlässigkeit berechnet ($ \ alpha = 0,95 $). p>
m_interval_1998 = stats.t.interval(alpha=0.95, df=n_1998-1, loc=s_mean_1998, scale=math.sqrt(pcb_1998.var(ddof=1)/n_1998))
m_interval_1999 = stats.t.interval(alpha=0.95, df=n_1999-1, loc=s_mean_1999, scale=math.sqrt(pcb_1999.var(ddof=1)/n_1999))
m_interval_1997, m_interval_1998, m_interval_1999
((23.26434483549182, 40.28642318002819),
(8.910169386248537, 26.076365238818138),
(8.079678286109523, 53.086806757890486))
stats.norm.interval(alpha=0.9, loc=s_mean_1997, scale=math.sqrt(pcb_1997.var(ddof=1)/n_1997))
(24.63269477364296, 38.91807324187704)
Abschnitt 5-2 Abschnittsschätzung der Populationsvarianz
In Python können Sie mit Scipys stats.chi2.interval () den Bereich von Alpha x 100% des Freiheitsgrades (df) ermitteln. p>
chi_025_1997, chi_975_1997 = stats.chi2.interval(alpha=0.95, df=n_1997-1)
chi_025_1997, chi_975_1997
(31.554916462667137, 70.22241356643451)
v_interval_1997 = (n_1997 - 1)*np.var(pcb_1997, ddof=1) / chi_975_1997, (n_1997 - 1)*np.var(pcb_1997, ddof=1) / chi_025_1997
v_interval_1997
(657.8991553778869, 1464.0909168183869)
chi_025_1998, chi_975_1998 = stats.chi2.interval(alpha=0.95, df=n_1998-1)
chi_025_1999, chi_975_1999 = stats.chi2.interval(alpha=0.95, df=n_1999-1)
v_interval_1998 = (n_1998 - 1)*np.var(pcb_1998, ddof=1) / chi_975_1998, (n_1998 - 1)*np.var(pcb_1998, ddof=1) / chi_025_1998
v_interval_1999 = (n_1999 - 1)*np.var(pcb_1999, ddof=1) / chi_975_1999, (n_1999 - 1)*np.var(pcb_1999, ddof=1) / chi_025_1999
v_interval_1997, v_interval_1998, v_interval_1999
((657.8991553778869, 1464.0909168183869),
(128.76076176378118, 597.4878836139195),
(713.0969734866349, 3778.8609867211235))
chi_025_1997, chi_975_1997 = stats.chi2.interval(alpha=0.9, df=n_1997-1)
(n_1997 - 1)*np.var(pcb_1997, ddof=1) / chi_975_1997, (n_1997 - 1)*np.var(pcb_1997, ddof=1) / chi_025_1997
(696.4155490924242, 1361.5929987004467)
Kapitel 6 Visualisierung der Schätzergebnisse
x_list = [1997, 1998, 1999]
y_list = [s_mean_1997, s_mean_1998, s_mean_1999]
interval_list = []
interval_list.append(m_interval_1997)
interval_list.append(m_interval_1998)
interval_list.append(m_interval_1999)
interval_list
[(23.26434483549182, 40.28642318002819),
(8.910169386248537, 26.076365238818138),
(8.079678286109523, 53.086806757890486)]
interval_list = np.array(interval_list).T[1] - y_list
x_list, y_list, interval_list
([1997, 1998, 1999],
[31.775384007760003, 17.493267312533337, 30.583242522000003],
array([ 8.51103917, 8.58309793, 22.50356424]))
Bei dieser Methode werden der X-Achsenwert (hier Jahr), der Y-Achsenwert (hier der Populationsdurchschnitt der Punktschätzung) und die Länge des Fehlerbalkens (hier die Breite des Konfidenzintervalls) angegeben. p>
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.errorbar(x=x_list, y=y_list, yerr=interval_list, fmt='o-', capsize=4, ecolor='red')
plt.xticks(x_list)
ax.set_title("Katsuwonus pelamis")
ax.set_ylabel("ΣPCBs [ng/g wet]")
plt.show()
Fußnote