Повторите тот же код, но меняя имена столбцов в каждом цикле - PullRequest
0 голосов
/ 08 мая 2020

У меня есть скрипт на языке r для вычисления остатков состояния тела. Я хотел бы применить этот код к каждому столбцу, который соответствует определенной категории c человека.

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

1) Выберите интересующие строки

Data1 = RawData %>% select(ID,temperature, Bodysize1, mass1, year) %>%  filter((temperature %in% c(20:29) & Bodysize1 %in% c(20:100) & mass1 %in% c(15:40))

2) Создайте новую модель с созданными данными

Model1 =lmer(log(mass1) ~ log(Bodysize1) + temperature + (1|year), data = Data1)

3) Извлеките остатки и добавьте ID к остаткам

ResModel1 = resid(Model1)
ID=Data1$ID
Res1 =data.frame(ResModel1 ,ID)

4) Добавьте остатки в мои RawData

RawData2.0 = merge(RawData, Res1, by = c("ID"), all.x = T)

Чтобы избежать повторного запуска этого кода и ручного изменения всех 1 на 2, а затем всех 2 на 3 ... et c есть ли способ сделать это автоматически c с циклами и семейством приложений?

Мои данные

  ID        TEMPERATURE  BODYSIZE1 MASS1 BODYSIZE2 MASS2    YEAR
81-012       0.03830645     200    1450     205    1425     1981
84-069       0.26923078     200    1473     205    1498     1984
84-134       0.32692307     209    1448     195    1323     1984
84-145       0.27884614     197    1373     197    1498     1984
84-190       0.31129807     191    1248     195    1323     1984
85-155       0.33056709     198    1637     229    1988     1985

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Вы можете попробовать: i) создать тиббл, в первом столбце перечислить все переменные dep в виде строк, ii) указать ваши модели независимых переменных во втором столбце, iii) создать формулу в третьем столбце, iv) запустить модель в четвертом столбце


df <- tibble(dep = paste0("log(var",seq(1,10,1),")"),
             x = "~ your_x_vars") %>%
  mutate(formula = as.formula(paste0(dep,x))) %>%
  mutate(reg = map(formula, ~lm(as.formula(.x), data=df) ))

тогда вы можете легко извлечь остатки

0 голосов
/ 08 мая 2020

Без данных примера сложно сказать, будет ли это работать, но, возможно, создание функции может упростить ваш рабочий процесс

библиотека (tidyverse)

get_resid <- function(df,filters) {

df_to_model <- df %>% filter({{filters}})
df_to_keep <- df <- filter({{filters}},.preserve = FALSE)

Data1 <-  df_to_model %>%
  select(ID,temperature, Bodysize1, mass1, year)

Model1 <- lmer(log(mass1) ~ log(Bodysize1) + temperature + (1|year), data = Data1)


ResModel1 <-  resid(Model1)
ID <- Data1$ID
Res1 <- data.frame(ResModel1 ,ID)

Res1 %>% 
  bind_rows(df_to_keep)

}

Тогда вы можете использовать эту функцию в ваших трубах

RawData %>% 
  get_resid(temperature %in% c(20:29) & Bodysize1 %in% c(20:100) & mass1 %in% c(15:40))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...