#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)?