Существуют ли методы для идентификации квадратичных компонентов в линейной модели с R?

#r #statistics #linear-regression

#r #Статистика #линейная регрессия

Вопрос:

Предположим, у нас есть аддитивная модель вида y = x1 x2 … с большим количеством переменных. Существует ли в R процедура для идентификации переменных, которые следует рассматривать как проявляющие квадратичный эффект? Я знаю, что преобразование Бокса-Кокса позволяет идентифицировать ссылки для y, но как насчет x ? Если имеется всего несколько переменных, их легко протестировать, но как насчет хранения целого набора?

С уважением из Германии

Ответ №1:

Вероятно, вас не интересует, нужны ли вам квадратичные термины, а скорее является ли какой-либо из эффектов нелинейным. В то время как квадратичный член может выявить некоторые из них, существуют некоторые явно неквадратичные эффекты, которые не являются линейными. Есть много способов сделать это, но мне нравится использовать ограниченные кубические сплайны, реализованные в пакетах Hmisc и Design .

Например:

 library(Design)
x1 <- runif(200)
x2 <- runif(200)
x3 <- runif(200)
x4 <- runif(200)
y <- x1   x2   rnorm(200)
f1    <- ols(y ~ rcs(x1,4)   rcs(x2,4)   rcs(x3,4)   rcs(x4,4))

> anova(f1)
                Analysis of Variance          Response: y 

 Factor          d.f. Partial SS  MS         F    P     
 x1                3   19.2033740 6.40112466 7.96 0.0001
  Nonlinear        2    5.6426655 2.82133277 3.51 0.0319
 x2                3   10.6042751 3.53475836 4.40 0.0051
  Nonlinear        2    0.5047319 0.25236593 0.31 0.7309
 x3                3    3.0844406 1.02814688 1.28 0.2829
  Nonlinear        2    0.1474818 0.07374091 0.09 0.9124
 x4                3    4.1770965 1.39236549 1.73 0.1619
  Nonlinear        2    4.1770665 2.08853325 2.60 0.0771
 TOTAL NONLINEAR   8    9.5322762 1.19153452 1.48 0.1660
 REGRESSION       12   37.1220435 3.09350362 3.85 <.0001
 ERROR           187  150.3064834 0.80377799      
  

ols по сути, является эквивалентом lm . Обратите внимание на таблицу ANOVA в выходных данных: в ней есть тест на нелинейность эффектов, включая глобальный тест.

Комментарии:

1. 1 Согласен. Если у вас достаточно цифр, вы также можете исследовать скрещенные термины RCS: rcs (x1, 3) * rcs (x2, 3)

2. В вашем примере x1 имеет нелинейный эффект (низкое значение p), верно? Тогда, как вы могли бы смоделировать это, чтобы хорошо соответствовать данным? и последнее, но не менее важное: в вашем примере эффекты линейны, почему вы обнаружили нелинейный эффект? проблемы с ошибочной спецификацией?

3. @Manoel: вероятной причиной поддельного значимого значения является многократное тестирование. Обратите внимание, что общий тест любого нелинейного эффекта незначителен. Сплайн — это модель для данных, она просто намного более гибкая, чем парабола.

4. 1 за расшифровку вопроса и предложение ограниченных кубических сплайнов вместо простых (и сомнительных) квадратичных эффектов.

Ответ №2:

Если вы хотите создать все двусторонние взаимодействия, вы можете сделать это:

 lm(y ~ (x1   x2   x3)^2, data=dat)
  

Видеть:

 ?formula
  

Комментарии:

1. Я знаю. Извините за мой английский, но это был не мой вопрос 🙂