Как ввести линейную модель со многими факторами

Это может быть основной вопрос, но я нигде не мог найти решение. Если у нас есть фрейм данных со 100 факторами (назовем их от a1 до a100), как можно ввести линейную модель в R? Я понимаю, ты можешь написать

lm(y~ a1*...*a100)

но если имена длинные, то выписать их все займет много времени. Есть ли более быстрый способ? Например, ссылаясь на столбцы или что-то подобное? В некотором роде, если я получу таблицу данных с именем столбца, в котором есть круглые скобки (например, y-max()), как я могу это ввести? Это читается как функция в R, но это не так.

Прошу прощения, если этот вопрос уже задавался, но я не нашел ответа.

Спасибо всем заранее

---Редактировать---

Спасибо за ответы. Однако, если бы мне действительно были нужны термины взаимодействия более высокого порядка, как бы я этого добился? Мне нужно написать сценарий или есть более разумный способ?


person Andreas    schedule 11.12.2013    source источник
comment
просто проверяю: вам на самом деле не нужны все взаимодействия высшего порядка между 100 предикторами, не так ли [именно это технически означает синтаксис формулы, который вы написали выше]? Это будет соответствовать модели с 2^100 терминами... Если вам нужна аддитивная модель всех этих терминов (менее сумасшедшая), см. связанный вопрос выше.   -  person Ben Bolker    schedule 11.12.2013
comment
для y-max() следует использовать обратные кавычки `y-max()`   -  person Ben Bolker    schedule 11.12.2013


Ответы (2)


если вы хотите включить все остальные, достаточно y~., но если вам нужны некоторые выбранные переменные, скажем, от 2 до 50, 52-100. вы можете сделать что-то вроде этого?

vars<-names(df)[c(2:50,52:101)] #or whatever..
covs<-paste(vars, collapse="+")
model<-paste("y~",covs)
df.lm<-lm(as.formula(model), data=df)
person Ananta    schedule 11.12.2013

Многие из этих вещей можно понять, прочитав руководство Introduction to R., который поставляется вместе с R при его загрузке.

Как правило, фактор со многими уровнями хранится как одна переменная:

treat <- c("control", "placebo", "placebo", "control", "drugA", "control", 
           "drugB", ...)

Если это так, вы можете просто использовать lm(y~treat), и R сделает это за вас. С другой стороны, если у вас есть фрейм данных с только от y и от a1 до a100, вы можете использовать lm(y~., my.data), и R позаботится и об этом за вас.

person gung - Reinstate Monica    schedule 11.12.2013