layout: true --- class: inverse, center, middle background-image: url(figures/titlepage16-9.png) background-size: cover <br> # 商业预测 ## 第三讲:时间序列回归模型及应用 <img src="figures/qr.png" width="150px"/> #### 康雁飞 | 北航经管学院 | 数量经济与商务统计系 --- # 核心思路 - 我们预测时间序列 `\(y\)` 时假设它与其它时间序列 `\(x\)` 之间存在线性关系。 - 例如,我们可以通过广告总花费 `\(x\)` 来预测月度销量 `\(y\)`;同样的,我们可以通过气温数据 `\(x_1\)` 和星期数据 `\(x_2\)` 来预测日耗电量 `\(y\)`。 - **被预测变量** `\(y\)` 有时还称作回归变量、因变量或被解释变量。**预测变量** `\(x\)` 有时也叫作回归量、自变量或解释变量。在此我们称它们为“被预测变量”和“预测变量”。 --- class: inverse, center, middle # 线性回归模型 --- # 例:美国的消费支出 .pull-left[ 我们来看1970年第一季度到2016年第三季度之间,美国实际个人消费支出和实际个人可支配收入的季度增长情况。 ```r cbind('消费' = uschange[, "Consumption"], '收入' = uschange[, "Income"]) %>% autoplot(facets = TRUE, colour=TRUE) + ylab("增长率 % ") + xlab("年份") ``` ] .pull-right[ <img src="BF-L3-regression_files/figure-html/ConsInc-out-1.png" style="display: block; margin: auto;" /> ] --- # 例:美国的消费支出 .pull-left[ ```r uschange %>% as.data.frame() %>% ggplot(aes(x=Income, y=Consumption)) + ylab("季度消费支出变化 %") + xlab("季度收入变化 %") + geom_point() + geom_smooth(method="lm", se=FALSE)+ theme(plot.title = element_text(hjust = 0.5)) ``` ] .pull-right[ <img src="BF-L3-regression_files/figure-html/ConsInc2-out-1.png" style="display: block; margin: auto;" /> ] --- # 例:美国的消费支出(模型估计) ```r tslm(Consumption ~ Income, data=uschange) ``` ``` ## ## Call: ## tslm(formula = Consumption ~ Income, data = uschange) ## ## Coefficients: ## (Intercept) Income ## 0.5451 0.2806 ``` --- # 还有没有其他预测变量? <div class="figure" style="text-align: center"> <img src="BF-L3-regression_files/figure-html/MultiPredictors-1.png" alt="1970年第一季度到2016年第三季度之间,工业生产和个人储蓄的季度变化百分比以及失业率的季度变化情况。" /> <p class="caption">1970年第一季度到2016年第三季度之间,工业生产和个人储蓄的季度变化百分比以及失业率的季度变化情况。</p> </div> --- # 例:美国的消费支出 .pull-left[ 还有没有其他预测变量可用于预测美国消费支出? ```r uschange %>% as.data.frame() %>% GGally::ggpairs() ``` ] .pull-right[ <img src="BF-L3-regression_files/figure-html/ScatterMatrix-out-1.png" style="display: block; margin: auto;" /> ] --- # 例:多元线性回归 美国消费的多元线性回归模型为: `$$y_t=\beta_0 + \beta_1 x_{1,t}+ \beta_2 x_{2,t}+ \beta_3 x_{3,t}+ \beta_4 x_{4,t}+\varepsilon_t,$$` 其中, `\(y\)` 是实际个人消费支出的百分比变化, `\(x_1\)` 是实际个人可支配收入的百分比变化, `\(x_2\)` 是工业产值的百分比变化, `\(x_3\)` 是个人储蓄的百分比变化, `\(x_4\)` 是失业率的变化。 --- # 例:多元线性回归(模型估计) ```r fit.consMR <- tslm(Consumption ~ Income + Production + Unemployment + Savings, data=uschange) summary(fit.consMR) ``` ``` ## ## Call: ## tslm(formula = Consumption ~ Income + Production + Unemployment + ## Savings, data = uschange) ## ## Residuals: ## Min 1Q Median 3Q Max ## -0.88296 -0.17638 -0.03679 0.15251 1.20553 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 0.26729 0.03721 7.184 1.68e-11 *** ## Income 0.71449 0.04219 16.934 < 2e-16 *** ## Production 0.04589 0.02588 1.773 0.0778 . ## Unemployment -0.20477 0.10550 -1.941 0.0538 . ## Savings -0.04527 0.00278 -16.287 < 2e-16 *** ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 0.3286 on 182 degrees of freedom ## Multiple R-squared: 0.754, Adjusted R-squared: 0.7486 ## F-statistic: 139.5 on 4 and 182 DF, p-value: < 2.2e-16 ``` --- # 拟合值 .pull-left[ 还有没有其他预测变量可用于预测美国消费支出? ```r autoplot(uschange[,'Consumption'], series="真实值") + autolayer(fitted(fit.consMR), series="拟合值") + xlab("年份") + ylab("") + ggtitle("美国消费支出的百分比变化") + theme(plot.title = element_text(hjust = 0.5)) ``` ] .pull-right[ <img src="BF-L3-regression_files/figure-html/usfitted1-out-1.png" style="display: block; margin: auto;" /> ] --- # 拟合值与真实值 .pull-left[ ```r cbind(Data=uschange[,"Consumption"], Fitted=fitted(fit.consMR)) %>% as.data.frame() %>% ggplot(aes(x=Data, y=Fitted)) + geom_point() + xlab("拟合值(预测值)") + ylab("真实值") + ggtitle("美国消费支出的百分比变化") + geom_abline(intercept=0, slope=1)+ theme(plot.title = element_text(hjust = 0.5)) ``` ] .pull-right[ <img src="BF-L3-regression_files/figure-html/usfitted2-out-1.png" style="display: block; margin: auto;" /> ] --- # 回归模型的评估 模型建立后,有必要绘制残差图以检查模型的假设是否已经满足。此外应该生成一系列图表,以检查拟合模型的不同方面和基本假设是否成立。 ```r checkresiduals(fit.consMR, test=FALSE) ``` <img src="BF-L3-regression_files/figure-html/uschangeresidcheck-1.png" style="display: block; margin: auto;" /> --- # 基于回归模型的预测 .pull-left[ ```r fit.consBest <- tslm( Consumption ~ Income + Savings + Unemployment, data = uschange) h <- 4 newdata <- data.frame( Income = c(1, 1, 1, 1), Savings = c(0.5, 0.5, 0.5, 0.5), Unemployment = c(0, 0, 0, 0)) fcast.up <- forecast(fit.consBest, newdata = newdata) fcast.up ``` ] .pull-right[ ``` ## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 ## 2016 Q4 0.9885187 0.5619394 1.415098 0.3341497 1.642888 ## 2017 Q1 0.9885187 0.5619394 1.415098 0.3341497 1.642888 ## 2017 Q2 0.9885187 0.5619394 1.415098 0.3341497 1.642888 ## 2017 Q3 0.9885187 0.5619394 1.415098 0.3341497 1.642888 ``` ] --- class: inverse, center, middle # 非线性回归模型 --- # 例:波士顿马拉松的获胜时间 <img src="BF-L3-regression_files/figure-html/marathonLinear-1.png" style="display: block; margin: auto;" /> --- # 非线性回归模型 .pull-left[ 非线性回归模型包括双对数模型、 对数-线性模型、线性-对数模型、分段线性趋势模型、样条回归等等。 ```r marathon %>% splinef(lambda=0) %>% autoplot()+ xlab('年份')+ ggtitle("")+ theme(plot.title = element_text(hjust = 0.5)) ``` ] .pull-right[ <img src="BF-L3-regression_files/figure-html/splinef-out-1.png" style="display: block; margin: auto;" /> ] --- # 残差图 <div class="figure" style="text-align: center"> <img src="BF-L3-regression_files/figure-html/residPiecewise-1.png" alt="三次样条趋势回归结果的残差。" /> <p class="caption">三次样条趋势回归结果的残差。</p> </div> --- # 非线性回归模型 非线性回归模型包括双对数模型、 对数-线性模型、线性-对数模型、分段线性趋势模型、样条回归等等。具体请参考[这里](https://otexts.com/fppcn/nonlinear-regression.html)。 --- # 实验3 2014年澳大利亚维多利亚州的每日耗电量包含在 `elecdaily` 中。前20天的日度耗电量数据可以通过如下方式获得。 ```r daily20 <- head(elecdaily, 20) ``` 1. 绘制上述数据的时序图并将温度作为解释变量对日度耗电量建模。为什么是它们之间是正向相关关系? 2. 绘制残差图。模型是否充分? 3. 若明日最高温度为 `\(15^\circ\)`,利用模型预测当天的耗电量。并与最高温度为 `\(35^\circ\)` 时的预测结果进行比较。你觉得预测结果可信吗? 4. 写出模型预测值的预测区间。 5. 利用 `elecdaily` 中的所有数据,绘制日度耗电量和温度的关系图。你对你的模型有什么认识?