在R中具有滞后时间序列数据的动态线性回归中执行循环的问题 [英] Issue with executing a loop in a dynamic linear regression with lagged time time series data in R

查看:28
本文介绍了在R中具有滞后时间序列数据的动态线性回归中执行循环的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

继续下面提到的前面的查询

Regression with lagged time time series data in R

我的目标是提取回归模型的第四个有意义的系数,即p值<;0.05

模型的一般形式为

A ~ Lags(A, 1:2) + Lags(B, 1:2)
我有一个具有10列和24行的数据框Designments_2015Q2。在数据框Designments_2015Q2的前6行下面声明

Deposits_2015Q2

    B1       B2       B3       B4       B5       B6       B7       B8       B9      B10
234174.8 807526.7 93198.03 83191.27 79443.31 79593.98 52686.17 34536.29 70645.93 132601.4
236352.8 804852.0 92187.96 81834.52 77953.43 78687.54 51993.71 36098.29 69301.58 132588.6
227331.2 751653.9 83174.36 80386.75 74743.49 73838.38 50211.90 32020.65 67010.77 126405.7
219533.7 735303.5 79304.15 76730.38 73645.53 73450.54 48976.98 28927.36 64938.26 122845.9
210172.2 704675.6 79827.54 75258.59 69907.54 71725.17 47578.75 28821.78 63474.15 118728.5
198614.2 677182.0 76796.17 72260.30 67320.08 68386.68 45167.51 29215.77 59916.35 114406.4

我可以在没有循环的情况下运行以下代码来提取模型的第四个系数

# Loading the library
library(dyn)

# Performing Dynamic Regression and storing the results in fm
lag <- stats::lag

# Running the regression without loop
fm <- dyn$lm(B1 ~ lag(B1, -(1:2)) + lag(B10, -(1:2)), zoo(Deposits_15Q2_21Q1))

model_summary <- summary(fm)
model_summary

# Extracting the 4th coefficient
Beta <- model_summary$coefficients[5,1]
Beta

# Extracting the p-value of the 4th coefficient
Beta_p_value <- model_summary$coefficients[5,4]
Beta_p_value 

我的目标是创建一个10x10矩阵,我将在其中存储模型第四个重要系数的值。模型将在每列中运行w.r.t。我无法执行以下代码

# Matrix to store the p-values
p=matrix(rep(0,10*10),nrow=10,ncol=10)

# Matrix to store the 4th coefficient values of the model 
K=matrix(rep(0,10*10),nrow=10,ncol=10)

# Binding the data in the data set 
  Deposits=rbind(Deposits_2015Q2$B1,Deposits_2015Q2$B2,Deposits_2015Q2$B3,Deposits_2015Q2$B4,Deposits_2015Q2$B5,Deposits_2015Q2$B6,Deposits_2015Q2$B7,Deposits_2015Q2$B8,Deposits_2015Q2$B9,Deposits_2015Q2$B10)

Deposits

# Converting dataframe into time series

B = zoo(Deposits)


for (i in 1:10){
for (j in 1:10){
if (j!=i){
  fm=dyn$lm(B[i] ~ lag(B[i], -(1:2)) + lag(B[j], -(1:2)))
  p[i,j]=summary(fm)$coefficients[5,4]
}
else{
  p[i,j]=0
  }
 }
}

 for (i in 1:10){
   for (j in 1:10){
   if (p[i,j]>0.05){
     K[i,j]=0
   }
   else {
     K[i,j]=summary(fm)$coefficients[5,1]
   }
 }
}

# Converting the Matrix K into data frame
 dataf <- as.data.frame(K)

我收到的错误消息是

Error in model.frame.default(formula = dyn(B[i] ~ lag(B[i], -(1:2)) +  : 
  variable lengths differ (found for 'lag(B[i], -(1:2))')
  

推荐答案

有几个问题。

  1. B的结构不正确。此外,系列应该存储在列中,而不是行中,并且矩阵或ZOO对象的第i列是B[,i]。
  2. summary(fm)$coefficients[5, 1]summary(fm)$coefficients[5, 4]工作,但最好写为coef(fm)[[5]]coef(summary(fm))[5, 4]
  3. K最好作为矩阵保留,而不是转换为数据框。
  4. 问题中显示的数据行数不足以运行问题。我在结尾处的备注中将示例数据中的行数增加了一倍。
  5. 因为p和K都设置为0,所以不需要再次设置它们。

加上其他一些小改进,

library(dyn)
lag <- stats::lag  # only needed if dplyr is loaded

nc <- ncol(Deposits_2015Q2)
K <- p <- matrix(0, nc, nc)  # coefs and p values
B <- zoo(Deposits_2015Q2)

for (i in 1:nc) {
  for (j in 1:nc) {
    if (i != j) {
      fm <- dyn$lm(B[, i] ~ lag(B[, i], -(1:2)) + lag(B[, j], -(1:2)))
      p[i,j] <- coef(summary(fm))[5, 4]
      if (p[i, j] < 0.5) K[i,j] <- coef(fm)[[5]]
    }
  }
}

注意:

Lines <- "    B1       B2       B3       B4       B5       B6       B7       B8       B9      B10
234174.8 807526.7 93198.03 83191.27 79443.31 79593.98 52686.17 34536.29 70645.93 132601.4
236352.8 804852.0 92187.96 81834.52 77953.43 78687.54 51993.71 36098.29 69301.58 132588.6
227331.2 751653.9 83174.36 80386.75 74743.49 73838.38 50211.90 32020.65 67010.77 126405.7
219533.7 735303.5 79304.15 76730.38 73645.53 73450.54 48976.98 28927.36 64938.26 122845.9
210172.2 704675.6 79827.54 75258.59 69907.54 71725.17 47578.75 28821.78 63474.15 118728.5
198614.2 677182.0 76796.17 72260.30 67320.08 68386.68 45167.51 29215.77 59916.35 114406.4"
Deposits_2015Q2 <- read.table(text = Lines, header = TRUE)[c(1:6, 1:6), ]

这篇关于在R中具有滞后时间序列数据的动态线性回归中执行循环的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆