R: как передать ссылку на переменную в glm или lm?

Так скажем, у меня есть названный вектор:

sorted = c(1,2,3)
names(sorted) = c("A","B","C")

и это будет выглядеть следующим образом:

> sorted
A    B    C
1    2    3

так что это вектор с именем A,B,C и имеет значение 1,2,3 соответственно.

и у меня также есть пример данных:

data.ex = as.data.frame(matrix(rep(c(1,2,3,4),3), nrow = 3, ncol = 3))
colnames(data.ex) = c("A","B","C")

таким образом, этот фрейм данных также имеет 3 столбца с именами A,B,C.

Я хочу только предсказать C, используя значение в A с glm():

fit.ex = glm(formula = C ~ names(sorted)[2],
         data = data.ex,
         family = binomial(link = "logit"))

но тогда я буду получать следующее сообщение об ошибке:

Error in model.frame.default(formula = C ~ names(sorted)[2], data = data.ex,: 
variable lengths differ (found for 'names(sorted)[2]')

я прочитал эту статью здесь и нашел функцию as.name(), но все еще не работает: http://www.ats.ucla.edu/stat/r/pages/looping_strings.htm

и я не могу найти что-то еще, похожее на мою проблему. пожалуйста, если есть другой поток, посвященный этой проблеме, направьте меня к нему! или любая помощь очень ценится!:)

1 ответ

Предоставление ответа на основе комментариев:

sorted = c(A=1,B=2,C=3)
names(sorted) = c("A","B","C")
data.ex = data.frame(A=1:4,B=2:5,C=c(1,0,0,1))

Построить список формул:

forms <- lapply(names(sorted)[1:2],reformulate,response="C")
models <- lapply(forms,glm,data = data.ex,
                 family = binomial(link = "logit"))

Тогда вы можете делать такие вещи, как

t(sapply(models,coef))

plyr Пакет также удобен для такого рода вещей (например, plyr::ldply(models,coef))

Другие вопросы по тегам