Функция и цикл в обучающем и тестовом наборе с использованием r

#r

#r

Вопрос:

У меня есть несколько временных рядов, и данные одного временного ряда выполняются с 1937 по 1966 год, и я хочу запустить цикл в каждом отдельном временном ряду и построить простую модель на обучающем наборе (первые 20 наборов и оставшиеся 10 наборов используются в качестве тестового набора, и я использую тестовый набор для прогнозирования простогосредняя модель. Любая помощь приветствуется! Данные (у меня есть около 30 данных нескольких временных рядов, и здесь ниже вы получаете первые 3 данных временных рядов):

     Plot    Species Year    Count   Ppt Temp
A      BG  1937    81  33.90833333 14.13181818
A   BG  1938    45  48.18333333 15.14727273
A   BG  1939    96  39.95833333 14.92
A   BG  1940    44  48.36666667 14.27363636
A   BG  1941    24  57.975  14.02
A   BG  1942    8   59.55   13.65727273
A    BG  1943    28  38.3    14.28363636
…………………………………….
A BG 1966  30      33.5          12.366666

A  BD  1937    135 33.90833333 14.13181818
A   BD  1938    91  48.18333333 15.14727273
A   BD  1939    171 39.95833333 14.92
A   BD  1940    88  48.36666667 14.27363636
A   BD  1941    59  57.975  14.02
A   BD  1942    1   59.55   13.65727273
A   BD  1943    1   38.3    14.28363636
……………………………………………………..
A BD   1966   36     28         15.23658

B   BG  1937    34  33.90833333 14.13181818
B   BG  1938    16  48.18333333 15.14727273
B   BG  1939    19  39.95833333 14.92
B   BG  1940    35  48.36666667 14.27363636
B  BG  1941    32  57.975  14.02
B   BG  1942    7   59.55   13.65727273
B  BG  1943    2   38.3    14.28363636
------------------------------------
B BG 1966  4 25   12.259
 

Мой код:

     data$groups <- paste(data$Plot, data$Species, sep = "_")
data_by_plot <- split (data$Count, data$groups)
ly <- lapply(data_by_plot, function(df)){
D<-nrow(df)
Training<-D[1:20,]
Testing<-D[20:30,]
Mean_model<-lm(count~1, data = Training)
Prediction<-Testing$Count[i]- Mean_model$coefficients
)}
 

Ответ №1:

Вы задаете подмножество, из D которого всего 1 число. Вероятно, вы пытались сделать :

 ly <- lapply(data_by_plot, function(df) {
  Training<-df[1:20,]
  Testing<-df[20:30,]
  Mean_model<-lm(count~1, data = Training)
  Prediction<-Testing$Count[i]- Mean_model$coefficients
  return(Prediction)
})
 

Комментарии:

1. вы гуру кода, если я хочу использовать последнюю строку обучающего набора (строка 20) и прогнозировать, используя тестовый набор или строку 21, и прогнозировать 22 тестового набора в пределах одного интервала до 30, как я могу скорректировать свой код? Если бы не было географического барьера, я должен был купить тебе кофе, лол!

2. Еще одна проблема, lapply нужно, чтобы данные были равными по размеру, что вы рекомендуете, если данные имеют неравный размер? Потому что у меня есть другая переменная, которая использует разницу между первой строкой и второй строкой, а первая строка должна быть либо 0, либо NA, и в этом случае мой код не работает?

3. Для прогнозирования вы можете добавить result <- predict(Mean_model, data = Testing) lapply .

4. Это я понял, но у меня есть другой набор данных с неравным количеством затемнений, и lapply не может быть применен, вы знаете другую альтернативу? Приведенный выше код сработал для меня для приведенных выше данных.

5. Вам не нужно использовать одно и то же измерение lapply . Вы можете применить его к данным любого размера.