Как l oop линейная регрессия по множеству подмножеств факторной переменной - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь написать для l oop, который запускает одну и ту же регрессию (одни и те же зависимые и независимые переменные) 4 раза отдельно по 4 различным уровням факторной переменной. Затем я хочу сохранить выходные данные каждой линейной регрессии. Каждый уровень содержит около 500 строк данных.

Моей первоначальной мыслью было сделать что-то подобное, но я новичок в R и других методах итерации.

Regressionresults <- list()

for (i in levels(mydata$factorvariable)) {
  Regressionresults[[i]] <- lm(dependent ~ ., data = mydata)
}

Я подозреваю, что это довольно легко сделать, но я не не знаю как.

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

Большое спасибо заранее!

1 Ответ

2 голосов
/ 24 апреля 2020

Проблемы с кодом в вопросе:

  1. в R обычно лучше не использовать циклы во-первых
  2. условно i используется для последовательного индекса так что это неправильный выбор имени для использования для уровней
  3. тело l oop не делает никаких поднаборов, поэтому он будет присваивать одинаковый результат на каждой итерации
  4. сообщений для У SO должны быть воспроизводимые данные, и вопрос не включает это, а скорее ссылается на объекты без определения их содержания. Пожалуйста, прочтите инструкции вверху страницы тега . Ниже мы использовали встроенный набор данных радужной оболочки для воспроизводимости.

Вот несколько подходов, использующих встроенный кадр данных радужной оболочки для воспроизводимости. Каждый из них приводит к именованному списку, где имена являются уровнями видов.

1) Аргумент подмножества lm Map над уровнями, дающими список:

sublm <- function(x) lm(Petal.Width ~ Sepal.Width, iris, subset = Species == x)
levs <- levels(iris$Species)
Map(sublm, levs)

2) l oop sublm и levs от (1).

L <- list()
for(s in levs) L[[s]] <- sublm(s)

3) nlme или используйте lmList от nlme

library(nlme)
L3 <- mList(Petal.Width ~ Sepal.Width | Species, iris)
coef(L3)
summary(L3)
...