Интерпретация коэффициентов полинома 2 — й степени в R

#r #regression #lm #polynomials #poly

Вопрос:

Я сделал поверхность тренда, используя функции lm и poly в R. Краткое изложение моих результатов выглядит следующим образом:

 > summary(tls.lm)

Call:
lm(formula = DEM_small_domain_TLS_5cm ~ poly(x, y, degree = 2), 
    data = tlsDF)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.09543 -0.01378 -0.00087  0.01260  0.10404 

Coefficients:
                           Estimate Std. Error  t value Pr(>|t|)    
(Intercept)                2.08e 01   4.98e-05 416945.4   <2e-16 ***
poly(x, y, degree = 2)1.0 -1.51e 01   2.00e-02   -754.0   <2e-16 ***
poly(x, y, degree = 2)2.0  6.79e-01   2.00e-02     33.9   <2e-16 ***
poly(x, y, degree = 2)0.1 -2.01e 01   2.00e-02  -1007.3   <2e-16 ***
poly(x, y, degree = 2)1.1 -7.17e 02   8.04e 00    -89.2   <2e-16 ***
poly(x, y, degree = 2)0.2 -6.02e-01   2.00e-02    -30.1   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.02 on 161446 degrees of freedom
Multiple R-squared:  0.908, Adjusted R-squared:  0.908 
F-statistic: 3.19e 05 on 5 and 161446 DF,  p-value: <2e-16
 

Как перевести коэффициенты в уравнение? Я попробовал следующее:

Перехват коэффициент 1,0 * x коэффициент 2,0 * x^2 коэффициент 1,1 * x * y коэффициент 0,1 * y коэффициент 0,2 * y^2

Я также попытался заменить x и y в приведенной выше формуле, но результаты заполнения этих уравнений некоторыми извлеченными значениями x и y полностью отличаются от (правильно построенного) результата поверхности тренда.

Отредактируйте На изображении ниже показаны различия между построенными поверхностями тренда для poly(…, raw=F) и poly(…,raw=T). Рекомендуется использовать raw=T, но мне больше нравится поверхность raw=F. Есть ли еще способ разобраться в приведенных выше коэффициентах? Поли_рав_различие

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

1. В формуле попробуйте poly(x, y, degree = 2, raw = TRUE) .

2. @RuiBarradas: Спасибо за предложение. Это дает разные коэффициенты, и формула при использовании raw=TRUE, похоже, работает. Однако я все еще не понимаю, что построенная поверхность тренда в приведенном выше примере правильна, но каким-то образом коэффициенты не могут быть переведены в правильное уравнение, которое является источником этой поверхности тренда.

3. Без raw=TRUE возвращенных многочленов, цитирующих документацию, все они ортогональны постоянному многочлену степени 0 . Что вам нужно, так это необработанные многочлены.

4. @RuiBarradas: Я отредактировал свой вопрос, чтобы показать, что существует разница между поверхностями тренда raw=T и raw=F. Поскольку мне больше нравится поверхность raw=F, есть ли способ по-прежнему понимать коэффициенты, сопровождающие эту модель?

Ответ №1:

Как предложил @Rui, вы должны добавить raw=T в качестве аргумента poly : вот пример со встроенным набором mtcars данных .

 data("mtcars")
fit <- lm(formula = mpg ~ poly(disp, hp, degree = 2,raw = T), 
   data = mtcars)
summary(fit)
#coefficient of regression
coef <- coef(fit)
#use coefficient for predict outcome
p <- function(coef, x, y) {
  coef[1] coef[2]*x coef[3]*x^2 coef[4]*y coef[5]*x*y coef[6]*y^2
}

p1 <- round(p(coef,mtcars$disp,mtcars$hp),11)
p2 <- round(unname(predict(fit,mtcars[,3:4])),11)
identical(p1,p2)
 

2 вектора идентичны с точностью до 11 знаков после запятой

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

1. Спасибо за ваш ответ. Как показано в отредактированном вопросе, мне больше нравятся результаты, когда «raw = F». Если я использую вашу функцию p, результаты показывают странные числа, не соответствующие выходу функции lm poly. Как я должен интерпретировать коэффициенты, когда poly(…, raw=F)?