2017-01-04 6 views
3

У меня есть набор данных с 70 переменными, и я хочу попробовать полиномиальную регрессию. Если число столбцов было три/четыре, я мог бы просто рука коды что-то вроде этого -Как смоделировать полиномиальную регрессию в R?

model <- lm(y ~ poly(var1,3) + poly(var2,3) + poly(var4,4) 

Как бы мы идти об этом, если у нас есть 70 переменных? Должны ли мы вводить вручную имена всех переменных или есть более простой метод?

+0

У вас есть какие-либо предварительные знания (например, от бизнеса) о степени полинома, который должен быть установлен для каждой переменной? в общем случае полиномиальная регрессия имеет тенденцию к переобучению и менее обобщаема. –

+0

Здесь я знаю, что означает каждая переменная, но не имеет понятия об их степени полинома. Простая линейная модель дает очень низкие значения Rsquared (около 0,02). И я хочу знать, как мы моделируем полиномиальную регрессию вообще ... –

+4

Ваш первый вопрос: «Как мы будем это делать, если у нас есть 70 переменных?» можно рассматривать как вопрос программирования, если это означает, как мы производим это автоматизированным способом по многим переменным. Ваш второй вопрос не соответствует теме SO и нашел бы лучший дом на [CV] (http://stats.stackexchange.com/). Если, как следует из вашего комментария, ваш основной вопрос относится к статистическому моделированию, я бы исключил этот вопрос и поставил вопрос о CV, подчеркивая этот момент. – lmo

ответ

4

Вы можете вставить формулу, если все переменные названы систематически:

form <- as.formula(paste("y~", paste0("poly(var", 1:10, ")", collapse="+"))) 

или (для полинома 3-й степени):

form <- as.formula(paste("y~", paste0("poly(var", 1:10, ", degree=3)", collapse="+"))) 

Кроме того, если у вас есть только зависимая переменные y и представляющие интерес интересы (которые имеют несистемные названия) в вашем наборе данных df, вы можете попробовать

ind.y <- grep("y", colnames(df)) 
form <- as.formula(paste("y~", paste0("poly(", colnames(df[, -ind.y]), ", degree=3)", collapse="+"))) 
+0

Две точки - 1. Является ли степень установленной на один автоматически? 2. Мы можем нуждаться в разной степени, не так ли? например, poly (var1,3) + poly (var2,1) –

+0

1.) да, но вы можете включить градус в вставленную формулу, см. править – adibender

+3

2.) да, но, как указано в комментариях выше, t хотите установить степень полинома заранее или лучше, но использовать глобальные полиномы. Обычно предпочтительны штрафные сплайны, например, с использованием функции 'gam' из пакета' mgcv'. Также вы, вероятно, захотите сделать выбор переменной, но, как упоминалось ранее, это вопрос для Cross Validated – adibender