Линейный регрессионный анализ - скользящий по строкам
Мне нужно предложение о том, как я получаю результаты моего регрессионного анализа в объект.
Я не хочу проводить регрессионный анализ по ряду и с интервалом в 20 дней. Объект Slope должен сохранять результаты (уклоны) анализа регрессий каждого дня по окну.
#Loading Library
require(quantmod)
#Initiation of Example
mc_result <- matrix(sample(c(1:200)), ncol = 200, nrow =1)
mc_result1 <- matrix(sample(c(1:200)), ncol =200, nrow =1)
mc_result <- rbind(mc_result, mc_result1)
a <- c(1:200)
Slope <- matrix(ncol=2, nrow=181)
Осторожно, эта петля не работает. Цикл должен применять Rollapply по строке и сохранять результаты для каждого дня в объекте Slope.
Тем не менее, так должен выглядеть результат, но с изменением значений наклона. На данный момент значение уклона стабильно, и я не знаю почему.
for (i in 1:2) {
Slope[,i] <- rollapply(data =mc_result[i,], width=20,
FUN = function(z)
summary(lm(mc_result[i,] ~ a, data = as.data.frame(z)))$coefficients[2], by.column = FALSE)
}
1 ответ
Я думаю, что вам нужно следующее (в вашем коде ни один из mc_result[i,] или a не переворачивает индексы в данных, поэтому коэффициенты линейной регрессии не меняются, поскольку вы тренируетесь только на одном наборе данных, только z меняется, вам нужно изменить код на что-то вроде следующего):
#Loading Library
require(quantmod)
#Initiation of Example
mc_result <- matrix(sample(c(1:200)), ncol = 200, nrow =1)
mc_result1 <- matrix(sample(c(1:200)), ncol =200, nrow =1)
mc_result <- rbind(mc_result, mc_result1)
a <- c(1:200)
Slope <- matrix(ncol=2, nrow=181)
for (i in 1:2) {
Slope[,i] <- rollapply(data = 1:200, width=20,
FUN = function(z) {
summary(lm(mc_result[i,z] ~ a[z]))$coefficients[2]
}, by.column = FALSE)
}
head(Slope)
[,1] [,2]
[1,] 1.3909774 2.0278195
[2,] 1.0315789 2.8421053
[3,] 1.5082707 2.8571429
[4,] 0.0481203 1.6917293
[5,] 0.2969925 0.2060150
[6,] 1.3526316 0.6842105