Đặt các nút thắt trong các khối vuông tự nhiên trong R


23

Tôi có dữ liệu với nhiều tính năng tương quan và tôi muốn bắt đầu bằng cách giảm các tính năng có chức năng cơ bản trơn tru, trước khi chạy LDA. Tôi đang cố gắng sử dụng các khối vuông tự nhiên trong splinesgói với nschức năng. Làm thế nào để tôi đi về việc chỉ định các nút thắt?

Đây là mã R cơ bản:

library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))

Nhưng tôi không có ý tưởng về cách chọn các nút thắt trong ns.


3
bạn đang hỏi về cách chỉ định các nút thắt trong (nghĩa là thông qua các đối số cho ns ) hoặc bạn đang hỏi về các chiến lược để quyết định nơi đặt các nút thắt? R
Đức hồng y

1
Xem Harrell, Regression Strategies 2015, để biết một cuộc thảo luận tốt về nơi đặt các nút thắt (không thành vấn đề, do đó, lượng tử cũng tốt như mọi thứ - ngoại lệ là nếu bạn có lý do chính đáng để tin rằng thay đổi hành vi tại một số điểm) và số lượng nút thắt (3, 4 hoặc 5 tùy thuộc vào N)
statsguy

Câu trả lời:


40

Cách chỉ định các nút trong R

Các nschức năng tạo ra một hồi quy spline tự nhiên cơ sở đưa ra một vector đầu vào. Các nút thắt có thể được chỉ định thông qua một đối số bậc tự do dflấy một số nguyên hoặc thông qua một đối số nút thắt knotslấy một vectơ cho vị trí các nút thắt mong muốn. Lưu ý rằng trong mã bạn đã viết

library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))

bạn chưa yêu cầu lăm hải lý, mà đúng hơn là đã yêu cầu đơn (bên trong) nút ở vị trí 5.

Nếu bạn sử dụng dfđối số, thì các nút bên trong sẽ được chọn dựa trên số lượng của vectơ x. Ví dụ: nếu bạn thực hiện cuộc gọi

ns(x, df=5)

Sau đó, cơ sở sẽ bao gồm hai nút thắt biên và 4 nút thắt bên trong, được đặt ở các lượng tử thứ 20, 40, 60 và 80 xtương ứng. Các nút thắt biên, theo mặc định, được đặt ở mức tối thiểu và tối đa x.

Dưới đây là một ví dụ để xác định vị trí của các nút

x <- 0:100
ns(x, knots=c(20,35,50))

Nếu bạn định gọi thay vào đó ns(x, df=4), bạn sẽ kết thúc với 3 nút thắt bên trong tại các vị trí 25, 50 và 75, tương ứng.

Bạn cũng có thể chỉ định xem bạn có muốn một thuật ngữ chặn hay không. Thông thường, điều này không được chỉ định vì nsthường được sử dụng cùng với lm, trong đó bao gồm cả việc chặn ngầm (trừ khi không bắt buộc). Nếu bạn sử dụng intercept=TRUEtrong cuộc gọi của mình ns, hãy chắc chắn rằng bạn biết lý do tại sao bạn làm như vậy, vì nếu bạn làm điều này và sau đó gọi một lmcách ngây thơ, ma trận thiết kế sẽ bị thiếu thứ hạng.

Chiến lược đặt nút thắt

Các nút thường được đặt ở các lượng tử, giống như hành vi mặc định của ns. Trực giác là nếu bạn có nhiều dữ liệu được nhóm lại gần nhau, thì bạn có thể muốn có nhiều nút thắt hơn để mô hình hóa bất kỳ phi tuyến tiềm năng nào trong khu vực đó. Nhưng, điều đó không có nghĩa đây là (a) sự lựa chọn duy nhất hoặc (b) sự lựa chọn tốt nhất.

Các lựa chọn khác rõ ràng có thể được thực hiện và là miền cụ thể. Nhìn vào biểu đồ và ước tính mật độ của các yếu tố dự đoán của bạn có thể cung cấp manh mối về nơi cần các nút thắt, trừ khi có một số lựa chọn "chính tắc" được cung cấp cho dữ liệu của bạn.

Về mặt diễn giải hồi quy, tôi xin lưu ý rằng, trong khi bạn chắc chắn có thể "chơi xung quanh" với vị trí nút thắt, bạn nên nhận ra rằng bạn phải chịu một hình phạt lựa chọn mô hình cho việc này mà bạn nên cẩn thận để đánh giá và nên điều chỉnh mọi suy luận như một kết quả.


Cho trước x <- 0:100, cách "thích hợp" để xác định các điểm dừng là phải làm knots_x <- quantile(x, probs=c(.2, .35, .5)), sau đó sẽ được sử dụng ns(x, knots=knots_x)để xác định 3 nút thắt bên trong tại các vị trí 25, 50 và 75, tương ứng. Điều khiến tôi bối rối trong câu trả lời là tôi đang mong đợi chỉ định các lượng tử mong muốn trong knotsđối số, trong khi tôi cần nhập các giá trị thực tế từ xvectơ ...
Landroni

Phân tích Khảo sát Sức khỏe, Tác giả Edward L. Korn, Barry I. Graubard p.98 nói rằng Durrman và Simon (1989) khuyến nghị (0,05,0.50,0,95) cho các spline tự nhiên
Chris
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.