Làm cách nào để tìm giá trị p của hồi quy spline / loess trơn tru?


10

Tôi có một số biến và tôi quan tâm để tìm mối quan hệ phi tuyến tính giữa chúng. Vì vậy, tôi quyết định lắp một số spline hoặc hoàng thổ, và in các ô đẹp (xem mã bên dưới). Nhưng, tôi cũng muốn có một số thống kê cho tôi biết khả năng mối quan hệ là vấn đề ngẫu nhiên đến mức nào ... ví dụ, tôi cần một số giá trị p tổng thể, ví dụ như tôi có cho hồi quy tuyến tính. Nói cách khác, tôi cần biết liệu đường cong được trang bị có ý nghĩa gì không, vì mã của tôi sẽ khớp với đường cong với bất kỳ dữ liệu nào.

x <- rnorm(1000)
y <- sin(x) + rnorm(1000, 0, 0.5)

cor.test(x,y)
plot(x, y, xlab = xlab, ylab = ylab)
spl1 <- smooth.spline(x, y, tol = 1e-6, df = 8)
lines(spl1, col = "green", lwd = 2)

spl2 <- loess(y ~ x)
x.pr <- seq(min(x), max(x), length.out = 100)
lines(x.pr, predict(spl2, x.pr), col = "blue", lwd = 2)

Câu trả lời:


8

Thư viện splines có các hàm bsnssẽ tạo cơ sở spline để sử dụng với lmhàm, sau đó bạn có thể điều chỉnh mô hình tuyến tính và mô hình bao gồm spline và sử dụng anovahàm để thực hiện kiểm tra mô hình đầy đủ và giảm để xem mô hình spline có phù hợp hơn đáng kể không hơn mô hình tuyến tính.

Dưới đây là một số mã ví dụ:

x <- rnorm(1000)
y <- sin(x) + rnorm(1000, 0, 0.5)

library(splines)

fit1 <- lm(y~x)
fit0 <- lm(y~1)
fit2 <- lm(y~bs(x,5))

anova(fit1,fit2)
anova(fit0,fit2)

plot(x,y, pch='.')
abline(fit1, col='red')
xx <- seq(min(x),max(x), length.out=250)
yy <- predict(fit2, data.frame(x=xx))
lines(xx,yy, col='blue')

Bạn cũng có thể sử dụng polyhàm để thực hiện điều chỉnh đa thức và kiểm tra các số hạng phi tuyến tính như một bài kiểm tra độ cong.

R2

Có các kỹ thuật để tính toán và vẽ khoảng tin cậy cho phù hợp với hoàng thổ (tôi nghĩ có thể có một cách tích hợp trong gói ggplot2), bạn có thể vẽ biểu đồ độ tin cậy và xem liệu một đường thẳng có phù hợp với băng tần không (điều này không phải là giá trị p, nhưng vẫn cho có / không.

Bạn có thể điều chỉnh mô hình tuyến tính và lấy phần dư và khớp mô hình hoàng thổ với phần dư làm phản hồi (và biến quan tâm là yếu tố dự đoán), nếu mô hình thực là tuyến tính thì sự phù hợp này phải gần với đường thẳng và sắp xếp lại các điểm liên quan đến dự đoán không nên làm cho bất kỳ sự khác biệt. Bạn có thể sử dụng điều này để tạo ra một bài kiểm tra hoán vị. Phù hợp với hoàng thổ, tìm giá trị dự đoán xa nhất từ ​​0, bây giờ hoán vị ngẫu nhiên các điểm và khớp với một hoàng thổ mới và tìm điểm dự đoán xa nhất từ ​​0, lặp lại một loạt lần, giá trị p là tỷ lệ của các giá trị được hoán vị hơn nữa từ 0 so với giá trị ban đầu.

Bạn cũng có thể muốn xem xác thực chéo là một phương pháp chọn băng thông hoàng thổ. Điều này không cho giá trị p, nhưng băng thông vô hạn tương ứng với một mô hình tuyến tính hoàn hảo, nếu xác thực chéo cho thấy băng thông rất lớn thì điều đó cho thấy mô hình tuyến tính có thể hợp lý, nếu băng thông cao hơn rõ ràng kém hơn một số băng thông nhỏ hơn thì điều này cho thấy độ cong xác định và tuyến tính là không đủ.


Cảm ơn bạn Greg! Tôi nghĩ rằng đoạn 1 nghe có vẻ như là cách để đi, ngoại trừ việc tôi không quan tâm đến việc so sánh với mô hình tuyến tính, chỉ để xem liệu spline có giải thích được điều đó hay không. Bạn có thể vui lòng cung cấp một số mã hoặc con trỏ cụ thể hơn để làm thế nào để kiểm tra spline với anova không? Tôi đã xem xét các chức năng của bs và ns nhưng tôi không giỏi về thống kê để có thể tự phát minh ra nó.
Tò mò

R2R2

anovaR2R21R2R21R2

Greg, cảm ơn! 1) Bạn có thể giải thích những gì đang lm(y~bs(x,5))làm và tại sao không lm(y~I(bs(x,5)))? Tôi khá bối rối với cuộc gọi này vì kết quả của bs (x, 5) không phải là biến ... 2) Tôi có hiểu chính xác rằng giá trị p tôi đang tìm là kết quả của anova(fit0,fit2)không?
Tò mò

1
xx2x3bsxlm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.