2015-03-13 4 views
1

Я хотел бы указать квадратичную регрессию по всем доступным факторам в наборе данных с линейным, парным взаимодействием и квадратичными членами. В качестве примера, если у меня естьR: квадратичная регрессия всех факторов: как указать формулу?

y<-rnorm(1000) 
A<-sample(1:4,1000,replace=TRUE) 
B<-sample(1:2,1000,replace=TRUE) 
C<-sample(1:10,1000,replace=TRUE) 
Dataset<-data.frame(y,A,B,C) 

И если я хотел бы регрессировать y на всех моих факторов таким образом я хотел бы иметь модель, как

model<-lm(y~.+.^2+I(A^2)+I(B^2)+I(C^2),data=Dataset) 

, но я хотел бы знать, есть ли выражение, которое определяет все квадратичные члены от всех факторов, поэтому мне не нужно указывать все I(A^2)+I(B^2)+I(C^2).

Я попытался

model<-lm(y~.+.^2+I(.^2),data=Dataset) 

и он не работает. Можете ли вы помочь мне в этом? Спасибо.

+0

Привет, вы можете разумно использовать ** poly ** функцию, и вы должны взглянуть на этот пост [link] (http: //stackoverflow.com/questions/28729512/polynomial-regression-in-r-with-multiple-independent-variables/28730674#28730674) для более подробной информации. –

+0

Является ли модель <-lm (y ~.^2, data = Dataset) достаточной? – duffymo

+0

@duffymo, определяющий множество переменных на квадрат без оператора Identity(), интерпретируется как «все отдельные факторы и все взаимодействия 2-й степени». – agenis

ответ

0

Я не вижу прямого решения, поэтому я придумал способ восстановить формулу. Это работает для любого числа переменных:

library(dplyr) 
data <- mtcars 
y <- "cyl" 
formula <- paste0("I(", names(data)[names(data)!=y], "^2)+", collapse="") %>% 
    paste(y, "~", .) %>% 
    substr(., 1, nchar(.)-1) %>% 
    as.formula 
lm(data=mtcars, formula) 

Вы можете изменить его, указав отдельные факторы и взаимодействия. Библиотека dplyr здесь просто для ясности скрипта (%>% operator)

+0

Я не могу написать предложенную формулу: 'Ошибка в nchar (.): object '.' не найден' – BrunoCAfonso

+0

Я не воспроизвожу ошибку. Вы загрузили пакет? – agenis

+1

Да, да. Я только что установил его сегодня, и я снова запустился, и появилось такое же сообщение об ошибке. Я использую R 3.0.3 и платформу x86_64-w64-mingw32/x64 (64-разрядная версия). Может ли это оправдать разницу в производительности? – BrunoCAfonso