文章目录
前言
最近看到了无偏估计,又被这个概念给整懵了,对此有感而发,特此记录。
一、无偏估计是什么?什么叫无偏?
\quad
对于无偏估计,如果你上某乎搜索,你大概率得到的最初概念是:
无偏估计就是贴近真实结果的估计
无偏估计就是贴近真实结果的估计
无偏估计就是贴近真实结果的估计
\quad
事实上,无偏估计的定义总结起来就是这样。但定义归定义,这个概念是怎么来的,才是我们关心的问题。
\quad
首先,让我们着眼于无偏估计的定义:
\quad 这个定义比较抽象,但事实上,它讲的不过是:
- 满足无偏性的估计量,就叫无偏估计量。
- 无偏估计量的期望,就是参数 θ \theta θ的无偏估计。
\quad
这跟网上总结的定义本质上是相符合。但我们首先要搞清楚——什么是无偏性?
\quad
无偏性,作为一种性质,图中最后一段话是对它的描述——
- 对于某些样本值,由这一估计量得到的估计值相对于真值来说偏大,有些则偏小。反复将这一估计量使用多次,就“平均”来说其偏差为零。
由于未知参数 θ \theta θ的估计量是一个随机变量,对于不同的样本它有不同的估计量。
\quad 所以,实际上我们要做的只是证明这个定义中最关键的”无偏性“是否正确——即,对多个估计量求期望,是否能消磨系统误差。
\quad
现在我们终于迎来了重头戏,痛苦的公式推导——if you understand what I write above, I believe you will not need me to prove——
这是我随手在百度上找的证明(别问,问就是不会)
\quad
接下来就运行下代码,体会无偏性(还是这个舒服)。
二、无偏的规律
无偏估计[以期望、方差为例](保留节目,也许以后会加)
\quad
首先让我们来看看当估计量
θ
^
\widehat{\theta}
θ
是样本期望时,它的期望为什么和总体期望是无偏的。
样本期望
X
‾
=
∑
i
=
1
n
X
i
1
n
总体
X
=
{
x
1
,
x
2
,
…
}
总体期望
μ
样本期望\overline{X}=\sum_{i=1}^{n} X_i\frac{1}{n} \quad 总体X=\{x_1,x_2, \dots\} \quad 总体期望\mu
样本期望X=i=1∑nXin1总体X={x1,x2,…}总体期望μ
\quad
因为每个样本出现概率相同,所以
E
(
X
‾
)
=
∑
j
=
1
m
X
‾
j
1
m
E(\overline{X})=\sum_{j=1}^{m} \overline{X}_j\frac{1}{m}
E(X)=j=1∑mXjm1
1.无偏估计的规律展示[以期望、方差为例]
标准代码如下:
import random
import numpy as np
def sampling(sample, n): # 模拟采样过程,sample是总体长度,n是采样个数
num = []
for i in range(sample):
num.append(i)
s = []
for i in range(n):
tar = random.randint(0, len(num) - 1)
s.append(num[tar])
num.remove(num[tar]) # 因为每个样本位置唯一,所以可以采一次去一次
return s # 返回的s是采样序列
sample = []
length = random.randint(100, 200)
for i in range(length): # 生成一个样本总体
sample.append(random.randint(1, 100))
print("总体期望:", np.mean(sample), " 总体方差:", np.std(sample) ** 2) # 打印总体的期望与方差
sample_num = random.randint(10, 100) # 采样数量
def test():
M = [] # 存储每次得到的期望
S = [] # 存储每次得到的样本方差
for i in range(10000):
m = []
# 模拟采样
s = sampling(len(sample), sample_num)
for j in range(sample_num):
m.append(sample[s[j]])
M.append(np.mean(m)) # numpy求期望的方法
S.append(np.std(m) ** 2 * (sample_num / (sample_num - 1))) # numpy求标准差的方法
print("样本期望:", np.mean(M), " 总体方差:", np.mean(S)) # 打印多次采样后期望和样本方差的平均值
for i in range(5):
test()
'''
大家如果主要想弄清楚样本方差的规律是个什么情况
可以适当的缩小总体样本长度,再对总体样本求样本方差
这个结果会更明显
推荐使用下面的第二份代码
'''
这里我仅仅放张结果图,以供参考:
\quad 可以看到:期望几乎就是无偏差的,而方差的偏差率也是非常小的,都在1%以内。
2.[非常明显]方差无偏规律的展示
方差无偏,通常是用样本方差表示的。
代码如下(示例):
import random
import numpy as np
sample = [70, 53, 61, 72]
print("该总体样本的正常方差:", np.std(sample)**2)
print("该总体样本的样本方差:", np.std(sample)**2 * 4/3)
def test_1(M, S):
for i in range(10000):
m = []
a = random.randint(0, 3)
b = random.randint(0, 3)
while (b == a):
b = random.randint(0, 3)
m.append(sample[a])
m.append(sample[b])
M.append(np.mean(m))
S.append(np.std(m) ** 2 * 2/1)
print("抽两个样本的样本方差:", np.mean(S))
def test_2(M, S):
for i in range(10000):
a = random.randint(0, 3)
m = []
for j in range(4):
if j != a:
m.append(sample[j])
M.append(np.mean(m))
S.append(np.std(m) ** 2 * 1.5)
print("抽三个样本的样本方差:", np.mean(S))
M = []
S = []
test_1(M, S)
test_2(M, S)
这段代码的结果,不出意外应该与下面这张图的规律出入不大:
零零散散的概念后记
\quad
估计量:
θ
^
=
θ
^
(
X
1
,
X
2
,
…
,
X
n
)
\widehat{\theta}=\widehat{\theta}(X_1,X_2,\dots,X_n)
θ
=θ
(X1,X2,…,Xn)
\quad
显然地,我们可以把估计量
θ
^
\widehat{\theta}
θ
当作是一个以样本
{
X
1
,
X
2
,
…
,
X
n
}
\{X_1,X_2,\dots,X_n\}
{X1,X2,…,Xn}为参数的函数。
反复使用估计量,就是对总体
X
X
X多次采样,得到对应的估计值
θ
i
\theta_i
θi。
\quad
顺带提一下,什么叫样本
{
X
1
,
X
2
,
…
,
X
n
}
\{X_1,X_2,\dots,X_n\}
{X1,X2,…,Xn}:
\quad
在这个样本定义里,我想说明的就是,每个
X
i
X_i
Xi实际上都是服从于
X
X
X的随机变量。
\quad
理解起来比较像在一个
n
n
n维空间
X
n
X^n
Xn,每一维度均属于总体
X
X
X,而样本就是这个
n
n
n维空间
X
n
X^n
Xn里的一个点
(
X
1
,
X
2
,
…
,
X
n
)
(X_1,X_2,\dots,X_n)
(X1,X2,…,Xn)。
\quad
而估计量
θ
^
\widehat{\theta}
θ
就是一个由
X
1
,
X
2
,
…
,
X
n
X_1,X_2,\dots,X_n
X1,X2,…,Xn定义的新随机变量。
\quad
期望的本质,就是求样本元素的平均值,所谓概率加权就是一般情况下的平均。