基于回归分析的煤炭价格预测模型
华北电力大学(保定)
武小莉 热动0704
王坤 动力实07
张帆 电力实07
基于回归分析的煤炭价格预测模型
摘要:本文主要通过分析煤炭价格的变动趋势以及影响煤炭价格的因素,运用数据分析中的回归分析,分别建立了单变量非线性回归模型和多元线性回归预测模型,实现了对煤炭价格的预测。
首先通过对我国1985-2006年煤炭价格走势的分析,建立了以时间为自变量、煤炭价格为因变量的单变量非线性回归模型,拟合出了煤炭价格随时间的变化规律,此模型能在一定程度上预测出煤炭价格的变化趋势,但运用此模型预测出的2007年的煤炭价格与实际值有较大偏差。
对照国家相关政策的变动,对原模型产生偏差的原因进行深入分析,发现供求关系是影响煤炭价格的主要深层次因素。选取1990-2006年间煤炭的生产量、消费量、进口量、出口量作为自变量,仍以煤炭价格作为因变量,建立了多元线性回归模型,并对此阶段的四个自变量做了时间序列分析,得到了2007年各个自变量的预测值,继而运用此模型较精确地预测出了2007年的煤炭价格。
关键词:单变量非线性回归分析、多元回归分析、价格预测
问题的提出
中国是当今世界上以煤为主要能源的少数几个国家之一,煤炭在中国经济社会发展中占有重要的地位。它不仅是工业部门燃料动力的主要来源,也是重要的化工原料和民用能源,并已成为重要的出口商品。目前,煤炭约占中国一次能源总产量的70%,约占一次能源中消费量的66%(国家统计局,2004d)。未来较长时期内,煤炭仍将是中国能源的支柱,它在国民经济中具有重要的战略地位。
近十年来,我国的煤炭价格一直保持大幅度的波动,特别是近几年的煤炭价格上涨已经引起社会的广泛关注。煤炭作为基础能源,需求缺口的拉大,必将导致作为市场信号的价格上扬。客观分析和判定煤炭价格的影响因素,了解并能够预测未来煤炭价格,对于掌握决策的主动权,作出合理的决策,是非常必要的。
问题的分析
对煤炭价格进行预测,需要掌握一定量的数据。通过查询,可以获得的数据量有:近二十年来煤炭工业产品的出厂价格以及各年的煤炭平衡表。
通过对所得数据的分析,发现煤炭价格逐年递增,且随时间成非线性变化。在对整体数据分析的基础上,可以建立煤炭价格与时间的单变量非线性回归方程,继而可根据此回归方程进行价格预测。
单变量回归模型仅是单纯地研究了煤炭价格随时间的变化规律,过于简单且表面化。事实上煤炭价格受多方因素的影响,这些影响因素才是煤炭价格变化的根本原因,建立煤炭价格与各影响因素间的回归模型,对未来煤炭价格进行分析预测更具有合理性。
在不考虑国家政策强制干预的前提下,决定煤炭价格的主要因素是供需关系。随着煤炭市场的有序放开和煤炭市场化进程的加快,煤炭价格回归理性的预期将会显现。这就需要结合我国煤炭产业的实际情况,重点从煤炭的生产量、消费量、进口量以及出口量对煤炭价格进行统计模拟分析,建立煤炭价格与这些变量的回归模型,从而实现对未来煤炭价格的预测。
模型假设
查找得到的数据真实可靠,且煤炭价格为全国平均价格。
多元线性回归模型中,煤炭价格主要受市场条件下的供求关系的影响,建立模型过程中不考虑国家政策的强制干预。
多元线性回归模型中,假设在市场条件下,主要讨论煤炭价格受煤炭生产量、煤炭消费量以及进、出口量的影响,忽略其他影响因素。
模型的建立和求解
非线性回归模型
模型的建立
表5-1中给出了1985-2006年的煤炭价格。由此作出煤炭价格走势图,如图5-1所示。
图 煤炭价格(单位:元/吨)
通过分析图中价格走势,确定选择指数回归方程作为价格指数的变化趋势的模拟,另在回归方程上加1个三角函数作为周期变化规律的模拟,方程的形式为:
(5-1)
上式中:为煤炭价格(元/吨);为时间(年);为常数。
模型的求解与精确度分析
取l985年为时间的零点,以下类推,建立煤炭价格与时间之间的回归方程,代入数据,求解方程中各参数,得回归方程为
(5-2)
表5-1中给出了由此模型得到煤炭价格的拟合值及残差。
表5-1 1985—2006年煤炭价格历史统计数据及模型拟合情况
时间
(:年)
煤炭实际价格
(:元/吨)
煤炭拟合价格
(:元/吨)
残差
()
标准化残差
()
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
根据与可知,该模型的显著性良好,通过检验。
绘制粮食价格综合指数的理论值与实际值之间的对比图(图5-2),从图中可以看出该曲线对实际值的拟合效果很好,根据理论曲线可以预测未来粮食价格指数的走势。
图5-2 实际价格与单变量的非线性模型拟合值的对比
模型的检验与结果分析
由方程(5-2)预测2007年(令)的煤炭价格为元/吨,而2007年煤炭的实际价格为元/吨,残差值达到,标准化残差也已达到,残差值突然增大,结果不够理想。
分析其原因,本模型由一段时期内的价格走势凭经验建立回归方程,指数部分体现其整体变化趋势,三角函数部分体现其波动的周期性,而实际情况是煤炭价格受多方因素影响,特别是国家政策对其有一个宏观的调控,而这些因素与时间并不存在必然的联系。
分析图5-1中的煤炭价格走势,其变化趋势与国家政策的变动紧密相关:
1985-1993年间,由价格曲线可知,煤炭价格呈缓速增长趋势,这一时期,执行政策统一定价的煤炭约占46%。煤炭价格中政府定价范围缩小,部分定价权下放,市场议价以及议价市场的合法化,使煤炭价格形成机制产生本质性的变化。市场价格在煤炭价格体系中占主导的格局已初步形成,政府定价与市场机制在价格形成中已起着重要的作用。
1993年,煤炭价格改革进入新的阶段,确立了以市场形成价格为主的价格机制。到1994年一月份,全国煤炭市场的煤炭价格全部放开,计划内煤炭价格与计划外煤炭价格无区别,全同改变过去一煤多价的价格形式。这一时期,煤炭价格增长迅速,属于本模型中出现的第一个周期的上升阶段,且曲线斜率较大。
1997-2001年期间,煤炭价格基本属于下跌之势。究其原因,由于前一时期煤价增长很快,私营煤矿企业和乡镇煤矿企业数量激增,其产煤量几乎占据了全国煤炭产量的半壁江山,这一时期我国煤炭供过于求,导致价格的下跌。而本模型中的曲线也在此进入了第一个下降阶段。
2002年我国煤炭价格开始采用完全市场定价制度,但国家发改委仍对电煤市场价格和运输进行干预。2004年,重化工行业崛起,煤电油运全面紧张,从价格曲线可以看出,这一时期的煤炭价格上涨迅速。此后,煤炭市场化改革一年迈出一大步:2005年,基本实现了政府发布原则、框架,企业自主衔接,依法签订合同;2006年,取消电煤价格临时干预,重点运力不再翻版,转而以合同为基础;2007年,取消订货会,引入竞争机制,企业不分所有制和隶属关系,协商定价。政策的频繁变动导致煤炭价格增长速度的不稳定,直观表现为价格曲线不再平滑,其斜率的衔接性变弱。而在模型中曲线波动已发展到第二个周期的上升阶段,由于前一周期的上升速度较快,这一周期继续以较快速度上升,而实际情况是价格上升速度又有减缓趋势,从而导致了预测结果与实际情况的相差较大。
由此可知,煤炭价格随时间的变化只是一种表面的现象,其真正的变化规律有着更为深层的影响因素。分析国家政策对煤炭价格变动所造成的影响就会发现,在逐步推进市场化的进程中,市场的供需关系正逐渐成为煤炭价格的主要决定因素,每一次国家政策的变动都会深深影响市场的供求关系,故需深入分析价格与供求量间的关系,建立模型进行求解。
多元线性回归预测模型
模型的建立
对煤炭价格影响因素的研究,国内的学者有众多分歧。在模型中,认为煤炭价格主要受煤炭供求平衡情况影响,建立煤炭价格与煤炭生产量、煤炭进口量、煤炭出口量、煤炭消费量的多元回归模型。
从1990年到2006年的历年的煤炭价格、煤炭生产量、煤炭进口量、煤炭出口量、煤炭消费量的数据如表5-2所示。
表 5-2 1990—2006年煤炭各变量的历史统计数据
时间
(:年)
煤炭实际价格
(:元/吨)
生产量
(:万吨)
进口量
(:万吨)
出口量
(:万吨)
消费量
(:万吨)
1990
1729
105523
1991
110432
1992
111638
123
1993
115067
1994
1995
1996
1997
137282
201
3073
139248
1998
125000
1999
104500
2000
129921
132000
2001
138152
266
135000
2002
145456
2003
172200
169232
2004
193596
2005
2006
237300
根据数据,画出煤炭价格与各变量的散点图(如图5-3至5-6所示),同时计算煤炭价格与各变量的相关系数(如表5-3所示)。
表 5-3 煤炭价格与各影响变量的相关系数
变量组合
相关系数
图5-3 生产量与煤炭价格的散点图
图5-4 进口量与煤炭价格的散点图
图5-5 出口量与煤炭价格的散点图
图 5-6 消费量与煤炭价格的散点图
从以上煤炭价格与各个变量的相关系数与散点图可以看出,煤炭价格与煤炭生产量、进口量、出口量、消费量具有显著的相关性,鉴于此,建立如下模型:
(5-3)
回归模型参数的求解
根据我国1990—2006年关于煤炭价格、煤炭生产量、进口量、出口量、消费量的历史统计数据(见表5-2),对模型(5-3)进行求解,得到各参数和相应的统计指标,如表5-4所示。
表5-4 模型参数估计和相应指标
参数或
指标
显著水平
估计值
<
从上表可知,=,即因变量(煤炭价格)%可由模型确定,且值超过了检验的临界值,<,所以模型是可以应用的。将表中回归参数的估计值带入模型(5-3)中,建立起我国煤炭价格与煤炭生产量、出口量、进口量、消费量之间的回归预测模型,即为:
(5-4)
采用时间序列预测2007年相关变量的值
(1)单变量随机线性模型主要有两种:一种为自回归模型,其方程为:
(5-5)
式中:——待估自回归参数;——随机冲击,是一个白噪声序列 ,服从;另一种为滑动平均模型,其方程为:
(5-6)
式中:——滑动平均参数。
对这两种模型的识别主要借助于其自相关函数和偏相关函数,分别定义为
(5-7)
(5-8)
其中:
若随机序列的偏自相关函数在步以后截尾,即当时,,而且其自相关函数拖尾,即随的增大而衰减,有收敛到零的趋势,则模型为模型。实际识别时,只要当时,在零的上下波动,即可认为是截尾的;若随机序列的自相关函数在步以后截尾,而其偏自相关函数拖尾,则模型可识别为模型。
(2)模型的确立
对于时间序列,首先要进行模型的识别与定阶,即要判断模型的类别,并估计阶数,在此过程中以模型定阶的准则为判定依据。当模型定阶后,还要对模型参数进行估计,可以使用最小二乘法,无条件最小二乘法及最大似然估计进行求解。最后并要对模型进行考核,即要检验是否为平稳白噪声。
(3)各变量所对应的时间序列的具体形式
对于变量为形式:;
对于变量为形式:;
对于变量为形式:;
对于变量为形式: ;
注:为变量的一阶差分;
在模型中,算子定义为;
在模型中,算子定义为。
(4)运用统计软件编程得到对2007年各变量数据的预测值:
2007年
预报值
95%的置信区间范围
AIC
x1生产量
x2进口量
x3出口量
x4消费量
将上表中对2007年各变量的预测值代入回归模型(5-3),计算得到:
2007年的煤炭价格元,与实际的煤炭价格元。预测值与实际值相差元,相对误差为%。
相对于单变量的非线性回归,此模型较为精确的预测出了2007年的煤炭价格。
模型的优缺点及改进方向
1.在单变量的非线性回归模型中,建立的是煤炭价格随时间变化的指数回归方程,模型建立简单,仅有时间一个变量。最终模型通过了检验,并能在一定程度上对煤炭的价格进行预测。但其存在一个很大的缺点,由于考虑影响因素过于表面化,对于真正影响煤炭价格变动的复杂内因并未深入研究,导致其预测的准确性大打折扣,仅能运用于较粗略的预测。
2.在多元线性回归预测模型中,抓住了供需关系对煤炭价格变动的主要影响,所建立的模型能够较精确地对未来的煤炭价格进行预测。但是,该模型对影响价格变动的因素选取还欠全面,且有些笼统。煤炭价格的变动还要受到其他能源价格、煤炭储存量、以及煤炭库存量等诸多因素的影响。在对模型进行改进的过程中,要将这些变量重新进行分析,提取主成分,然后建立多变量的回归模型。
得到的模型的值可能会更大,能更好地解释煤炭价格的变化。
参考文献
[1] 魏一鸣 范英 韩智勇 吴刚 等,中国能源报告(2006)战略与政策研究,北京,科学出版社,2006年;
[2] 史丹 等,中国能源工业市场化改革研究报告,北京:经济管理出版社,2006年;
[3] 范金城 梅长林,数据分析,北京:科学出版社,2002年;
[4] 国际统计局,中国能源统计年鉴2006,北京:中国统计出版社,2006年;
[5] 袁桂秋 张玲丹,我国煤炭价格的影响因素分析,价格分析,2009(2):45-47,2009年;
附录:
程序1
非线性回归模型的求解
clear
clc
tdata=1:22;
ydata=[
]';
x=1985:2006;
figure
plot(x,ydata,x,ydata,'*')
p= nlinfit(tdata,ydata,'myf',[50,20,,10,100]);
y=p(1).*exp(p(3).*tdata)+tdata.*p(2).*sin(p(4).*tdata-p(5));
figure
plot(x,ydata,x,y,x,ydata,'*',x,y,'o');
k=sum(ydata)/length(ydata);
s1=0;
s2=0;
for i=1:length(y)
s1=s1+(ydata(i)-y(i))*(ydata(i)-y(i));
s2=s2+(ydata(i)-k)*(ydata(i)-k);
end
r=1-s1/s2;
F=(s2-s1)/(s1/(22-2))
function y=myf(p,tdata)
y=p(1).*exp(p(3).*tdata)+tdata.*p(2).*sin(p(4).*tdata-p(5));
程序2 求解煤炭价格与各变量间的回归关系式
data a;
input y x1 x2 x3 x4;
cards;
1729
105523
110432
111638
123
115067
137282
201
3073
139248
125000
104500
129921
132000
138152
266
135000
145456
172200
169232
193596
237300
run;
proc reg;
model y=x1 x2 x3 x4/stb r collin ;
output out=a p=p r=r student=stu l95m=l95m u95m=u95m l95=l95 cookd=cookd dffits=dffits ;
run;
程序3 用时间序列预测2007年煤炭的生产量X1
data dixs;
input x;
cards;
111638
115067
137282
125000
104500
129921
138152
145456
172200
237300
run;
proc arima data=dixs;
identify var=x(1);
estimate p=1 method=cls plot;
forcast lead=1;
estimate p=2 method=cls plot;
forcast lead=1;
estimate p=3 method=cls plot;
forcast lead=1;
estimate q=1 method=cls plot;
forcast lead=1;
estimate q=2 method=cls plot;
forcast lead=1;
estimate q=3 method=cls plot;
forcast lead=1;
estimate p=1 q=1 method=cls plot;
forcast lead=1;
estimate p=1 q=2 method=cls plot;
forcast lead=1;
estimate p=2 q=1 method=cls plot;
forcast lead=1;
run;
程序4 用时间序列预测2007年煤炭的进口量X2
data dixs;
input x;
cards;
123
201
266
run;
proc arima data=dixs;
identify var=x(1);
estimate p=1 method=cls plot;
forcast lead=1;
estimate p=2 method=cls plot;
forcast lead=1;
estimate p=3 method=cls plot;
forcast lead=1;
estimate q=1 method=cls plot;
forcast lead=1;
estimate q=2 method=cls plot;
forcast lead=1;
estimate q=3 method=cls plot;
forcast lead=1;
estimate p=1 q=1 method=cls plot;
forcast lead=1;
estimate p=1 q=2 method=cls plot;
forcast lead=1;
estimate p=2 q=1 method=cls plot;
forcast lead=1;
run;
程序5 用时间序列预测2007年煤炭的出口量X3
data dixs;
input x;
cards;
1729
3073
run;
proc arima data=dixs;
identify var=x(1);
estimate p=1 method=cls plot;
forcast lead=1;
estimate p=2 method=cls plot;
forcast lead=1;
estimate p=3 method=cls plot;
forcast lead=1;
estimate q=1 method=cls plot;
forcast lead=1;
estimate q=2 method=cls plot;
forcast lead=1;
estimate q=3 method=cls plot;
forcast lead=1;
estimate p=1 q=1 method=cls plot;
forcast lead=1;
estimate p=1 q=2 method=cls plot;
forcast lead=1;
estimate p=2 q=1 method=cls plot;
forcast lead=1;
run;
程序6 用时间序列预测2007年煤炭的消费量X4
data dixs;
input x;
cards;
105523
110432
139248
132000
135000
169232
193596
run;
proc arima data=dixs;
identify var=x(1);
estimate p=1 method=cls plot;
forcast lead=1;
estimate p=2 method=cls plot;
forcast lead=1;
estimate p=3 method=cls plot;
forcast lead=1;
estimate q=1 method=cls plot;
forcast lead=1;
estimate q=2 method=cls plot;
forcast lead=1;
estimate q=3 method=cls plot;
forcast lead=1;
estimate p=1 q=1 method=cls plot;
forcast lead=1;
estimate p=1 q=2 method=cls plot;
forcast lead=1;
estimate p=2 q=1 method=cls plot;
forcast lead=1;
run;