python实现门限回归方式
更新时间:2020年02月29日 09:06:35 作者:Will_Zhan
今天小编就为大家分享一篇python实现门限回归方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
门限回归模型(Threshold Regressive Model,简称TR模型或TRM)的基本思想是通过门限变量的控制作用,当给出预报因子资料后,首先根据门限变量的门限阈值的判别控制作用,以决定不同情况下使用不同的预报方程,从而试图解释各种类似于跳跃和突变的现象。其实质上是把预报问题按状态空间的取值进行分类,用分段的线性回归模式来描述总体非线性预报问题。
多元门限回归的建模步骤就是确实门限变量、率定门限数L、门限值及回归系数的过程,为了计算方便,这里采用二分割(即L=2)说明模型的建模步骤。
基本步骤如下(附代码):
1.读取数据,计算预报对象与预报因子之间的互相关系数矩阵。
2.对相关系数进行排序,相关系数最大的因子作为门限元。
3.根据选取的门限元因子对数据进行重新排序。
4.将排序后的序列按照门限元分割序列为两段,第一分割第一段1个数据,第二段n-1(n为样本容量)个数据;第二次分割第一段2个数据,第二段n-2个数据,一次类推,分别计算出分割后的F统计量并选出最大统计量对应的门限元的分割点作为门限值。
5.以门限值为分割点将数据序列分割为两段,分别进行多元线性回归,此处利用sklearn.linear_model模块中的线性回归模块。再代入预报因子分别计算两段的预测值。
6.将预测值和实际值按照年份序号从新排序,恢复其顺序,利用matplotlib模块做出预测值与实际值得对比图。
结果图:
所用数据:引自《现代中长期水文预报方法及其应用》汤成友 官学文 张世明 著
num |
x1 |
x2 |
x3 |
x4 |
x5 |
y |
1960 |
308 |
301 |
352 |
310 |
149 |
80.5 |
1961 |
182 |
186 |
165 |
127 |
70 |
42.9 |
1962 |
195 |
134 |
134 |
97 |
61 |
43.9 |
1963 |
136 |
378 |
334 |
307 |
148 |
87.4 |
1964 |
230 |
630 |
332 |
161 |
100 |
66.6 |
1965 |
225 |
333 |
209 |
365 |
152 |
82.9 |
1966 |
296 |
225 |
317 |
527 |
228 |
111 |
1967 |
324 |
229 |
176 |
317 |
153 |
79.3 |
1968 |
278 |
230 |
352 |
317 |
143 |
82 |
1969 |
662 |
442 |
453 |
381 |
188 |
103 |
1970 |
187 |
136 |
103 |
129 |
74.7 |
43 |
1971 |
284 |
404 |
600 |
327 |
161 |
92.2 |
1972 |
427 |
430 |
843 |
448 |
236 |
144 |
1973 |
258 |
404 |
639 |
275 |
156 |
98.9 |
1974 |
113 |
160 |
128 |
177 |
77.2 |
50.1 |
1975 |
143 |
300 |
333 |
214 |
106 |
63 |
1976 |
113 |
74 |
193 |
241 |
107 |
58.6 |
1977 |
204 |
140 |
154 |
90 |
55.1 |
40.2 |
1978 |
174 |
445 |
351 |
267 |
120 |
70.3 |
1979 |
93 |
95 |
197 |
214 |
94.9 |
64.3 |
1980 |
214 |
250 |
354 |
385 |
178 |
73 |
1981 |
232 |
676 |
483 |
218 |
113 |
72.6 |
1982 |
266 |
216 |
146 |
112 |
82.8 |
61.4 |
1983 |
210 |
433 |
803 |
301 |
166 |
115 |
1984 |
261 |
702 |
512 |
291 |
153 |
97.5 |
1985 |
197 |
178 |
238 |
180 |
94.2 |
58.9 |
1986 |
442 |
256 |
623 |
310 |
146 |
84.3 |
1987 |
136 |
99 |
253 |
232 |
114 |
62 |
1988 |
256 |
226 |
185 |
321 |
151 |
80.1 |
1989 |
473 |
409 |
300 |
298 |
141 |
79.6 |
1990 |
277 |
291 |
639 |
302 |
149 |
84.6 |
1991 |
372 |
181 |
174 |
104 |
68.8 |
58.4 |
1992 |
251 |
142 |
126 |
95 |
59.4 |
51.4 |
1993 |
181 |
125 |
130 |
240 |
121 |
64 |
1994 |
253 |
278 |
216 |
182 |
124 |
82.4 |
1995 |
168 |
214 |
265 |
175 |
101 |
68.1 |
1996 |
98.8 |
97 |
92.7 |
88 |
56.7 |
45.6 |
1997 |
252 |
385 |
313 |
270 |
119 |
78.8 |
1998 |
242 |
198 |
137 |
114 |
71.9 |
51.8 |
1999 |
268 |
178 |
127 |
109 |
68.6 |
53.3 |
2000 |
86.2 |
286 |
233 |
133 |
77.8 |
58.6 |
2001 |
150 |
168 |
122 |
93 |
62.8 |
42.9 |
2002 |
180 |
150 |
97.8 |
78 |
48.2 |
41.9 |
2003 |
166 |
203 |
166 |
124 |
70 |
53.7 |
2004 |
400 |
202 |
126 |
158 |
92.7 |
54.7 |
2005 |
79.8 |
82.6 |
129 |
160 |
76.6 |
53.7 |
以上这篇python实现门限回归方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
最新评论