У меня возникли проблемы с этим кодом, цель которого - запустить регрессию для разных блоков, каждый из которых имеет 161 точку данных. Похоже, что он не принимает во внимание все значения number_of_regressions, которые представляют собой последовательность чисел от 0 до 86 на 1.

Ошибка: ошибка в x [[jj]] <- v: попытка выбрать менее одного элемента в integerOneIndex

n <- 161

 # Creates a sequence of numbers to replace i in the for loop 

    number_of_regressions <- c(0:86) # (from 0 to 86)


    # Regression

    for(i in number_of_regressions) {
      Regression <- lm(y ~ x + z, data = Data[(1+n*i):(n*(i+1)),])
      Intercept[i] <- summary(Regression)$coefficients[1,1]
      x[i] <- summary(Regression)$coefficients[2,1]

    }

Цель состоит в том, чтобы запустить несколько регрессий от первой точки данных до 161-й, а затем от 162 до 322, это означает создание перемещаемых блоков по 161 точку данных в каждой из них.

Я ценю любую помощь.

r
3
Glofa 15 Апр 2020 в 16:33

1 ответ

Лучший ответ

Вы можете попробовать что-то вроде этого, в основном настройте data.frame, первый столбец - это то, что вы повторяете:

Data = data.frame(matrix(rnorm(150000),ncol=3))
colnames(Data) = c("x","y","z")

results = data.frame(n=0:86,Intercept=NA,x=NA)

n <- 161
number_of_regressions <- c(0:86) 
for(i in number_of_regressions) {
      Regression <- lm(y ~ x + z, data = Data[(1+n*i):(n*(i+1)),])
      results[results$n==i,c("Intercept","x")] = summary(Regression)$coefficients[1:2,1]
}
0
StupidWolf 15 Апр 2020 в 14:31