Box-Cox thích biến đổi cho các biến độc lập?


53

Có một phép biến đổi giống như Box-Cox cho các biến độc lập không? Đó là, một phép biến đổi tối ưu hóa biến sao cho sẽ phù hợp hơn cho mô hình tuyến tính?xy~f(x)

Nếu vậy, có một chức năng để thực hiện điều này với R?


1
Tôi không biết về bất kỳ cơ sở nào để thực hiện việc này Rvà, nghĩ về nó một lúc, tôi không chắc chính xác người ta sẽ làm điều này như thế nào . Tiêu chí nào bạn sẽ tối ưu hóa để đảm bảo chuyển đổi "tuyến tính nhất"? rất hấp dẫn, nhưng như đã thấy trong câu trả lời của tôi ở đây , không thể sử dụng R 2 một mình để xem liệu giả định tuyến tính của một mô hình có được thỏa mãn hay không. Bạn đã có một số tiêu chí trong tâm trí? R2R2
Macro

1
Tôi có ấn tượng rằng tôi đã thấy một bài báo nói về điều đó. Có lẽ googling với "covariate" thay vì "biến độc lập" là hợp lý hơn.
Stéphane Laurent

Tôi nghĩ (từ bộ nhớ ...) có một số thực hiện điều này trong gói xe (R). Nhưng bạn cũng điều tra giống như gam trong gói gmcv.
kjetil b halvorsen

Một luồng thảo luận về suy luận tự động của các tham số Box-Cox (bằng cách chuyển đổi đồng thời tất cả các biến độc lập cùng với biến phụ thuộc) đã xuất hiện tại stats.stackexchange.com/questions/60431/ .
whuber

Câu trả lời:


72

John Tukey đã ủng hộ " phương pháp ba điểm " của mình để tìm ra biểu thức lại của các biến để tuyến tính hóa các mối quan hệ.

Tôi sẽ minh họa bằng một bài tập từ cuốn sách của ông, Phân tích dữ liệu khám phá . Đây là dữ liệu áp suất hơi thủy ngân từ một thí nghiệm trong đó nhiệt độ thay đổi và đo áp suất hơi.

pressure <- c(0.0004, 0.0013, 0.006, 0.03, 0.09, 0.28, 0.8, 1.85, 4.4, 
              9.2, 18.3, 33.7, 59, 98, 156, 246, 371, 548, 790) # mm Hg
temperature <- seq(0, 360, 20) # Degrees C

Mối quan hệ là phi tuyến mạnh mẽ: xem bảng bên trái trong hình minh họa.

Lô đất

Bởi vì đây là một bài tập khám phá , chúng tôi hy vọng nó sẽ tương tác. Nhà phân tích được yêu cầu bắt đầu bằng cách xác định ba điểm "điển hình" trong cốt truyện : một điểm gần mỗi đầu và một điểm ở giữa. Tôi đã làm như vậy ở đây và đánh dấu chúng bằng màu đỏ. (Khi tôi lần đầu tiên thực hiện bài tập này từ lâu, tôi đã sử dụng một tập hợp các điểm khác nhau nhưng đạt được kết quả tương tự.)

Trong phương pháp ba điểm, một tìm kiếm - bằng cách mạnh mẽ hoặc bằng cách khác - cho phép chuyển đổi Box-Cox khi áp dụng cho một trong các tọa độ - hoặc y hoặc x - sẽ (a) đặt các điểm điển hình xấp xỉ trên a dòng và (b) sử dụng một sức mạnh "tốt đẹp", thường được chọn từ một "nấc thang" sức mạnh mà nhà phân tích có thể hiểu được.

Vì những lý do sẽ trở nên rõ ràng sau này, tôi đã mở rộng họ Box-Cox bằng cách cho phép "bù" để các phép biến đổi ở dạng

x(x+α)λ1λ.

Đây là một Rthực hiện nhanh chóng và bẩn . Đầu tiên, nó tìm thấy một giải pháp tối ưu , sau đó làm tròn λ đến giá trị gần nhất trên thang và, theo hạn chế đó, tối ưu hóa α (trong giới hạn hợp lý). Nó cực kỳ nhanh chóng vì tất cả các tính toán chỉ dựa trên ba điểm tiêu biểu trong bộ dữ liệu ban đầu. (Bạn có thể làm chúng bằng bút chì và giấy, thậm chí, đó chính xác là những gì Tukey đã làm.)(λ,α)λα

box.cox <- function(x, parms=c(1,0)) {
  lambda <- parms[1]
  offset <- parms[2]
  if (lambda==0) log(x+offset) else ((x+offset)^lambda - 1)/lambda
}
threepoint <- function(x, y, ladder=c(1, 1/2, 1/3, 0, -1/2, -1)) {
  # x and y are length-three samples from a dataset.
  dx <- diff(x)
  f <- function(parms) (diff(diff(box.cox(y, parms)) / dx))^2
  fit <- nlm(f, c(1,0))
  parms <- fit$estimate #$
  lambda <- ladder[which.min(abs(parms[1] - ladder))]
  if (lambda==0) offset = 0 else {
    do <- diff(range(y))
    offset <- optimize(function(x) f(c(lambda, x)), 
                       c(max(-min(x), parms[2]-do), parms[2]+do))$minimum    
  }
  c(lambda, offset)
}

Khi phương pháp ba điểm được áp dụng cho các giá trị áp suất (y) trong bộ dữ liệu hơi thủy ngân, chúng tôi thu được bảng giữa của các ô.

data <- cbind(temperature, pressure)
n <- dim(data)[1]
i3 <- c(2, floor((n+1)/2), n-1)
parms <- threepoint(temperature[i3], pressure[i3])
y <- box.cox(pressure, parms)

parms(0,0)

Chúng tôi đã đạt đến một điểm tương tự với bối cảnh của câu hỏi: vì bất kỳ lý do gì (thường là để ổn định phương sai dư), chúng tôi đã biểu thị lại biến phụ thuộc , nhưng chúng tôi thấy rằng mối quan hệ với một biến độc lập là phi tuyến. Vì vậy, bây giờ chúng ta chuyển sang thể hiện lại biến độc lập trong nỗ lực tuyến tính hóa mối quan hệ. Điều này được thực hiện theo cùng một cách, chỉ đơn thuần là đảo ngược vai trò của x và y:

parms <- threepoint(y[i3], temperature[i3])
x <- box.cox(temperature, parms)

parms(1,253.75)25411


2732542732541/(1x)

2540


2
Xin chào thân yêu Whuber. Thật là một câu trả lời thú vị, tôi đọc nó với niềm vui, cảm ơn bạn! (và tôi cũng sẽ chơi với nó một chút để xem nó có thể phù hợp với vấn đề tôi đang làm việc như thế nào)
Tal Galili

3
n2data <- cbind(temperature, pressure)R

2
@landroni Sức mạnh tích phân và phân số nhỏ thường phát sinh trong các lý thuyết vật lý, hóa học và sinh học, cũng như thông qua các xem xét hình học. (Ví dụ, khi một biến là một khối, gốc khối của nó có độ dài - có thể hiểu được - trong khi đó, gốc thứ bảy của nó không có giải thích hình học đơn giản.)
whuber

3
@Frank Đúng vậy; nó rõ ràng và không thể đánh bại một kỹ thuật thăm dò. Lưu ý rằng nó thậm chí không tuyên bố là dự đoán. Thăm dò chỉ có thể đề xuất cách để tiến hành. Tuy nhiên, có thể tưởng tượng phân bổ bốn df ngân sách mô hình hóa của bạn để ước tính các biến đổi này - và ước tính có thể được kết hợp tự động vào thuật toán phù hợp bằng cách sử dụng cách tiếp cận của Tukey hoặc cách khác (ML là một khả năng rõ ràng).
whuber

5
YYλ

11

Hãy xem các slide này về "Chẩn đoán hồi quy" của John Fox (có sẵn từ đây , hoàn chỉnh với các tài liệu tham khảo), trong đó thảo luận ngắn gọn về vấn đề chuyển đổi phi tuyến. Nó bao gồm "quy tắc phình to" của Tukey để chọn các phép biến đổi sức mạnh (được giải quyết bằng câu trả lời được chấp nhận), nhưng cũng đề cập đến các biến đổi của Box-Cox và Yeo-Johnson. Xem Phần 3.6 của các slide. Đối với một tác phẩm chính thức hơn của cùng một tác giả, xem J. Fox, Phân tích hồi quy ứng dụng và mô hình tuyến tính tổng quát, Ấn bản thứ hai (Sage, 2008) .

Đối với các gói R thực tế giúp với điều này, hoàn toàn hãy xem gói xe , được tác giả bởi J. Fox và S. Weisberg. Gói này đi kèm với J. Fox và S. Weisberg, Một đồng hành R với hồi quy ứng dụng, Ấn bản thứ hai, (Sage, 2011) , một thứ khác phải đọc. Sử dụng gói đó, bạn có thể bắt đầu từ basicPower()(biến đổi năng lượng đơn giản), bcPower()(biến đổi Box-Cox) và yjPower()(biến đổi Yeo-Johnson). Ngoài ra còn có powerTransform () :

Hàm powerTransform được sử dụng để ước tính các phép biến đổi chuẩn hóa của một biến ngẫu nhiên đơn biến hoặc đa biến.

Kiểm tra cả hai cuốn sách để biết thêm chi tiết về lý thuyết đằng sau những biến đổi này và về phương pháp tính toán.


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.