1 动手学数理统计_04
github 上pdf版本及ipynb版本:https://github.com/cx-333/Math-Modeling
1.11 假设检验之似然比检验与Bootstrap方法
- 似然比检验:
定义(广义似然比):设
x
1
,
⋯
,
x
n
x_{1}, \cdots, x_{n}
x1,⋯,xn 为来自密度函数为
p
(
x
;
θ
)
,
θ
∈
Θ
p(x ; \theta), \theta \in \Theta
p(x;θ),θ∈Θ 的样本,考虑检验问题
H
0
:
θ
∈
Θ
0
v
s
H
1
:
θ
∈
Θ
1
=
Θ
−
Θ
0
H_{0}: \theta \in \Theta_{0} \quad v s \quad H_{1}: \theta \in \Theta_{1}=\Theta-\Theta_{0}
H0:θ∈Θ0vsH1:θ∈Θ1=Θ−Θ0
令
Λ
(
x
1
,
⋯
,
x
n
)
=
sup
θ
∈
Θ
p
(
x
1
,
⋯
,
x
n
;
θ
)
sup
θ
∈
Θ
0
p
(
x
1
,
⋯
,
x
n
;
θ
)
sup
表
示
最
小
上
界
\Lambda\left(x_{1}, \cdots, x_{n}\right)=\frac{\sup _{\theta \in \Theta} p\left(x_{1}, \cdots, x_{n} ; \theta\right)}{\sup _{\theta \in \Theta_{0}} p\left(x_{1}, \cdots, x_{n} ; \theta\right)} \quad \sup 表示最小上界
Λ(x1,⋯,xn)=supθ∈Θ0p(x1,⋯,xn;θ)supθ∈Θp(x1,⋯,xn;θ)sup表示最小上界
那么称它为假设检验问题的广义似然比。
由上式可以看出,广义似然比定义下的分子分母都有一个上确界(
sup
\sup
sup)的符号,仔细观察,分子就相当于在全参数空间下取联合概率密度的最大值,分母相当于在原假设参数空间下取联合概率密度的 最大值,所以这个比值就是两个极大似然估计的比值。直观来看,如果原假设是正确的,那么参数 应该会落在原假设的参数空间内,换句话说,分子的最大值对应的参数应该落在
Θ
0
\Theta_{0}
Θ0 ,所以这个 比值就不会太大。但是,反过来说,如果原假设应该被拒绝,那么参数就有很大可能落在拒绝域, 那么全参数空间的最大值就会在
θ
∈
Θ
1
\theta \in \Theta_{1}
θ∈Θ1 中取到,那么这个时候比值就会变大。所以可以看出 来,拒绝域顺理成章的应该设置为
W
=
{
Λ
(
x
1
,
⋯
,
x
n
)
≥
c
}
W=\left\{\Lambda\left(x_{1}, \cdots, x_{n}\right) \geq c\right\}
W={Λ(x1,⋯,xn)≥c}
其中临界值
c
c
c 要满足
P
θ
(
Λ
(
x
1
,
⋯
,
x
n
)
≥
c
)
≤
α
,
∀
θ
∈
Θ
0
P_{\theta}\left(\Lambda\left(x_{1}, \cdots, x_{n}\right) \geq c\right) \leq \alpha, \forall \theta \in \Theta_{0}
Pθ(Λ(x1,⋯,xn)≥c)≤α,∀θ∈Θ0.
💡 2 l n Λ ( ( x 1 , ⋯ , x n ) ) 2ln \Lambda (\left(x_{1}, \cdots, x_{n}\right)) 2lnΛ((x1,⋯,xn))服从 χ 2 \chi^{2} χ2分布,自由度为独立参数的个数(需要检验参数的维度)
🔥例子:假设观察某种疾病的发生情况: n = 100 n=100 n=100 人中发生了 k = 10 k=10 k=10 个事件。假定数据服从二项分布, 理论已知人群中每个人发生该事件的概率为 π 0 = 0.2 \pi_{0}=0.2 π0=0.2 。试对该假设做似然比假设检验(显著性水平 α = 0.05 \alpha=0.05 α=0.05)?
🦊解:
- 作出假设
H 0 : π = π 0 = 0.2 ; H 1 : π ≠ π 0 = 0.2 H_{0}: \pi = \pi_{0}=0.2; \quad H_{1}: \pi\ne \pi_{0}=0.2 H0:π=π0=0.2;H1:π=π0=0.2 - 写出参数空间
Θ 0 = { π 0 } , Θ = { π , π ∈ R } \Theta_{0}=\{\pi_{0}\}, \quad \Theta = \{\pi, \pi \in \textbf{R}\} Θ0={π0},Θ={π,π∈R} - 计算全参数空间(
Θ
\Theta
Θ)下的极大似然估计
f ( x ) = C n k p k ( 1 − p ) n − k l n f ( x ) = l n C n k + l n p k + l n ( 1 − p ) n − k 令 d d p l n f ( x ) = 0 解 得 p = k n \begin{aligned} &f(x) = C_{n}^{k}p^{k}(1-p)^{n-k}\\ &ln f(x) = lnC_{n}^{k} + lnp^{k}+ ln(1-p)^{n-k}\\ &令 \frac{d}{dp}ln f(x) = 0 \\ &解得 \\ &p = \frac{k}{n} \end{aligned} f(x)=Cnkpk(1−p)n−klnf(x)=lnCnk+lnpk+ln(1−p)n−k令dpdlnf(x)=0解得p=nk - 在
H
0
H_{0}
H0假设下,
p
=
0.2
p = 0.2
p=0.2,计算
2
l
n
sup
θ
∈
Θ
p
(
x
1
,
x
2
,
⋯
,
x
n
)
sup
θ
∈
Θ
0
p
(
x
1
,
x
2
,
⋯
,
x
n
)
2ln\frac{\sup_{\theta\in\Theta }p(x_{1}, x_{2}, \cdots, x_{n})}{\sup_{\theta\in\Theta_{0}} p(x_{1}, x_{2}, \cdots, x_{n})}
2lnsupθ∈Θ0p(x1,x2,⋯,xn)supθ∈Θp(x1,x2,⋯,xn),为
c h e c k = 2 l n k / n 0.2 check = 2ln\frac{k/n}{0.2} check=2ln0.2k/n - 因为
2 l n sup θ ∈ Θ p ( x 1 , x 2 , ⋯ , x n ) sup θ ∈ Θ 0 p ( x 1 , x 2 , ⋯ , x n ) ∼ χ 2 ( 1 ) 2ln\frac{\sup_{\theta\in\Theta }p(x_{1}, x_{2}, \cdots, x_{n})}{\sup_{\theta\in\Theta_{0}} p(x_{1}, x_{2}, \cdots, x_{n})}\sim \chi^{2}(1) 2lnsupθ∈Θ0p(x1,x2,⋯,xn)supθ∈Θp(x1,x2,⋯,xn)∼χ2(1) - 因此,拒绝域为
c h e c k ≥ χ α / 2 ( 1 ) 或 c h e c k ≤ χ 1 − α / 2 ( 1 ) check \ge \chi_{\alpha/2}(1) 或 check \le \chi_{1 - \alpha/2}(1) check≥χα/2(1)或check≤χ1−α/2(1) - 判断 c h e c k check check值是否在拒绝域,若在,则拒绝 H 0 H_{0} H0,否则接受 H 0 H_{0} H0.
python代码(求解上题)
import numpy as np
from scipy.stats import chi2
p0 = 0.2
n = 100
k = 10
alpha = 0.05
check = 2 * np.log((k/n)/p0)
left = chi2.ppf(df=1, q=alpha/2)
right = chi2.ppf(df=1, q=(1-alpha/2))
print("似然比统计量为:{}".format(check))
print("拒绝域为(0, {})或({}, oo)".format(left, right))
if check <= left or right >= right:
print("拒绝假设H0, 即每个人发生该事件得概率不为0.2")
似然比统计量为:-1.3862943611198906
拒绝域为(0, 0.0009820691171752555)或(5.023886187314888, oo)
拒绝假设H0, 即每个人发生该事件得概率不为0.2
- Bootstrap方法:在上述方法中,如果分布的自由度难以确定,这个方法将难以进行下去。换句话说,当碰到某个统计量的分布难以确定或者未知的时候如何做假设检验呢?Bootstrap方法就是在这一背景下产生的。设总体得分布 F F F未知,但已经有一个容量为 n n n得来自分布 F F F的数据样本,自这一样本按放回抽样的方法抽取一个容量为 n n n的样本,这种样本称为bootstrap样本或自助样本,相继地、独立地自原始样本中抽取很多个bootstrap样本,利用这些样本对总体 F F F进行统计推断,这种方法称为非参数bootstrap方法。
bootstrap置信区间:设 X = X 1 , X 2 , ⋯ , X n X=X_{1}, X_{2}, \cdots, X_{n} X=X1,X2,⋯,Xn是来自总体 F F F容量为 n n n的样本, x = x 1 , x 2 , ⋯ , x n x=x_{1}, x_{2}, \cdots, x_{n} x=x1,x2,⋯,xn是一个已知的样本值, F F F中含有未知参数 θ \theta θ, θ ^ = θ ^ ( X 1 , X 2 , ⋯ , X n ) \hat{\theta}=\hat{\theta}(X_{1}, X_{2}, \cdots, X_{n}) θ^=θ^(X1,X2,⋯,Xn)是 θ \theta θ的估计量, θ \theta θ的置信水平为 1 − α 1-\alpha 1−α(显著性水平为 α \alpha α)的置信区间为:相继地、独立地从样本 x = x 1 , x 2 , ⋯ , x n x=x_{1}, x_{2}, \cdots, x_{n} x=x1,x2,⋯,xn中抽出B个容量为n的bootstrap样本,对于每个样本求出的 θ \theta θ的bootstrap估计: θ 1 ^ , θ 2 ^ , ⋯ , θ n ^ \hat{\theta_{1}}, \hat{\theta_{2}}, \cdots, \hat{\theta_{n}} θ1^,θ2^,⋯,θn^,将他们从小到大排序: θ ( 1 ) ^ < θ ( 2 ) ^ < ⋯ < θ ( n ) ^ \hat{\theta_{(1)}}<\hat{\theta_{(2)}}< \cdots< \hat{\theta_{(n)}} θ(1)^<θ(2)^<⋯<θ(n)^ 置信区间取 ( θ ^ ( k 1 ) , θ ^ ( k 2 ) ) (\hat{\theta}(k_{1}), \hat{\theta}(k_{2})) (θ^(k1),θ^(k2))其中, k 1 = [ B α 2 ] , k 2 = [ B ( 1 − α 2 ) ] , ( [ ⋅ ] 表 示 取 整 ) k_{1}=[B \frac{\alpha}{2}], k_{2}=[B (1-\frac{\alpha}{2})], \quad ([ \cdot]表示取整) k1=[B2α],k2=[B(1−2α)],([⋅]表示取整)
🔥例子:某工厂生产以发光产品,发光产品的发光时长服从正态分布 N ( μ , σ 2 ) N\left(\mu, \sigma^{2}\right) N(μ,σ2) ,产品的发光时长设定均值为 250 h 250 \mathrm{~h} 250 h 。现在从一批产品中抽取 10 10 10 个产品,测得发光时长为(单位 为: h h h) :
248.8 , 249.2 , 250.7 , 251.2 , 248.0 , 253.0 , 248.9 , 250.2 , 251.2 , 249.2 248.8, \quad 249.2, \quad 250.7, \quad 251.2, \quad 248.0, \quad 253.0, \quad 248.9, \quad 250.2, \quad 251.2, \quad 249.2 248.8,249.2,250.7,251.2,248.0,253.0,248.9,250.2,251.2,249.2
问该厂的发光产品是否符合要求(显著性水平 α = 0.05 \alpha = 0.05 α=0.05)?
🦊解:该问题为左边检验,单侧置信区间的形式应为 ( a , + o o ) (a, +oo) (a,+oo)
- 作出假设
H 0 : μ ≥ μ 0 = 250 ; H 1 : μ < μ 0 = 250 H_{0}:\mu \ge \mu_{0}=250; \quad H_{1}:\mu < \mu_{0}=250 H0:μ≥μ0=250;H1:μ<μ0=250 - 确定检验统计量 x ‾ \overline{x} x
- 进行 B B B次bootstrap采样并计算参数 μ i , ( i = 1 , 2 , ⋯ , B ) \mu_{i}, (i=1, 2, \cdots, B) μi,(i=1,2,⋯,B)后从小到大排序 μ ( 1 ) < μ ( 2 ) < ⋯ < μ ( B ) \mu_{(1)}<\mu_{(2)}<\cdots<\mu_{(B)} μ(1)<μ(2)<⋯<μ(B)
- 取 α / 2 , 1 − α / 2 \alpha/2, 1-\alpha/2 α/2,1−α/2分位点,得到置信区间 ( θ ^ ( k 1 ) , θ ^ ( k 2 ) ) ( 这 是 双 边 检 验 的 置 信 区 间 , 这 里 须 修 改 为 单 边 ) (\hat{\theta}(k_{1}), \hat{\theta}(k_{2}))(这是双边检验的置信区间,这里须修改为单边) (θ^(k1),θ^(k2))(这是双边检验的置信区间,这里须修改为单边), k 1 = [ B α 2 ] , k 2 = [ B ( 1 − α 2 ) ] , ( [ ⋅ ] 表 示 取 整 ) k_{1}=[B \frac{\alpha}{2}], k_{2}=[B (1-\frac{\alpha}{2})], \quad ([ \cdot]表示取整) k1=[B2α],k2=[B(1−2α)],([⋅]表示取整)
- 判断检验统计量是否在置信区间内,若在接受 h 0 h_{0} h0,否则,拒绝 H 0 H_{0} H0.
python代码(计算上题)
import numpy as np
# 例题为左边检验,单侧置信区间为(k1, oo),拒绝域为(-oo, k1]
mu0 = 250
alpha = 0.05
B = 1000
x = [248.8, 249.2, 250.7, 251.2, 248.0, 253.0, 248.9, 250.2, 251.2, 249.2]
x_mean= np.mean(x)
params = []
for i in range(B):
x_resample = np.random.choice(x, len(x), replace=True)
params.append(np.mean(x_resample))
params = np.sort(params)
k1 = int(B*alpha)
left = params[k1-1]
# right = np.percentile(params, (1-alpha)*100-1)
print("检验统计量为:{}".format(x_mean))
print("拒绝域为:(-oo, {}]".format(left))
if x_mean > left:
print("接受H0, 该厂的发光产品符合要求")
else:
print("拒绝H0, 该厂的发光产品不符合要求")
检验统计量为:250.03999999999996
拒绝域为:(-oo, 249.32000000000002]
接受H0, 该厂的发光产品符合要求
k 1 = [ B α 2 ] , k 2 = [ B ( 1 − α 2 ) ] , ( [ ⋅ ] 表 示 取 整 ) k_{1}=[B \frac{\alpha}{2}], k_{2}=[B (1-\frac{\alpha}{2})], \quad ([ \cdot]表示取整) k1=[B2α],k2=[B(1−2α)],([⋅]表示取整)
🔥例子:某工厂生产以发光产品,发光产品的发光时长服从正态分布 N ( μ , σ 2 ) N\left(\mu, \sigma^{2}\right) N(μ,σ2) ,产品的发光时长设定均值为 250 h 250 \mathrm{~h} 250 h 。现在从一批产品中抽取 10 10 10 个产品,测得发光时长为(单位 为: h h h) :
248.8 , 249.2 , 250.7 , 251.2 , 248.0 , 253.0 , 248.9 , 250.2 , 251.2 , 249.2 248.8, \quad 249.2, \quad 250.7, \quad 251.2, \quad 248.0, \quad 253.0, \quad 248.9, \quad 250.2, \quad 251.2, \quad 249.2 248.8,249.2,250.7,251.2,248.0,253.0,248.9,250.2,251.2,249.2
问该厂的发光产品是否符合要求(显著性水平 α = 0.05 \alpha = 0.05 α=0.05)?
🦊解:该问题为左边检验,单侧置信区间的形式应为 ( a , + o o ) (a, +oo) (a,+oo)
- 作出假设
H 0 : μ ≥ μ 0 = 250 ; H 1 : μ < μ 0 = 250 H_{0}:\mu \ge \mu_{0}=250; \quad H_{1}:\mu < \mu_{0}=250 H0:μ≥μ0=250;H1:μ<μ0=250 - 确定检验统计量 x ‾ \overline{x} x
- 进行 B B B次bootstrap采样并计算参数 μ i , ( i = 1 , 2 , ⋯ , B ) \mu_{i}, (i=1, 2, \cdots, B) μi,(i=1,2,⋯,B)后从小到大排序 μ ( 1 ) < μ ( 2 ) < ⋯ < μ ( B ) \mu_{(1)}<\mu_{(2)}<\cdots<\mu_{(B)} μ(1)<μ(2)<⋯<μ(B)
- 取 α / 2 , 1 − α / 2 \alpha/2, 1-\alpha/2 α/2,1−α/2分位点,得到置信区间 ( θ ^ ( k 1 ) , θ ^ ( k 2 ) ) ( 这 是 双 边 检 验 的 置 信 区 间 , 这 里 须 修 改 为 单 边 ) (\hat{\theta}(k_{1}), \hat{\theta}(k_{2}))(这是双边检验的置信区间,这里须修改为单边) (θ^(k1),θ^(k2))(这是双边检验的置信区间,这里须修改为单边), k 1 = [ B α 2 ] , k 2 = [ B ( 1 − α 2 ) ] , ( [ ⋅ ] 表 示 取 整 ) k_{1}=[B \frac{\alpha}{2}], k_{2}=[B (1-\frac{\alpha}{2})], \quad ([ \cdot]表示取整) k1=[B2α],k2=[B(1−2α)],([⋅]表示取整)
- 判断检验统计量是否在置信区间内,若在接受 h 0 h_{0} h0,否则,拒绝 H 0 H_{0} H0.
python代码(计算上题)
import numpy as np
# 例题为左边检验,单侧置信区间为(k1, oo),拒绝域为(-oo, k1]
mu0 = 250
alpha = 0.05
B = 1000
x = [248.8, 249.2, 250.7, 251.2, 248.0, 253.0, 248.9, 250.2, 251.2, 249.2]
x_mean= np.mean(x)
params = []
for i in range(B):
x_resample = np.random.choice(x, len(x), replace=True)
params.append(np.mean(x_resample))
params = np.sort(params)
k1 = int(B*alpha)
left = params[k1-1]
# right = np.percentile(params, (1-alpha)*100-1)
print("检验统计量为:{}".format(x_mean))
print("拒绝域为:(-oo, {}]".format(left))
if x_mean > left:
print("接受H0, 该厂的发光产品符合要求")
else:
print("拒绝H0, 该厂的发光产品不符合要求")
检验统计量为:250.03999999999996
拒绝域为:(-oo, 249.32000000000002]
接受H0, 该厂的发光产品符合要求