对一元线性回归模型
x
=
{
x
1
,
x
2
,
⋯
,
x
n
}
x=\{x_1,x_2,\cdots,x_n\}
x={x1,x2,⋯,xn},
Y
=
{
Y
1
,
Y
2
,
⋯
,
Y
n
}
Y=\{Y_1,Y_2,\cdots,Y_n\}
Y={Y1,Y2,⋯,Yn},
Y
i
Y_i
Yi~
N
(
a
x
i
+
b
,
σ
2
)
,
i
=
1
,
2
,
⋯
,
n
N(ax_i+b, \sigma^2),i=1,2,\cdots,n
N(axi+b,σ2),i=1,2,⋯,n,若算得参数
a
a
a,
b
b
b和
σ
2
\sigma^2
σ2的估计量
a
∧
\stackrel{\wedge}{a}
a∧,
b
∧
\stackrel{\wedge}{b}
b∧和
σ
2
∧
\stackrel{\wedge}{\sigma^2}
σ2∧。对给定的置信水平
1
−
α
1-\alpha
1−α以及与诸
Y
i
,
i
=
1
,
2
,
⋯
,
n
Y_i,i=1,2,\cdots,n
Yi,i=1,2,⋯,n独立的随机变量
Y
Y
Y~
N
(
a
x
+
b
,
σ
2
)
N(ax+b,\sigma^2)
N(ax+b,σ2)的某个取值范围
Ω
\Omega
Ω,寻求使得
P
(
Y
∈
Ω
)
≥
1
−
α
P(Y\in\Omega)\geq1-\alpha
P(Y∈Ω)≥1−α
成立的
x
x
x构成的集合其上(下)界的估计量问题,称为控制问题。
例1设炼铝厂所产铸模的抗张强度与所用铝的硬度有关。设当铝的硬度为
x
x
x时,抗张强度
Y
Y
Y~
N
(
a
x
+
b
,
σ
2
)
N(ax+b,\sigma^2)
N(ax+b,σ2),其中
a
a
a,
b
b
b和
σ
2
\sigma^2
σ2均未知。对于一系列的
x
x
x值,测得相应的抗张强度如下表
硬度
x
:
51
,
53
,
60
,
64
,
68
,
70
,
70
,
72
,
83
,
84
抗张强度
Y
:
283
,
293
,
290
,
256
,
288
,
349
,
340
,
354
,
324
,
343
\text{硬度}x: 51,53,60,64,68,70,70,72,83,84\\ \text{抗张强度}Y: 283,293,290,256,288,349,340,354,324,343
硬度x:51,53,60,64,68,70,70,72,83,84抗张强度Y:283,293,290,256,288,349,340,354,324,343
要求铸模的抗张强度
Y
Y
Y的值介于260~340之间,则铝材的硬度应如何控制(置信水平
1
−
α
=
0.95
1-\alpha=0.95
1−α=0.95)?就是一个典型的控制问题。
由于
Y
−
a
x
−
b
σ
\frac{Y-{a}x-{b}}{{\sigma}}
σY−ax−b~
N
(
0
,
1
)
N(0, 1)
N(0,1),用
a
∧
\stackrel{\wedge}{a}
a∧,
b
∧
\stackrel{\wedge}{b}
b∧和
σ
2
∧
\stackrel{\wedge}{\sigma^2}
σ2∧替代
a
a
a,
b
b
b和
σ
2
\sigma^2
σ2,
Y
−
a
∧
x
−
b
∧
σ
∧
\frac{Y-\stackrel{\wedge}{a}x-\stackrel{\wedge}{b}}{\stackrel{\wedge}{\sigma}}
σ∧Y−a∧x−b∧近似服从
N
(
0
,
1
)
N(0,1)
N(0,1)。对于
Ω
=
(
y
∗
,
y
∗
∗
)
\Omega=(y^*, y^{**})
Ω=(y∗,y∗∗)的情形,其中
y
∗
y^*
y∗和
y
∗
∗
y^{**}
y∗∗为实数,且满足
y
∗
∗
−
y
∗
>
2
z
α
/
2
σ
∧
y^{**}-y^*>2z_{\alpha/2}\stackrel{\wedge}{\sigma}
y∗∗−y∗>2zα/2σ∧,则必有
P
(
y
∗
<
Y
<
y
∗
∗
)
=
P
(
y
∗
−
a
∧
x
−
b
∧
σ
∧
<
Y
−
a
∧
x
−
b
∧
σ
∧
<
y
∗
∗
−
a
∧
x
−
b
∧
σ
∧
)
.
P(y^*<Y<y^{**})=P\left(\frac{y^*-\stackrel{\wedge}{a}x-\stackrel{\wedge}{b}}{\stackrel{\wedge}{\sigma}}<\frac{Y-\stackrel{\wedge}{a}x-\stackrel{\wedge}{b}}{\stackrel{\wedge}{\sigma}}<\frac{y^{**}-\stackrel{\wedge}{a}x-\stackrel{\wedge}{b}}{\stackrel{\wedge}{\sigma}}\right).
P(y∗<Y<y∗∗)=P
σ∧y∗−a∧x−b∧<σ∧Y−a∧x−b∧<σ∧y∗∗−a∧x−b∧
.
解不等式
y
∗
−
a
∧
x
−
b
∧
σ
∧
≤
−
z
α
/
2
\frac{y^*-\stackrel{\wedge}{a}x-\stackrel{\wedge}{b}}{\stackrel{\wedge}{\sigma}}\leq-z_{\alpha/2}
σ∧y∗−a∧x−b∧≤−zα/2得
x
∗
=
1
a
∧
(
y
∗
−
b
∧
+
z
α
/
2
σ
∧
)
x^*=\frac{1}{\stackrel{\wedge}{a}}(y^*-\stackrel{\wedge}{b}+z_{\alpha/2}\stackrel{\wedge}{\sigma})
x∗=a∧1(y∗−b∧+zα/2σ∧),解
y
∗
∗
−
a
∧
x
−
b
∧
σ
∧
≥
z
α
/
2
\frac{y^{**}-\stackrel{\wedge}{a}x-\stackrel{\wedge}{b}}{\stackrel{\wedge}{\sigma}}\geq z_{\alpha/2}
σ∧y∗∗−a∧x−b∧≥zα/2得
x
∗
∗
=
1
a
∧
(
y
∗
∗
−
b
∧
−
z
α
/
2
σ
∧
)
x^{**}=\frac{1}{\stackrel{\wedge}{a}}(y^{**}-\stackrel{\wedge}{b}-z_{\alpha/2}\stackrel{\wedge}{\sigma})
x∗∗=a∧1(y∗∗−b∧−zα/2σ∧)。则
P
(
y
∗
<
Y
<
y
∗
∗
)
=
P
(
y
∗
−
a
∧
x
∗
−
b
∧
σ
∧
≤
−
z
α
/
2
<
Y
−
a
∧
x
−
b
∧
σ
∧
<
z
α
/
2
≤
y
∗
∗
−
a
∧
x
∗
∗
−
b
∧
σ
∧
)
≥
1
−
α
.
P(y^*<Y<y^{**})=P\left(\frac{y^*-\stackrel{\wedge}{a}x^*-\stackrel{\wedge}{b}}{\stackrel{\wedge}{\sigma}}\leq-z_{\alpha/2}<\frac{Y-\stackrel{\wedge}{a}x-\stackrel{\wedge}{b}}{\stackrel{\wedge}{\sigma}}<z_{\alpha/2}\leq\frac{y^{**}-\stackrel{\wedge}{a}x^{**}-\stackrel{\wedge}{b}}{\stackrel{\wedge}{\sigma}}\right)\geq1-\alpha.
P(y∗<Y<y∗∗)=P
σ∧y∗−a∧x∗−b∧≤−zα/2<σ∧Y−a∧x−b∧<zα/2≤σ∧y∗∗−a∧x∗∗−b∧
≥1−α.
于是,欲使
y
∗
<
Y
<
y
∗
∗
y^*<Y<y^{**}
y∗<Y<y∗∗,在置信水平
1
−
α
1-\alpha
1−α下,需控制
x
∈
(
x
∗
,
x
∗
∗
)
x\in(x^*, x^{**})
x∈(x∗,x∗∗)(
a
∧
>
0
\stackrel{\wedge}{a}>0
a∧>0)或
x
∈
(
x
∗
∗
,
x
∗
)
x\in(x^{**},x^*)
x∈(x∗∗,x∗)(
a
∧
<
0
\stackrel{\wedge}{a}<0
a∧<0)。将上述思想写成如下代码。
from scipy.stats import norm #导入norm
def control(a, b, s, y1, y2, alpha): #函数定义
z1,z2=norm.interval(1-alpha) #N(0,1)的双侧分位点
c1=y1-b #y*-b
c2=y2-b #y**-b
dy1=z1*s #z1*s
dy2=z2*s #z2*s
p1=(c1-dy1)/a #关于y*的端点
p2=(c2-dy2)/a #关于y**的端点
if p2<p1: #确定左右端点
(p1,p2)=(p2,p1)
return (p1, p2)
程序的第3行计算标准正态分布对应 1 − α 1-\alpha 1−α的双侧分位点 − z α / 2 -z_{\alpha/2} −zα/2、 z α / 2 z_{\alpha/2} zα/2,记为z1和z2。第4、5行分别计算 y ∗ − b ∧ y^*-\stackrel{\wedge}{b} y∗−b∧和 y ∗ ∗ − b ∧ y^{**}-\stackrel{\wedge}{b} y∗∗−b∧,记为c1和c2。第6、7行分别计算 − z α / 2 σ ∧ -z_{\alpha/2}\stackrel{\wedge}{\sigma} −zα/2σ∧和 z α / 2 σ ∧ z_{\alpha/2}\stackrel{\wedge}{\sigma} zα/2σ∧,记为dy1和dy2。第8、9行分别计算 1 a ∧ ( y ∗ − b ∧ + z α / 2 σ ∧ ) \frac{1}{\stackrel{\wedge}{a}}(y^*-\stackrel{\wedge}{b}+z_{\alpha/2}\stackrel{\wedge}{\sigma}) a∧1(y∗−b∧+zα/2σ∧)和 1 a ∧ ( y ∗ ∗ − b ∧ − z α / 2 σ ∧ ) \frac{1}{\stackrel{\wedge}{a}}(y^{**}-\stackrel{\wedge}{b}-z_{\alpha/2}\stackrel{\wedge}{\sigma}) a∧1(y∗∗−b∧−zα/2σ∧),记为p1和p2。第10~11行的if语句确定控制区间的左、右端点。需要提醒的是,调用函数control前需自行检验 y ∗ ∗ − y ∗ > 2 z α / 2 σ ∧ y^{**}-y^*>2z_{\alpha/2}\stackrel{\wedge}{\sigma} y∗∗−y∗>2zα/2σ∧。下列代码完成例1的计算。
import numpy as np #导入numpy
from scipy.stats import linregress #导入linregress
alpha=0.05 #设置数据
y1=260
y2=340
x=np.array([51, 53, 60, 64, 68, 70, 70, 72, 83, 84])
y=np.array([283, 293, 290, 286, 288, 349, 340, 354, 324, 343])
n=x.size #样本容量
x_bar=x.mean() #x数据均值
lxx=((x-x_bar)**2).sum() #lxx
res=linregress(x, y) #调用linregress
a=res.slope #读取a
b=res.intercept #读取b
s=res.stderr*np.sqrt((n-2)*lxx/n) #计算s
print('x in (%.0f, %.0f)'%control(a, b, s, y1, y2, alpha)) #计算控制区间
程序的第3~7行设置原始数据。第9行计算样本容量 n n n,第9行计算 x x x的数据均值 x ‾ \overline{x} x记为x_bar。第10行计算 l x x = ∑ i = 1 n ( x i − x ‾ ) l_{xx}=\sum\limits_{i=1}^n(x_i-\overline{x}) lxx=i=1∑n(xi−x)记为lxx。第11行调用函数linregress计算一元回归分析,返回值记为res。第12、13行分别读取 a ∧ \stackrel{\wedge}{a} a∧和 b ∧ \stackrel{\wedge}{b} b∧,记为a和b。第14行利用res的字段stderr( = n σ 2 ∧ ( n − 2 ) l x x =\sqrt{\frac{n\stackrel{\wedge}{\sigma^2}}{(n-2)l_{xx}}} =(n−2)lxxnσ2∧)乘以 ( n − 2 ) l x x n \sqrt{\frac{(n-2)l_{xx}}{n}} n(n−2)lxx,计算 σ ∧ \stackrel{\wedge}{\sigma} σ∧记为s。第15行调用函数contol计算 260 < Y < 340 260<Y<340 260<Y<340的控制区间并输出。运行程序,输出
x in (59, 60)
即若要求铸模的抗张强度
Y
Y
Y的值介于260~340之间,则铝材的硬度应控制在(59, 60)范围内。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好。
返回《导引》