Как использовать combn для множественной регрессии (или альтернативы)? - PullRequest
0 голосов
/ 04 января 2019

Я хочу получить коэффициенты регрессии и подогнать статистику от одного зависимого регресса по всем комбинациям двух других независимых факторов.

То, что у меня есть - это такие данные (обратите внимание на NA):

H<-data.frame(replicate(10,sample(0:20,10,rep=TRUE))) 
H[2,3]<-NA
names(H)<-c("dep",letters[1:9])

Итак, я хочу регрессировать "ind" для всех этих комбинаций, используя lm.

apply(combn(names(H)[2:9],2), MARGIN=2, FUN=paste, collapse="*")

"axb" "axc" "axd" "axe" "axf" "axg" ... и т. Д.

По одному, я мог получить то, что хочу:

ab<-data.frame(ind="a*b",cbind(data.frame(glance(lm(data=H,dep~a*b))),
t(data.frame(unlist((lm(data=H,dep~a*b)[1]))))
))
names(ab)[13:16]<-c("int","coef1","coef2","coefby")
ac<-data.frame(ind="a*c",cbind(data.frame(glance(lm(data=H,dep~a*c))),
                              t(data.frame(unlist((lm(data=H,dep~a*c)[1]))))
))
names(ac)[13:16]<-c("int","coef1","coef2","coefby")
rbind(ab,ac)

Что я хочу - это либо все эти коэффициенты и статистика, либо, по крайней мере, коэффициенты модели и r.squared.

Кто-то уже показал , как почти то же самое, используя combn. Но когда я попытался изменить это, используя glance вместо coefs

  fun <- function(x) glance(lm(dep~paste(x, collapse="*"), data=H))[[1]][1]
combn(names(H[2:10]), 2, fun)

Я получил ошибку. Я подумал, что, может быть, мне нужно попробовать повторить «dep» 36 раз, по одному на каждую комбинацию из двух факторов, но этого не произошло.

     Error in model.frame.default(formula = dep ~ paste(x, collapse = "*"),  : 
  variable lengths differ (found for 'paste(x, collapse = "*")') 

Как мне получить один коэффициент за раз или все из них, для всех возможных комбинаций многократной регрессии dep ~ x * y (где «dep» всегда является моей зависимой переменной y)? Спасибо!

1 Ответ

0 голосов
/ 04 января 2019

Публикация в качестве ответа, поскольку, по-видимому, это сработало:

Я не уверен, где вы взяли код dep~paste(x, collapse="*"), использование paste внутри формулы не сработает, и я не вижу, чтобы это было где-то на странице, на которую вы ссылаетесь. Вам нужно построить полную формулу в виде строки. Попробуйте что-то вроде этого:

formula = as.formula(paste("dep ~", paste(x, collapse = "*")))

В следующий раз, пожалуйста, покажите код, который вы используете для вызова функции, а не только саму функцию.

Вам также может быть интересен пакет leaps, если вы просто хотите «лучшую» модель, а не каждую модель. («Лучший» в кавычках, потому что это ужасный способ сделать выбор модели в целом, нарушая всевозможные статистические допущения для множественных сравнений и т. П. Вместо этого проверьте LASSO для лучшего способа.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...