Есть ли способ проверить регрессию по всем переменным (зависимым) в данных - PullRequest
2 голосов
/ 13 октября 2019

есть способ сделать все переменные целевой переменной и сравнить результаты регрессии с другими независимыми переменными. Например,

df
Date         Var1       Var2    Var3
27/9/2019     12         45      59
28/9/2019     34         43      54
29/9/2019     45         23      40

Обычно, если вы хотите увидеть связь между Var1 и Var2, я использую приведенный ниже код

lm(Var1 ~ Var2, data = myData)

В случае, если я хочу увидеть результаты для всех переменных (Var1, Var2и Var3) как, в одном случае, Var1 является зависимой переменной, а остальные (Var2 и Var3) независимы. Затем 2 экземпляра, Var2 является зависимой переменной, а остальные (Var1 и Var3) независимы и так далее. Есть ли способ сделать это?

Ответы [ 3 ]

2 голосов
/ 13 октября 2019

Вы можете использовать что-то вроде этого, чтобы получить необходимые формулы:

vars <- names(df)[-1] # we can eliminate the dates

forms <- lapply(1:length(vars),
       function(i) formula(paste(vars[i], "~", paste(vars[-i], collapse = "+")))
       )

Вывод:

[[1]]
Var1 ~ Var2 + Var3
<environment: 0x7fdaaa63abd0>

[[2]]
Var2 ~ Var1 + Var3
<environment: 0x7fdaaa63c508>

[[3]]
Var3 ~ Var1 + Var2
<environment: 0x7fdaaec0d2a8>

Тогда вам просто нужно передать каждую формулу в lm in lapply:

mods <- lapply(forms, lm, data = df)

Вывод:

[[1]]

Call:
FUN(formula = X[[i]], data = ..1)

Coefficients:
(Intercept)         Var2         Var3  
    196.403        3.514       -5.806  


[[2]]

Call:
FUN(formula = X[[i]], data = ..1)

Coefficients:
(Intercept)         Var1         Var3  
   -55.8933       0.2846       1.6522  


[[3]]

Call:
FUN(formula = X[[i]], data = ..1)

Coefficients:
(Intercept)         Var1         Var2  
    33.8301      -0.1722       0.6053 
0 голосов
/ 13 октября 2019

Следующее основано на ответах на эти вопросы: 1 , 2 и 3 . Смотрите объяснения там.

Основное отличие состоит в том, что он проходит (lapply) по столбцам входного набора данных и создает полные модели, в которых каждый из этих векторов-столбцов является ответом, а все остальные - предикторами. Затем драгирует полную подгонку модели.

library(MuMIn)

model_list <- lapply(names(df1), function(resp){
  fmla <- as.formula(paste(resp, "~ ."))
  print(fmla)
  full <- lm(fmla, data = df1, na.action = na.fail)
  dredge(full)
})

model_list

Проверка кода создания данных.

set.seed(1234)
df1 <- replicate(3, sample(10:99, 100, TRUE))
df1 <- as.data.frame(df1)
names(df1) <- paste0("Var", 1:3)
0 голосов
/ 13 октября 2019

Если вы хотите регрессировать Var1 для всех остальных переменных, вы можете сделать следующее:

 lm(Var1 ~. , data = myData)

Если вы просто хотите выбрать больше одной переменной на вкладке, чем вы также можете использовать:

lm(Var1 ~ Var2 + Var3, data = myData)
...