Как запустить регрессию с наличием постоянного и линейного тренда времени в R?

У меня есть 2 временных ряда X и Y.

Я уже знал, как запустить регрессию с наличием константы, представленной следующим уравнением:

Регрессия (уравнение с константой), показанная справа выше, я имитирую, запустив код:

model_1 <- lm(y ~ x)
summary(model_1)

Но я бы хотел запустить регрессию с наличием постоянного и линейного временного тренда, представленного следующим уравнением:

Какой код следует использовать для запуска такой регрессии в R?

Будем очень благодарны любой помощи.

1 ответ

Роланд, ваша базовая задача решает проблему "временного тренда с добавлением" как программно, так и не-программно: Ниже adfcs функция adfcs в моем пакете causfinder (пакет для системного анализа условных и частичных причин:

Я написал A ugmented D ickey- F uller тестовый код, который учитывает использование одного и того же (общего) подвыбора для всех заказов на отставание для процесса авторегрессии (техническая информация: во всех процедурах выбора отставания в эконометрике, для определения правильного оптимального минимального запаздывания необходимо использовать тот же подвыбор. См. Seq_along для примера ct ниже:

adfcs <- function(t, max = floor(12*(length(t)/100)^(1/4)), type = c("c")) {
x <- ts(t)
x1d <- diff(x, differences=1)
x1l <- lag(x, -1)

x_names <- c("x1d", "x1l", sapply(1:max, function(i) paste("x1d", i, "l", sep="")))
for (i in as.integer(1:max)) { assign(x_names[i+2], lag(x1d, -i)) }
DLDlag <- do.call(ts.intersect, sapply(x_names, as.symbol))
DLDlag.df <- data.frame(DLDlag, obspts = c(time(DLDlag)))
DifferenceLags <- as.vector(names(DLDlag.df), mode="any")[3: (length(DLDlag.df)-1)]

lmresults <- array(list())
SBCvalues <- array(list())
AICvalues <- array(list())

for (i in as.integer(0:max)) { 

if (type==c("nc")) { 
if (i == 0) { lmresults[[max+1]] <- lm(as.formula(paste("x1d ~x1l")),data=DLDlag.df) 
SBCvalues[[max+1]] <- BIC(lmresults[[max+1]])
AICvalues[[max+1]] <- AIC(lmresults[[max+1]]) }
if (i > 0) { lmresults[[i]] <- lm(as.formula(paste("x1d ~ x1l+", paste(DifferenceLags[1:i], collapse="+"))),data=DLDlag.df) 
SBCvalues[[i]] <- BIC(lmresults[[i]])
AICvalues[[i]] <- AIC(lmresults[[i]]) }
}

if (type==c("c")) { 
if (i == 0) { lmresults[[max+1]] <- lm(as.formula(paste("x1d ~1+x1l")),data=DLDlag.df) 
SBCvalues[[max+1]] <- BIC(lmresults[[max+1]])
AICvalues[[max+1]] <- AIC(lmresults[[max+1]]) }
if (i > 0) { lmresults[[i]] <- lm(as.formula(paste("x1d ~ 1+x1l+", paste(DifferenceLags[1:i], collapse="+"))),data=DLDlag.df) 
SBCvalues[[i]] <- BIC(lmresults[[i]])
AICvalues[[i]] <- AIC(lmresults[[i]]) }
}

if (type==c("ct")) { 
if (i == 0) { lmresults[[max+1]] <- lm(as.formula(paste("x1d ~ 1+x1l+seq_along(x1d)",collapse="")),data=DLDlag.df) 
SBCvalues[[max+1]] <- BIC(lmresults[[max+1]])
AICvalues[[max+1]] <- AIC(lmresults[[max+1]]) }
if (i > 0) { lmresults[[i]] <- lm(as.formula(paste("x1d ~ 1+x1l+seq_along(x1d)+",paste(DifferenceLags[1:i], collapse="+"))),data=DLDlag.df) 
SBCvalues[[i]] <- BIC(lmresults[[i]])
AICvalues[[i]] <- AIC(lmresults[[i]]) }
}

}

list(which.min(SBCvalues), which.min(AICvalues))
as.data.frame(cbind(SBCvalues, AICvalues)) 
typespecified <- type
if (which.min(SBCvalues)==max+1) {
scs <- (max+2)-(0+1)
adfcs <- unitrootTest(x[scs:length(x)], lags = 0, type = typespecified) 
} else {
scs <- (max+2)-(which.min(SBCvalues)+1)
adfcs <- unitrootTest(x[scs:length(x)], lags =which.min(SBCvalues), type = typespecified)
 }
adfcs 
}

Примечание: добавление временной тенденции не является программным:

x <- rnorm (10) x1l <- lag (x, -1) lm (x ~ 1+ x1l + seq_along (x)) # Вызов: # lm (формула=x ~ 1 + x1l + seq_along (x)) # Коэффициенты: # (перехват) x1l seq_along (x) # -2.107e -1 6 1.000e + 00 2.645e -1 7

..... Я проверил adfcs и дал тот же результат с Eviews, когда правильный расчет (в Eviews) сделан: Примечание: в Eviews (версия <= 7.2) один и тот же (общий) суб-образец не используется в тестах ADF, и поэтому ADF Eviews ошибочен! Правильная и правильная реализация вышеуказанного кода в Eviews заключается в следующем:

1. Дважды щелкните переменную; Посмотреть; единичный корневой тест; ADF; "Уровень, перехват"; Lag Length: Automatic Selection Schwarz: Maximum Lags = 14 ". (14 изменений в соответствии с набором данных)

2. Упорядочить подвыборку, удалив первые образцы: Предположим, что данные были в 1960Q1 2009Q4 (200 obs). Затем сначала извлекаются первые 14 + 1 obs из образца: пары образцов - выборки: 1963Q4 2009Q4. После того, как будет использоваться один и тот же суб-образец, выполняется АПД.

3. Дважды щелкните одну и ту же переменную еще раз; Посмотреть; единичный корневой тест; ADF; "Уровень, перехват"; Lag Length: Automatic Selection Schwarz: Maximum Lags = 14 "(здесь может появиться другой номер, отличный от 14, из-за эффекта суб-выборки, удалить этот номер в поле и ввести 14).

licensed under cc by-sa 3.0 with attribution.