2.1.5. Inferential statistic#
# import libraries
import math
import numpy as np
import scipy.stats
2.1.5.1. Sai số chuẩn (Standard error)#
Ước lượng sai số dựa vào tỉ lệ (for proportion), thể hiện mức độ variance của sample với population $\(\sigma_{\hat{p}} = \sqrt{\frac{p(1-p)}{n}}\)$
2.1.5.2. Cách tính khoảng tin cậy#
\[proportionCI = \hat{p} \pm Zscore_{\alpha/2} * \frac{\sigma}{\sqrt{n}}\]
\[meanCI = \bar{x} \pm Zscore_{\alpha/2} * \frac{\sigma}{\sqrt{n}}\]
\[uperLimit = sampleParam + Zscore_{\alpha/2} * standardError\]
\[lowerLimit = sampleParam - Zscore_{\alpha/2} * standardError\]
Bài toán: dự đoán khả năng trúng cử của ứng viên A so với ứng viên B với độ tin cậy là 95%
# lấy mẫu 100 người
n = 100
# ủng hộ ứng viên A là 55%
candidate_A_prop = 0.55
# ủng hộ ứng viên B là 45%
candidate_B_prop = 0.45
# tính Zscore cho ứng viên A với độ tin cậy là 95%
qnorm = scipy.stats.norm.ppf(0.975)
print( "Z-score:", qnorm)
# calculate p hat
p = candidate_A_prop
std_err_prop = math.sqrt(p * (1 - p) / n)
print("Độ lỗi chuẩn cho tỉ lệ ủng hộ ứng viên A:", std_err_prop)
# calculate standard error of mean
std_of_means = std_err_prop / math.sqrt(n)
print("Độ lỗi chuẩn cho tỉ lệ thu thập được:", std_of_means)
# calculate interval
upper_limit = candidate_A_prop + qnorm * std_of_means
lower_limit = candidate_A_prop - qnorm * std_of_means
print( "Tỉ lệ ủng hộ chặn trên:", upper_limit)
print("Tỉ lệ ủng hộ chặn dưới:", lower_limit)
Z-score: 1.959963984540054
Độ lỗi chuẩn cho tỉ lệ ủng hộ ứng viên A: 0.049749371855330994
Độ lỗi chuẩn cho tỉ lệ thu thập được: 0.0049749371855331
Tỉ lệ ủng hộ chặn trên: 0.559750697708994
Tỉ lệ ủng hộ chặn dưới: 0.5402493022910061
Bài toán: ước lượng thời gian trung bình (phút) một người chạy trong vòng 1km với độ tin cậy là 95%
# thống kê thời gian các lượt chạy
list_run_time = np.asarray([11.3, 10.3, 9.6, 9.1, 8.9, 8.9, 8.1, 7.5, 6.9])
sample_size = list_run_time.size
sample_mean = list_run_time.mean()
sample_std = list_run_time.std()
standard_err = sample_std / math.sqrt(sample_size)
print( "Total runners:", sample_size)
print( "Sample mean:", sample_mean)
print( "Sample standard deviation:", sample_std)
print( "Standard/Sampling error:", standard_err)
# calculate interval
qnorm = scipy.stats.norm.ppf(0.975)
print( "Z-score:", qnorm)
upper_limit = sample_mean + qnorm * standard_err
lower_limit = sample_mean - qnorm * standard_err
print( "Thời gian trung bình chặn trên:", upper_limit)
print( "Thời gian trung bình chặn dưới:", lower_limit)
Total runners: 9
Sample mean: 8.955555555555556
Sample standard deviation: 1.28332130826497
Standard/Sampling error: 0.4277737694216566
Z-score: 1.959963984540054
Thời gian trung bình chặn trên: 9.793976737152944
Thời gian trung bình chặn dưới: 8.117134373958168