Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
A Practical Introduction to Data Science 2025
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Dokmanic-courses
A Practical Introduction to Data Science 2025
Commits
9f99473e
Commit
9f99473e
authored
2 months ago
by
Fabian Kruse
Browse files
Options
Downloads
Patches
Plain Diff
add lecture08 notebook
parent
224980b5
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
lecture/lecture08/8_confidence-intervals.ipynb
+265
-0
265 additions, 0 deletions
lecture/lecture08/8_confidence-intervals.ipynb
with
265 additions
and
0 deletions
lecture/lecture08/8_confidence-intervals.ipynb
0 → 100644
+
265
−
0
View file @
9f99473e
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "3735b0ad",
"metadata": {},
"outputs": [],
"source": [
"from scipy.stats import norm\n",
"import numpy as np\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 100,
"id": "205c2aa6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Estimated proportion: 0.656\n",
"Probability that we are within 0.01 of the true estimate: 0.095\n",
"Confidence interval: [0.492, 0.821]\n"
]
}
],
"source": [
"p = 0.48\n",
"N = 32\n",
"\n",
"X = np.random.binomial(1, p, N)\n",
"\n",
"p_hat = X.mean() # Our estimate\n",
"se_hat = np.sqrt(p_hat * (1 - p_hat) / N) # The standard deviation of our estimate, aka standard error\n",
"std = X.std() # The standard deviation of the samples\n",
"\n",
"print(\"Estimated proportion: %.3f\" % p_hat)\n",
"print(\"Probability that we are within 0.01 of the true estimate: %.3f\" % (norm.cdf(0.01/se_hat) - norm.cdf(-0.01/se_hat)))\n",
"\n",
"print(\"Confidence interval: [%.3f, %.3f]\" % (p_hat - 1.96*se_hat, p_hat + 1.96*se_hat))"
]
},
{
"cell_type": "code",
"execution_count": 101,
"id": "88dc1054",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.9285"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n_mc = 10000\n",
"n_inside = 0\n",
"\n",
"for i_mc in range(n_mc):\n",
" X = np.random.binomial(1, p, N)\n",
"\n",
" p_hat = X.mean() # Our estimate\n",
" se_hat = np.sqrt(p_hat * (1 - p_hat) / N) # The standard deviation of our estimate, aka standard error\n",
"\n",
" p_is_inside = (p_hat - 1.96*se_hat <= p) & (p_hat + 1.96*se_hat >= p)\n",
" n_inside += p_is_inside\n",
" \n",
"n_inside / n_mc"
]
},
{
"cell_type": "code",
"execution_count": 107,
"id": "1e9337d0",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.9297"
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import random\n",
"\n",
"n_boots = 10000\n",
"\n",
"n_mc = 10000\n",
"n_inside = 0\n",
"\n",
"for i_mc in range(n_mc):\n",
" X = np.random.binomial(1, p, N)\n",
"\n",
" boot_means = np.reshape(random.choices(X, k=N*n_boots), (N, n_boots)).mean(axis=0)\n",
"\n",
" # search for the symmetric 95% confidence interval \n",
"\n",
" # idx_sorted_boot_means = np.argsort(boot_means)\n",
" # print(boot_means[:20])\n",
" # a = boot_means[idx_sorted_boot_means[int((0.025 * n_boots))]]\n",
" # b = boot_means[idx_sorted_boot_means[int((0.975 * n_boots))]]\n",
" a, b = np.percentile(boot_means, [2.5, 97.5]) \n",
"\n",
" # print(a, b)\n",
"\n",
" p_is_inside = (a <= p) & (b >= p)\n",
" n_inside += p_is_inside\n",
"\n",
"n_inside / n_mc"
]
},
{
"cell_type": "code",
"execution_count": 87,
"id": "23097d5b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(5000,)"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"boot_means.shape"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "087e1a25",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.10100000000000008"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pm"
]
},
{
"cell_type": "code",
"execution_count": 58,
"id": "de6a3e44",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.046\n"
]
},
{
"data": {
"text/plain": [
"(0.47, 0.53)"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"p = 0.49\n",
"N = 10000\n",
"sd_null = 0.5\n",
"p_null = 0.5\n",
"\n",
"t = np.sqrt(N) * np.abs(p_null - p) / sd_null\n",
"print(\"%5.3f\" % (1 - (norm.cdf(t) - norm.cdf(-t))))\n",
"\n",
"fig, ax = plt.subplots()\n",
"\n",
"sampdist = lambda u : 1/np.sqrt(2*np.pi*1/N*sd_null) * np.exp(-(u - p_null)**2 / (2 * 1/N*sd_null))\n",
"u_list = np.linspace(0, 1, 10000)\n",
"u_extreme_l = np.linspace(0, p_null - np.abs(p_null - p), 10000)\n",
"u_extreme_r = np.flip(1 - u_extreme_l)\n",
"\n",
"ax.plot(u_list, sampdist(u_list), 'k', linewidth=2)\n",
"for pval in [p, 1 - p, p_null]:\n",
" ax.vlines(pval, 0, sampdist(pval), 'k', linewidth=0.75)\n",
"ax.hlines(0, 0, 1, 'k')\n",
"ax.fill_between(u_extreme_l, sampdist(u_extreme_l), step=\"pre\", alpha=0.4)\n",
"ax.fill_between(u_extreme_r, sampdist(u_extreme_r), step=\"pre\", alpha=0.4)\n",
"ax.set_xlim(0.47, 0.53)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d170999f",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.12"
},
"vscode": {
"interpreter": {
"hash": "40d3a090f54c6569ab1632332b64b2c03c39dcf918b08424e98f38b5ae0af88f"
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}
%% Cell type:code id:3735b0ad tags:
```
python
from
scipy.stats
import
norm
import
numpy
as
np
import
seaborn
as
sns
import
matplotlib.pyplot
as
plt
```
%% Cell type:code id:205c2aa6 tags:
```
python
p
=
0.48
N
=
32
X
=
np
.
random
.
binomial
(
1
,
p
,
N
)
p_hat
=
X
.
mean
()
# Our estimate
se_hat
=
np
.
sqrt
(
p_hat
*
(
1
-
p_hat
)
/
N
)
# The standard deviation of our estimate, aka standard error
std
=
X
.
std
()
# The standard deviation of the samples
print
(
"
Estimated proportion: %.3f
"
%
p_hat
)
print
(
"
Probability that we are within 0.01 of the true estimate: %.3f
"
%
(
norm
.
cdf
(
0.01
/
se_hat
)
-
norm
.
cdf
(
-
0.01
/
se_hat
)))
print
(
"
Confidence interval: [%.3f, %.3f]
"
%
(
p_hat
-
1.96
*
se_hat
,
p_hat
+
1.96
*
se_hat
))
```
%% Output
Estimated proportion: 0.656
Probability that we are within 0.01 of the true estimate: 0.095
Confidence interval: [0.492, 0.821]
%% Cell type:code id:88dc1054 tags:
```
python
n_mc
=
10000
n_inside
=
0
for
i_mc
in
range
(
n_mc
):
X
=
np
.
random
.
binomial
(
1
,
p
,
N
)
p_hat
=
X
.
mean
()
# Our estimate
se_hat
=
np
.
sqrt
(
p_hat
*
(
1
-
p_hat
)
/
N
)
# The standard deviation of our estimate, aka standard error
p_is_inside
=
(
p_hat
-
1.96
*
se_hat
<=
p
)
&
(
p_hat
+
1.96
*
se_hat
>=
p
)
n_inside
+=
p_is_inside
n_inside
/
n_mc
```
%% Output
0.9285
%% Cell type:code id:1e9337d0 tags:
```
python
import
random
n_boots
=
10000
n_mc
=
10000
n_inside
=
0
for
i_mc
in
range
(
n_mc
):
X
=
np
.
random
.
binomial
(
1
,
p
,
N
)
boot_means
=
np
.
reshape
(
random
.
choices
(
X
,
k
=
N
*
n_boots
),
(
N
,
n_boots
)).
mean
(
axis
=
0
)
# search for the symmetric 95% confidence interval
# idx_sorted_boot_means = np.argsort(boot_means)
# print(boot_means[:20])
# a = boot_means[idx_sorted_boot_means[int((0.025 * n_boots))]]
# b = boot_means[idx_sorted_boot_means[int((0.975 * n_boots))]]
a
,
b
=
np
.
percentile
(
boot_means
,
[
2.5
,
97.5
])
# print(a, b)
p_is_inside
=
(
a
<=
p
)
&
(
b
>=
p
)
n_inside
+=
p_is_inside
n_inside
/
n_mc
```
%% Output
0.9297
%% Cell type:code id:23097d5b tags:
```
python
boot_means
.
shape
```
%% Output
(5000,)
%% Cell type:code id:087e1a25 tags:
```
python
pm
```
%% Output
0.10100000000000008
%% Cell type:code id:de6a3e44 tags:
```
python
p
=
0.49
N
=
10000
sd_null
=
0.5
p_null
=
0.5
t
=
np
.
sqrt
(
N
)
*
np
.
abs
(
p_null
-
p
)
/
sd_null
print
(
"
%5.3f
"
%
(
1
-
(
norm
.
cdf
(
t
)
-
norm
.
cdf
(
-
t
))))
fig
,
ax
=
plt
.
subplots
()
sampdist
=
lambda
u
:
1
/
np
.
sqrt
(
2
*
np
.
pi
*
1
/
N
*
sd_null
)
*
np
.
exp
(
-
(
u
-
p_null
)
**
2
/
(
2
*
1
/
N
*
sd_null
))
u_list
=
np
.
linspace
(
0
,
1
,
10000
)
u_extreme_l
=
np
.
linspace
(
0
,
p_null
-
np
.
abs
(
p_null
-
p
),
10000
)
u_extreme_r
=
np
.
flip
(
1
-
u_extreme_l
)
ax
.
plot
(
u_list
,
sampdist
(
u_list
),
'
k
'
,
linewidth
=
2
)
for
pval
in
[
p
,
1
-
p
,
p_null
]:
ax
.
vlines
(
pval
,
0
,
sampdist
(
pval
),
'
k
'
,
linewidth
=
0.75
)
ax
.
hlines
(
0
,
0
,
1
,
'
k
'
)
ax
.
fill_between
(
u_extreme_l
,
sampdist
(
u_extreme_l
),
step
=
"
pre
"
,
alpha
=
0.4
)
ax
.
fill_between
(
u_extreme_r
,
sampdist
(
u_extreme_r
),
step
=
"
pre
"
,
alpha
=
0.4
)
ax
.
set_xlim
(
0.47
,
0.53
)
```
%% Output
0.046
(0.47, 0.53)
%% Cell type:code id:d170999f tags:
```
python
```
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment