机器学习(时间序列):线性回归之虚拟变量 dummy variables

article/2025/11/3 6:59:12

1 前言

  • 当预测变量是分类变量时,我们可以引入虚拟变量,作为回归的虚拟变量
  • 虚拟变量也可用于解释数据中的异常值。 虚拟变量不会忽略异常值,而是消除其影响。 在这种情况下,虚拟变量对该观察值取值为 1,而在其他任何正常的地方取值为 0。

2 季节性虚拟变量

        假设我们正在预测每日数据,并且我们希望将星期几作为预测变量。 然后可以创建以下虚拟变量。

         请注意,对七个类别进行编码只需要六个虚拟变量。 这是因为第七类(在本例中为星期日)被截距捕获,并在虚拟变量全部设置为零时指定。

        与虚拟变量相关的每个系数的解释是,它是该类别相对于省略类别的影响的度量。 在上面的示例中,与星期一相关的 d1,t 系数将衡量星期一对预测变量的影响与星期日的影响相比。

2.1 举例

下面是一个解释虚拟变量系数含义的示例,该系数反映了澳大利亚啤酒生产的季度季节性。

 我们想预测未来啤酒生产的价值。 我们可以使用具有线性趋势和季度虚拟变量的回归模型对这些数据进行建模

         如果 t 在第 i 季度,则 di,t=1,否则为 0。 第一季度变量已被省略,因此与其他季度相关的系数是衡量这些季度与第一季度之间差异的指标。

通过拟合,我们得到系数:

β0

441.8

β1-0.34
β2-34.66
β3-17.82
β472.80

每季度平均下降趋势为 -0.34 兆升。 平均而言,第二季度的产量比第一季度低 34.7 兆升,第三季度的产量比第一季度低 17.8 兆升,第四季度的产量比第一季度高 72.8 兆升。

 

3 虚拟变量陷阱

        许多人会尝试为第七类添加第七个虚拟变量。 这被称为“虚拟变量陷阱”,因为它会导致回归失败。 当还包括截距时,将有太多参数无法估计。

         一般规则是使用的虚拟变量比类别少一个。 所以对于季度数据,使用三个虚拟变量; 对于月度数据,使用 11 个虚拟变量; 对于星期数据,使用六个虚拟变量,依此类推。

4 干预变量 Intervention variables

通常有必要对可能影响要预测的变量的干预措施进行建模。例如,竞争对手的活动、广告支出、行业行动等都会产生影响。

当效果只持续一个时期时,我们使用“尖峰”变量。这是一个虚拟变量,在干预期间取值为 1,在其他地方取值为 0。尖峰变量等效于用于处理异常值的虚拟变量。

其他干预措施具有即时和永久的效果,那么我们使用“步长”变量。阶跃变量在干预之前取值为零,从干预开始时取值为 1。

5 傅里叶级数

        使用季节性虚拟变量的替代方法,特别是对于长季节性周期,是使用傅立叶项。 

        如果 m 是季节性周期,则前几个傅立叶项由下式给出

         如果我们有每月的季节性,并且我们使用这些预测变量中的前 11 个,那么我们将得到与使用 11 个虚拟变量完全相同的预测。

        使用傅立叶项,我们通常需要比虚拟变量更少的预测变量,尤其是当 m 很大时。 对于较短的季节性周期(例如季度数据),使用傅立叶项相对于季节性虚拟变量几乎没有优势。

        包含傅立叶项的回归模型通常称为谐波回归,因为连续的傅立叶项表示前两个傅立叶项的谐波。

6 R语言实现

6.1 naive 线性回归

library(forecast)y<-ts(c(5,3,3.1,3.2,3.3,3.4,3.5,3.3,3.2,4,4.1,4.2,6,4,4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,5,10,9,8,8.5,8.4,8.5,8.6,8.7,8.8,8.9,9,9.5),start = 2020,frequency = 12)x<-tslm(y~y)summary(x)#Call:
#tslm(formula = y ~ y)#Residuals:
#   Min     1Q Median     3Q    Max 
#-2.686 -1.686 -1.036  2.814  4.314 #Coefficients:
#            Estimate Std. Error t value
#(Intercept)    5.686      0.392    14.5
#            Pr(>|t|)    
#(Intercept) 2.28e-16 ***
#---
#Signif. codes:  
#0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1#Residual standard error: 2.352 on 35 degrees of freedom

6.2 季节性虚拟变量

 x<-tslm(y~y+season)#Call:
#tslm(formula = y ~ y + season)#Residuals:
#   Min     1Q Median     3Q    Max 
#-2.367 -1.975 -1.033  3.000  3.667 #Coefficients:
#            Estimate Std. Error t value
#(Intercept)   7.0000     1.6004   4.374
#season2      -1.6667     2.2633  -0.736
#season3      -1.9333     2.2633  -0.854
#season4      -1.7000     2.2633  -0.751
#season5      -1.6667     2.2633  -0.736
#season6      -1.5667     2.2633  -0.692
#season7      -1.4667     2.2633  -0.648
#season8      -1.4667     2.2633  -0.648
#season9      -1.4333     2.2633  -0.633
#season10     -1.1000     2.2633  -0.486
#season11     -1.0000     2.2633  -0.442
#season12     -0.7667     2.2633  -0.339
#            Pr(>|t|)    
#(Intercept) 0.000204 ***
#season2     0.468635    
#season3     0.401438    
#season4     0.459888    
#season5     0.468635    
#season6     0.495455    
#season7     0.523126    
#season8     0.523126    
#season9     0.532534    
#season10    0.631366    
#season11    0.662568    
#season12    0.737754    
#---
#Signif. codes:  
#0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1#Residual standard error: 2.772 on 24 degrees of freedom
#Multiple R-squared:  0.04766,	Adjusted R-squared:  -0.3888 
#F-statistic: 0.1092 on 11 and 24 DF,  p-value: 0.9997

6.3 傅里叶虚拟变量

x<-tslm(y~y+fourier(y,K=2))#Call:
#tslm(formula = y ~ y + fourier(y, K = 2))#Residuals:
#   Min     1Q Median     3Q    Max 
#-2.756 -1.889 -1.040  2.972  3.700 #Coefficients:
#                       Estimate Std. Error
#(Intercept)              5.6861     0.4095
#fourier(y, K = 2)S1-12  -0.1321     0.5791
#fourier(y, K = 2)C1-12   0.4746     0.5791
#fourier(y, K = 2)S2-12   0.1251     0.5791
#fourier(y, K = 2)C2-12   0.3222     0.5791
#                       t value Pr(>|t|)    
#(Intercept)             13.886 7.51e-15 ***
#fourier(y, K = 2)S1-12  -0.228    0.821    
#fourier(y, K = 2)C1-12   0.820    0.419    
#fourier(y, K = 2)S2-12   0.216    0.830    
#fourier(y, K = 2)C2-12   0.556    0.582    
#---
#Signif. codes:  
#0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1#Residual standard error: 2.457 on 31 degrees of freedom
#Multiple R-squared:  0.03367,	Adjusted R-squared:  -0.09102 
#F-statistic:  0.27 on 4 and 31 DF,  p-value: 0.895

        Fourier() 的第一个参数允许它识别季节性周期 m 和要返回的预测变量的长度。 第二个参数 K 指定要包含多少对 sin 和 cos 项。 允许的最大值为 K = m / 2,其中 m 是季节性周期。


http://chatgpt.dhexx.cn/article/ITkeM0TT.shtml

相关文章

虚拟变量的方法介绍及python实现方式

虚拟变量的定义作用 计量经济学中对虚拟变量给出了定义、作用及使用场景&#xff0c;进一步的深入了解可以系统性学习。 定义&#xff1a;虚拟变量 ( Dummy Variables) &#xff0c;用以反映无法定量度量的因素&#xff0c;譬如性别对收入的影响&#xff0c;是量化了的质变量&…

【计量经济学】虚拟变量

虚拟变量–潘登同学的计量经济学笔记 文章目录 虚拟变量--潘登同学的计量经济学笔记 对定性信息的描述只有一个虚拟变量的情形虚拟变量系数的解释虚拟变量的作用效果检验工资性别歧视因变量为对数形式的情况 多个虚拟变量的情形虚拟变量系数的解释使用虚拟变量包含序数信息虚拟…

php读取文件名称,php如何获取文件名

php获取文件名的方法&#xff1a;可以用basename()函数来获取文件名&#xff0c;例如&#xff1a;【basename($full_name)】。还可以使用pathinfo()函数来获取文件名。 PHP中获取文件名的方式 1、直接用basename&#xff1a;<?php $full_name c:\wamp\php\php.ini; $base…

python获取当前系统的日期_python怎么获取当前系统时间

python获取当前系统时间&#xff0c;包括年月日&#xff0c;时分秒&#xff0c;主要通过Python中的datetime模块来实现。 下面我们就通过具体的代码示例&#xff0c;给大家详细介绍Python获取当前时间日期的实现方法。 代码示例如下&#xff1a;import datetime now datetime.…

mysql如何获取当前时间_mysql怎么获取当前时间

mysql获取当前时间的方法&#xff1a;可以通过执行【select now();】语句来获取当前时间。还可以通过执行【select current_timestamp, current_timestamp();】语句来获取。 获得当前日期时间(date time)函数&#xff1a;now()mysql> select now(); --------------------- …

如何通过php获取今天的时间,如何使用php获取当前时间和日期

如何使用php获取当前时间和日期&#xff1f;在php中我们可以使用date()函数来获取当前时间和日期&#xff0c;也可以在PHP> 5.2的 版本中使用DateTime PHP类来获取日期和时间&#xff0c;下面我们就来看看具体的内容。 使用date()函数输出当前日期和时间。它将使用php.ini中…

php如何获取当前日期时间函数,php如何使用date()函数获取当前时间

php如何使用date()函数获取当前时间?本篇文章就给大家介绍具体介绍PHP使用date()函数获取当前时间的方法,希望对你们有所帮助。 date()函数可以将获取到的时间戳转换为更易读的日期和时间格式。当date()函数中不自定义一个时间戳时,将使用当前日期和时间。 下面我们来看看使…

PHP 获取当前访问的URL

<?php /** * 获取当前访问的完整url * return string * date 2020/7/23 */ function getUrl() {// 判断当前页采用的协议是HTTP还是HTTPS // 443端口&#xff1a;即网页浏览端口&#xff0c;主要用于HTTPS服务&#xff0c;是提供加密和通过安全端口传输的另一种HTTP。 $url…

python之点积

数学中点积也就是内积&#xff0c;是指两个向量各自对应位相乘后求和&#xff0c;比如x (x1,x2),y(y1,y2),则x与y的内积结果为x1*y1x2*y2,因此 python中一维数组之间的点积&#xff0c;即为数组各个位乘积之和&#xff0c;如&#xff1a; x1 np.arange(0,9) print(x1) y1 …

点积、叉积、内积、外积

点积、叉积、内积、外积 点积内积 &#xff08;结果标量&#xff09; 叉积外积 (结果矢量) 点积&#xff08;内积、数量积&#xff09;&#xff1a; matlab or python&#xff1a;dot() / np.dot() 数学符号&#xff1a;A.B<a,b> 相乘相加 物理意义&#xff1a; 向量…

点积和叉积在计算机图形学的应用

点积和叉积在计算机图形学中&#xff0c;是最为基础且重要的概念&#xff0c;初学者弄清它的概念的应用&#xff0c;是很重要的。最后一节&#xff0c;是为了加强理解记录&#xff0c;如果不看也是可以的&#xff0c;大家选择观看&#xff0c;有兴趣可以去看原视频&#xff0c;…

线性代数【18】点积和对偶性

前言&#xff1a; 本节&#xff0c;尝试通过线性变换来理解&#xff0c;或者说来表述点积。 在尝试理解的过程中&#xff0c;我们发现了线性变换&#xff0c;尤其是从多维空间到一维空间的线性变换&#xff0c;一定有某个严格的1x2的向量和他对应&#xff0c;这种微妙的而自然…

【Python】详解Numpy中的点积运算

1. 引言 根据数学家的说法&#xff0c;点积是一种运算&#xff0c;它取两个等长的向量作为输入&#xff0c;然后返回一个数字&#xff08;标量&#xff09;。向量A与向量B的点积用符号表示为A•B。在线性代数中&#xff0c;点积是输入向量中每个对应元素的乘积之和。 本文重点…

cuda点积运算

最近在研究并行运算的规约算法&#xff0c;在看《GPU高性能编程CUDA实战》这本书中点积运算时&#xff0c;有些问题想了很久&#xff0c;记录下来&#xff1b; 注点积公式&#xff1a;&#xff08;dot(A,B)a1*b1a2*b2...an*bn&#xff09; 书上例子算点积运算时分为了以下几步…

Unity3D C#数学系列之点积

文章目录 1 定义2 几何意义3 向量a向量b xaxbyaybzazb4 应用案例4.1 求两向量的夹角4.2 判断两向量是否垂直4.3 判断NPC是否在攻击范围内4.4 已知入射光线和表面法线求反射光线 5 项目 1 定义 可知&#xff0c;点积得到的是一个标量&#xff0c;这个标量代表什么呢&#xff1f…

内积、点积和坐标

内积是一个纯数学概念&#xff0c;在向量空间中&#xff0c;只要满足一定的性质&#xff08;正性、定性、可加性、齐性和共轭对称性&#xff09;的函数运算就可以成为内积&#xff0c;因此具体的内积具有很多种形式。 点积是定义在空间上的一种内积&#xff0c;具体的形式为&am…

点积与投影的关系

点积与投影的关系 一个向量在另一个单位向量上的投影长度&#xff0c;等于这两个向量的点积。 怎么理解 a、b、c分别为三个向量&#xff0c;如果有abc&#xff0c;那么c在某个向量上的投影值等于a和b分别在该向量上的投影值相加(反方向的投影为负值) i&#xff0c;j分别是向…

防抖与节流的个人理解及其对应的应用场景

什么是防抖和节流&#xff0c;他们的应用场景有哪些 防抖 (debounce) 防抖&#xff0c;顾名思义&#xff0c;防止抖动&#xff0c;以免把一次事件误认为多次&#xff0c;敲键盘就是一个每天都会接触到的防抖操作。 想要了解一个概念&#xff0c;必先了解概念所应用的场景。在…

JS防抖和节流

欢迎学习交流&#xff01;&#xff01;&#xff01; 持续更新中… 文章目录 防抖节流二者区别应用场景 防抖和节流都是为了项目优化而出现的&#xff0c;官方没有具体定义的&#xff0c;他们的出现主要是为了解决一些短时间内连续执行的事件带来性能上的不佳和内存的消耗巨大等…

手写防抖节流

文章目录 手写前端常用技巧-防抖节流防抖节流1. 首节流2. 尾节流3. 首尾节流 总结 手写前端常用技巧-防抖节流 防抖&#xff1a;当持续触发事件时&#xff0c;一定时间内没有再触发事件&#xff0c;才会在一段时间之后触发事件处理函数。 节流&#xff1a;当持续触发事件时&am…