Подбор ортогональных полиномов в модели

Я хотел бы вписать в свою модель ортогональные многочлены. На данный момент я сначала получаю ортогональные полиномы, используя что-то вроде этого: contr.poly(11)

Затем я создаю новую переменную для линейной, квадратичной и т. д., которую затем могу включить в модель: lm(y~x+p+p_linear, data=d,...)

Есть ли более быстрый способ подогнать ортогональные многочлены в формулу?

Например: lm(y~x+p+I((p - mean(p)/sqrt(440))

Я хотел бы подобрать каждый термин ортогональных полиномов индивидуально (сначала линейный, затем линейный + квадратичный и т.д.)

ТИА.

Обновлять:

data(mtcars)
mtcars$carb <- factor(mtcars$carb)
contrasts(mtcars$carb) <- contr.poly(n=levels(mtcars$carb))
contrasts(mtcars$carb)

mt.mod <- lm(mpg ~ carb, data=mtcars)
summary(mt.mod)

Как я могу шаг за шагом подогнать ортогональные многочлены; сначала carb.L, затем carb.L+carb.Q, а затем carb.L+carb.Q+carb.C


person yokota    schedule 20.06.2015    source источник
comment
Я не понимаю вашего вопроса. Может быть, help("poly") будет вам полезен?   -  person Roland    schedule 20.06.2015
comment
Я обновил свой вопрос выше с примером. Поэтому я установил контрасты для ортогональных многочленов, а затем вписал их в модель. Трудные шаги, которые я предпринимаю, чтобы шаг за шагом подогнать термины, заключаются в создании новых переменных для линейных терминов, членов квадратного уравнения и кубических членов. Было бы неплохо, если бы я мог обрезать этот код.   -  person yokota    schedule 20.06.2015
comment
Это не то, как работают полиномиальные контрасты. Я не понимаю, чего вы надеетесь достичь с помощью этого упражнения.   -  person Roland    schedule 20.06.2015


Ответы (1)


При этом используется функция C для построения полиномиальных контрастов факторной переменной в возрастающей степени. Функция bquote со вспомогательной функцией .() используется для замены значения степени в языковой объект,

sapply(1:3, function(degr){ 
                 form <- as.formula( bquote(mpg ~ C(factor(carb), poly, .(degr)))); 
                 coef( lm(form, data=mtcars))})
[[1]]
               (Intercept) C(factor(carb), poly, 1).L 
                  18.01040                  -11.13885 

[[2]]
               (Intercept) C(factor(carb), poly, 2).L 
                 18.821460                  -8.382298 
C(factor(carb), poly, 2).Q 
                  3.777842 

[[3]]
               (Intercept) C(factor(carb), poly, 3).L 
                18.9100420                 -7.9958797 
C(factor(carb), poly, 3).Q C(factor(carb), poly, 3).C 
                 4.0995446                  0.7565959 

Я (повторно) обнаружил, что этот подход уже был опубликован в Rhelp еще в 2008 году после некоторых подсказок всегда полезного профессора Рипли http://markmail.org/message/jz56m5gztqowa4lp?q=list:org%2Er-project%2Er-help+from:%22David+Winsemius%22+contrasts+poly

person IRTFM    schedule 20.06.2015