???????对于线性模型: Y = β 0 + β 1 X + ε (1) Y=\beta_{0}+\beta_{1}X+\varepsilon \tag{1} Y=β0?+β1?X+ε(1)???????通过最小一乘法进行中位数回归。给出参数 β 0 \beta_{0} β0?和 β 1 \beta_{1} β1?的估计 β 0 ^ \widehat{\beta_{0}} β0? ?和 β 1 ^ \widehat{\beta_{1}} β1? ?.
???????我们的目标函数为:
min
?
Q
(
β
0
,
β
1
)
=
∑
i
=
1
n
∣
y
i
?
β
0
?
β
1
x
i
∣
(2)
\min Q(\beta_{0},\beta_{1})=\sum_{i=1}^{n}|y_{i}-\beta_{0}-\beta_{1}x_{i}| \tag{2}
minQ(β0?,β1?)=i=1∑n?∣yi??β0??β1?xi?∣(2)
???????首先对
β
0
,
β
1
\beta_{0},\beta_{1}
β0?,β1?加以约束,使得回归直线
y
=
β
0
+
β
1
x
y=\beta_{0}+\beta_{1}x
y=β0?+β1?x过点
(
x
k
,
y
k
)
(x_{k},y_{k})
(xk?,yk?),其中
y
k
y_{k}
yk?为数据
y
i
,
i
=
1
,
2
,
?
?
,
n
y_{i},i=1,2,\cdots,n
yi?,i=1,2,?,n的中位数。
作变换如下:
{
x
i
′
=
x
i
?
x
k
y
i
′
=
y
i
?
y
k
,
i
=
1
,
2
,
?
?
,
n
(3)
\begin{cases} x_{i}'=x_{i}-x_{k}\\ y_{i}'=y_{i}-y_{k} \end{cases},i=1,2,\cdots,n \tag{3}
{xi′?=xi??xk?yi′?=yi??yk??,i=1,2,?,n(3)
???????这样,(2)就转化成了(4).
min
?
Q
(
β
1
)
=
∑
i
=
1
n
∣
y
i
′
?
β
1
x
i
′
∣
(4)
\min Q(\beta_{1})=\sum_{i=1}^{n}|y_{i}'-\beta_{1}x_{i}'| \tag{4}
minQ(β1?)=i=1∑n?∣yi′??β1?xi′?∣(4)
???????为了后面的书写运算方便,我们仍用
(
x
i
,
y
i
)
(x_{i},y_{i})
(xi?,yi?)来表示经过变换(3)得到的数据
(
x
i
′
,
y
i
′
)
(x_{i}',y_{i}')
(xi′?,yi′?),这样(4)式就可以写成下式:
min
?
Q
(
β
1
)
=
∑
i
=
1
n
∣
y
i
?
β
1
x
i
∣
(5)
\min Q(\beta_{1})=\sum_{i=1}^{n}|y_{i}-\beta_{1}x_{i}| \tag{5}
minQ(β1?)=i=1∑n?∣yi??β1?xi?∣(5)
???????在求解(5)之前我们先来考虑对于任意的
i
i
i,
Q
i
(
β
1
)
=
∣
y
i
?
β
i
x
i
∣
Q_{i}(\beta_{1})=|y_{i}-\beta_{i}x_{i}|
Qi?(β1?)=∣yi??βi?xi?∣的最小值。如图2.1,在
β
=
y
i
/
x
i
\beta=y_{i}/x_{i}
β=yi?/xi?时,
Q
i
(
β
)
Q_{i}(\beta)
Qi?(β)取最小值,图中两条直线的斜率互为相反数分别为
?
∣
x
i
∣
-|x_{i}|
?∣xi?∣和
∣
x
i
∣
|x_{i}|
∣xi?∣。
???????现在考虑如下数据表:
序号 | x i x_{i} xi? | y i y_{i} yi? |
---|---|---|
1 | 1 | 3 |
2 | 1 | 1 |
3 | 2 | 4 |
分别画出
Q
1
(
β
1
)
=
∣
3
?
β
1
∣
,
Q
2
(
β
1
)
=
∣
1
?
β
1
∣
,
Q
3
(
β
1
)
=
∣
4
?
2
β
1
∣
Q_{1}(\beta_{1})=|3-\beta_{1}|,Q_{2}(\beta_{1})=|1-\beta_{1}|,Q_{3}(\beta_{1})=|4-2\beta_{1}|
Q1?(β1?)=∣3?β1?∣,Q2?(β1?)=∣1?β1?∣,Q3?(β1?)=∣4?2β1?∣和
∑
i
=
1
3
Q
i
(
β
1
)
\sum_{i=1}^{3}Q_{i}(\beta_{1})
∑i=13?Qi?(β1?)的图形,如图2.2。
可以看出
∑
i
=
1
3
Q
i
(
β
1
)
\sum_{i=1}^{3}Q_{i}(\beta_{1})
∑i=13?Qi?(β1?)是一条折线凸函数。该结论对
∑
i
=
1
n
Q
i
(
β
1
)
\sum_{i=1}^{n}Q_{i}(\beta_{1})
∑i=1n?Qi?(β1?)也是成立的,即
∑
i
=
1
n
Q
i
(
β
1
)
\sum_{i=1}^{n}Q_{i}(\beta_{1})
∑i=1n?Qi?(β1?)是一折线凸函数。
???????我们来考虑如下这样一组数据:
y y y | x x x |
---|---|
220 | 4 |
146 | 3 |
438 | 7 |
49 | 1 |
95 | 2 |
303 | 6 |
261 | 5 |
???????下面给出计算中位数回归方程完整 p y t h o n python python源代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
#一元线性模型的中位数回归
#导入数据
dataset=pd.read_excel('LAD for dimension of one.xlsx')
#寻找y的中位数,因为取中位数函数np.median()有时会把中间两项求平均值,这与我们的目的不和,故自己写一个程序
dataset=dataset.sort_values(by='y',ascending=True)
n=len(dataset)#数据量大小n
k=math.ceil(n/2)#中位数下标k
yk=dataset.iloc[k-1,0]
xk=dataset.iloc[k-1,1]
#作以中位数为中心的变换
reversef_x=lambda x:x-xk
reversef_y=lambda y:y-yk
dataset['x']=reversef_x(dataset['x'])
dataset['y']=reversef_y(dataset['y'])
#删除xi=0的数据
dataset=dataset.drop(dataset[dataset['x'].isin([0])].index)
#计算βi=yi/xi,并以βi的大小排序
dataset['beta']=dataset['y']/dataset['x']
dataset=dataset.sort_values(by='beta',ascending=True)
#计算M
fabs=lambda x:abs(x)
dataset['|x|']=fabs(dataset['x'])
M=dataset['|x|'].sum()
#寻找最优的βr
a=0
for i in range(len(dataset)):
a+=dataset.iloc[i,3]
if a<M/2:
continue
else:
beta_r=dataset.iloc[i,2]
break
#输出结果
print("中位数回归曲线方程为:y={}+{}x".format(yk-beta_r*xk,beta_r))
???????下面给出程序运行结果:
???????下面画出回归方程与数据点的图:
#数据可视化
#画出数据散点图
dataset=pd.read_excel('LAD for dimension of one.xlsx')
plt.scatter(dataset['x'],dataset['y'],c='red',label='原始数据点')
#画出回归直线图
x=np.arange(0,9,1)
y=[]
for i in x:
yi=yk-beta_r*xk+beta_r*i
y.append(yi)
plt.plot(x,y,label='回归直线')
#设置图例
plt.legend(loc='upper left',frameon=True)
plt.title('中位数回归直线',size=15)
plt.xlabel('x',size=15)
plt.ylabel('y',size=15)
plt.show()
???????下面我们对回归的情况进行一些必要的检验:
#回归参数检验
def get_lr_stats(x, y):
n = len(x)
y_prd = yk-beta_r*xk+beta_r*x
Regression = sum((y_prd - np.mean(y)) ** 2) # 回归平方和
Residual = sum((y - y_prd) ** 2) # 残差平方和
total = sum((y - np.mean(y)) ** 2) # 总体平方和
R_square = 1 - Residual / total # 相关性系数R^2
message1 = ('相关系数(R^2): ' + str(R_square) + ';' + '\n' + '总体平方和(TSS): ' + str(total) + ';' + '\n')
message2 = ('回归平方和(RSS): ' + str(Regression) + ';' + '\n残差平方和(ESS): ' + str(Residual) + ';' + '\n')
return print('\n' + message1 + message2)
get_lr_stats(dataset['x'], dataset['y'])
[1]李仲来.最小一乘法介绍[J].数学通报,1992(02):42-45.
4月11日20:30~22:00通过腾讯会议进行了第二次在线学习讨论我把学习笔记整理一下...
DELETEFROMTablesWHEREIDNOTIN(SELECTMin(ID)FROMTablesGROUPBYName) Min的话保...
上篇文章给大家介绍了 Java正则表达式匹配,替换,查找,切割的方法 ,接下来,...
复制代码 代码如下: % URL="http://news.163.com/special/00011K6L/rss_newstop....
工具:Eclipse,Oracle,smartupload.jar;语言:jsp,Java;数据存储:Oracle。...
错误描述: 在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报...
本文实例讲述了Laravel框架源码解析之反射的使用。分享给大家供大家参考,具体如...
项目中用到的一些特殊字符和图标 html代码 XML/HTML Code 复制内容到剪贴板 div ...
Elasticsearch 是通过 Lucene 的倒排索引技术实现比关系型数据库更快的过滤。特...
正则忽略大小写 – RegexOptions.IgnoreCase 例如: 复制代码 代码如下: Str = R...