统计推断之参数估计

参数估计是利用样本对总体进行统计推断的一类方法,即假设总体的概率分布类型已知,但其中含有未知参数,由样本估计未知参数的值。
参数估计的方法主要有点估计和区间估计,其中点估计中有矩估计和极大似然估计等方法。

一、点估计

依据样本估计总体分布中所含的未知参数或未知参数的函数。

1、矩估计

矩估计是基于一种简单的“替换”思想,即用样本矩估计总体矩。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt

μ = 30 # 数学期望
σ = 2 # 方差
h = μ + σ * np.random.randn(10000) # 正态分布
plt.hist(h, bins=100) # 直方图显示
plt.show()

def ub_me(x):
'''
无偏矩估计(unbiased moment estimator)
'''
u = np.mean(x)
return u, np.sqrt(np.dot(x - u, (x - u).T) / (x.shape[0] - 1))

print(ub_me(h))

2、极大似然估计

有点类似于”贝叶斯方法”的思路。样本已经出现了,它们同时发生的概率(即似然函数)取最大值的时候最符合对事实的估计。通过使似然函数取最大值 ,就可以估算参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt

μ = 30 # 数学期望
σ = 2 # 方差
h = μ + σ * np.random.randn(10000) # 正态分布
plt.hist(h, bins=100) # 直方图显示
plt.show()

def norm_mle(x):
'''
极大似然估计
(Maximum Likelihood Estimate,MLE)
'''
u = np.mean(x)
return u, np.sqrt(np.dot(x - u, (x - u).T) / x.shape[0])

# 已知符合正态分布,用极大似然估计得出参数约为30和2
print(norm.fit(h))
print(norm_mle(h))

二、区间估计

依据抽取的样本,根据一定的正确度与精确度的要求,构造出适当的区间,作为总体分布的未知参数或参数的函数的真值所在范围的估计。例如人们常说的有百分之多少的把握保证某值在某个范围内,即是区间估计的最简单的应用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
from scipy.stats import t

# 16袋糖果的重量近似地服从正态分布,求总体均值u的置信水平为0.95的置信区间
a = np.array([506, 508, 499, 503, 504, 510, 497, 512, 514, 505, 493, 496, 506, 502, 509, 496])

# 计算均值和标准差
mu = a.mean()
s = a.std(ddof=1) # ddof为1时标准偏差除的是(N-1),否则是默认的N
print(mu, s)

alpha = 0.05
n = len(a)
val = (mu - s/np.sqrt(n)*t.ppf(1 - alpha/2, n-1), mu + s/np.sqrt(n)*t.ppf(1 - alpha/n, n-1))
print('置信区间为:', val)
0%