github 上pdf版本及ipynb版本:https://github.com/cx-333/Math-Modeling
定义(广义似然比):设 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)?
解:
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置信区间:设 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)
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)
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, 该厂的发光产品符合要求