Чтобы упростить воспроизведение, я использую набор данных goats
из пакета ResourceSelection , который содержит пространственные данные для используемых (STATUS == 1
) и «доступных» (STATUS == 0
) GPS-местоположений горыкозы.ID
для отдельных (n = 10) и ELEVATION
, ..., TASP
- атрибуты точек.
library(ResourceSelection)
head(goats)
STATUS ID ELEVATION SLOPE ET ASPECT HLI TASP
1 1 1 651 38.5216 35.3553 243.1131 0.9175926 0.9468804
2 1 1 660 39.6927 70.7107 270.0000 0.8840338 0.6986293
3 1 1 316 20.5477 50.0000 279.2110 0.7131423 0.5749115
4 1 1 334 34.0783 35.3553 266.1859 0.8643775 0.7447368
5 1 1 454 41.6187 25.0000 258.3106 0.9349181 0.8292587
6 1 1 343 28.4694 103.0776 237.0426 0.8254866 0.9756112
Я бы хотел добавить glm
к каждому человеку, сгруппированному по Season
(создан ниже), но структура модели варьируется в зависимости от сезона.Я использовал несколько полезных SO сообщений и других ресурсов , но все они соответствуют одной модели для каждой группы, где, как мне хотелось бы, для каждой группы Season
подходят разные модели..
#Add a new `Season` field
library(tidyverse)
goats <- goats %>%
mutate(Season = if_else(ID %in% 1:3, "Summer",
if_else(ID %in% 4:7, "Winter", "Fall")))
Ниже я создаю функцию построения модели и определяю модель, специфичную для каждого сезона, используя if else
.
SeasonalMods <- function(df) {
#Models for Archery
if(Season == "Summer") {
glm(STATUS ~ SLOPE + I(SLOPE^2), data = df)
#Models for Winter
} else if (Season == "Winter") {
glm(STATUS ~ SLOPE + ASPECT + TASP, data = df)
#Models for Fall
} else if (Season == "Fall") {
glm(STATUS ~ ELEVATION + SLOPE + ET + ASPECT + HLI + TASP, data = df)}
}
. Затем я пытаюсь сопоставить функцию с сгруппированными данными.и создать новый список-столбцы следующим образом.
ModelFits <- goats %>%
group_by(Season, ID) %>%
nest() %>%
mutate(fits = map(data, SeasonalMods),
tidied = map(fits, tidy),
glanced = map(fits, glance),
augmented = map(fits, augment))
, которая приводит к следующей ошибке:
Error in mutate_impl(.data, dots) :
Evaluation error: object 'Season' not found
Я не уверен, как правильно указать Season
в функции SeasonalMods
, чтобы ее можно было интерпретировать как map()
.
Я пытался добавить df$
перед Season
в операторах if
и else if
, но это также приводит к ошибке.