Tôi cảm thấy như một vài trong số những câu trả lời này hoàn toàn bỏ lỡ vấn đề. Câu trả lời của Haitao giải quyết các vấn đề tính toán với việc điều chỉnh đa thức thô, nhưng rõ ràng OP đang hỏi về sự khác biệt thống kê giữa hai phương pháp. Đó là, nếu chúng ta có một máy tính hoàn hảo có thể đại diện chính xác cho tất cả các giá trị, tại sao chúng ta lại thích một cách tiếp cận hơn các phương pháp khác?
R2XYX= 0X= 0X
data("iris")
#Raw:
fit.raw <- lm(Petal.Length ~ Petal.Width + I(Petal.Width^2) +
I(Petal.Width^3), data = iris)
summary(fit.raw)
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 1.1034 0.1304 8.464 2.50e-14 ***
#> Petal.Width 1.1527 0.5836 1.975 0.05013 .
#> I(Petal.Width^2) 1.7100 0.5487 3.116 0.00221 **
#> I(Petal.Width^3) -0.5788 0.1408 -4.110 6.57e-05 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.3898 on 146 degrees of freedom
#> Multiple R-squared: 0.9522, Adjusted R-squared: 0.9512
#> F-statistic: 969.9 on 3 and 146 DF, p-value: < 2.2e-16
#Orthogonal
fit.orth <- lm(Petal.Length ~ stats::poly(Petal.Width, 3), data = iris)
#Marginal effect of X at X=0 from orthogonal model
library(margins)
summary(margins(fit.orth, variables = "Petal.Width",
at = data.frame(Petal.Width = 0)))
#> Warning in check_values(data, at): A 'at' value for 'Petal.Width' is
#> outside observed data range (0.1,2.5)!
#> factor Petal.Width AME SE z p lower upper
#> Petal.Width 0.0000 1.1527 0.5836 1.9752 0.0482 0.0089 2.2965
Được tạo vào ngày 2019-10-25 bởi gói reprex (v0.3.0)
Hiệu ứng cận biên của Petal.Width
0 từ sự phù hợp trực giao và sai số chuẩn của nó hoàn toàn bằng với hiệu ứng từ đa thức thô. Sử dụng đa thức trực giao không cải thiện độ chính xác của các ước tính có cùng số lượng giữa hai mô hình.
YX? "bạn có thể phù hợp với hồi quy đa thức trực giao và tương quan bán nguyệt bình phương trên số hạng tuyến tính sẽ đại diện cho đại lượng này. Điều này không đúng với đa thức thô. thuật ngữ tuyến tính không biểu thị tỷ lệ phương sai trong giải thích bởi thành phần tuyến tính của Xem bên dưới.YX
library(jtools)
data("iris")
fit.raw3 <- lm(Petal.Length ~ Petal.Width + I(Petal.Width^2) +
I(Petal.Width^3), data = iris)
fit.raw1 <- lm(Petal.Length ~ Petal.Width, data = iris)
round(summ(fit.raw3, part.corr = T)$coef, 3)
#> Est. S.E. t val. p partial.r part.r
#> (Intercept) 1.103 0.130 8.464 0.000 NA NA
#> Petal.Width 1.153 0.584 1.975 0.050 0.161 0.036
#> I(Petal.Width^2) 1.710 0.549 3.116 0.002 0.250 0.056
#> I(Petal.Width^3) -0.579 0.141 -4.110 0.000 -0.322 -0.074
round(summ(fit.raw1, part.corr = T)$coef, 3)
#> Est. S.E. t val. p partial.r part.r
#> (Intercept) 1.084 0.073 14.850 0 NA NA
#> Petal.Width 2.230 0.051 43.387 0 0.963 0.963
fit.orth3 <- lm(Petal.Length ~ stats::poly(Petal.Width, 3),
data = iris)
fit.orth1 <- lm(Petal.Length ~ stats::poly(Petal.Width, 3)[,1],
data = iris)
round(summ(fit.orth3, part.corr = T)$coef, 3)
#> Est. S.E. t val. p partial.r part.r
#> (Intercept) 3.758 0.032 118.071 0 NA NA
#> stats::poly(Petal.Width, 3)1 20.748 0.390 53.225 0 0.975 0.963
#> stats::poly(Petal.Width, 3)2 -3.015 0.390 -7.735 0 -0.539 -0.140
#> stats::poly(Petal.Width, 3)3 -1.602 0.390 -4.110 0 -0.322 -0.074
round(summ(fit.orth1, part.corr = T)$coef, 3)
#> Est. S.E. t val. p partial.r part.r
#> (Intercept) 3.758 0.039 96.247 0 NA NA
#> stats::poly(Petal.Width, 3)[, 1] 20.748 0.478 43.387 0 0.963 0.963
Được tạo vào ngày 2019-10-25 bởi gói reprex (v0.3.0)
0,0010,0030,0050,9270,9270,0200,0050,927. Từ mô hình đa thức trực giao nhưng không phải là mô hình đa thức thô, chúng ta biết rằng hầu hết các phương sai được giải thích trong kết quả là do thuật ngữ tuyến tính, rất ít đến từ thuật ngữ bình phương và thậm chí ít hơn từ thuật ngữ khối. Các giá trị đa thức thô không kể câu chuyện đó.
Bây giờ, cho dù bạn muốn lợi ích diễn giải này so với lợi ích liên ngành của việc thực sự có thể hiểu các hệ số của mô hình, thì bạn nên sử dụng đa thức trực giao. Nếu bạn muốn xem xét các hệ số và biết chính xác ý nghĩa của chúng (mặc dù tôi nghi ngờ người ta thường làm như vậy), thì bạn nên sử dụng các đa thức thô. Nếu bạn không quan tâm (nghĩa là bạn chỉ muốn kiểm soát để gây nhiễu hoặc tạo ra các giá trị dự đoán), thì điều đó thực sự không thành vấn đề; cả hai hình thức đều mang cùng một thông tin liên quan đến các mục tiêu đó. Tôi cũng sẽ lập luận rằng các đa thức trực giao nên được ưu tiên trong chính quy hóa (ví dụ: lasso), bởi vì việc loại bỏ các thuật ngữ bậc cao không ảnh hưởng đến các hệ số của các điều khoản bậc thấp, không đúng với đa thức thô,
poly
có liên quan đến đa thức trực giao và tôi (x ^ 2) không (mặc dù tôi không biết chi tiết) - nhưng, tại sao các tác giả của ISLR sau đó lại đề xuất một phương pháp không hiệu quả ? Có vẻ rất sai lệch nếu cả hai lệnh dường như làm như vậy, nhưng chỉ có một lệnh thực sự là ok.