Mô phỏng dữ liệu hồi quy với biến phụ thuộc không được phân phối bình thường


8

Để phân tích hồi quy, thường rất hữu ích khi biết quy trình tạo dữ liệu để kiểm tra phương thức được sử dụng hoạt động như thế nào. Mặc dù khá đơn giản để thực hiện điều này cho hồi quy tuyến tính đơn giản, nhưng đây không phải là trường hợp khi biến phụ thuộc phải tuân theo một phân phối cụ thể.

Hãy xem xét một hồi quy tuyến tính đơn giản:

N    <- 100
x    <- rnorm(N)
beta <- 3 + 0.4*rnorm(N)
y    <- 1 + x * beta + .75*rnorm(N)

Có cách nào để sử dụng cùng một cách tiếp cận nhưng để trở ynên khác hơn bình thường, nói sai lệch?

Câu trả lời:


10

Nếu tôi hiểu chính xác câu hỏi của bạn, điều này khá dễ dàng. Bạn chỉ cần quyết định phân phối nào bạn muốn có lỗi và sử dụng hàm tạo ngẫu nhiên tương ứng.

Có một số phân phối sai lệch, vì vậy bạn cần tìm ra cái nào bạn thích. Ngoài ra, hầu hết các phân phối bị lệch (ví dụ: log bình thường, bình phương, Gamma, Weibull, v.v.) đều bị lệch, do đó, một số điều chỉnh nhỏ sẽ là cần thiết (ví dụ: nhân với ). 1

Dưới đây là một ví dụ sửa đổi mã của bạn:

set.seed(5840)  # this makes the example exactly reproducible
N      <- 100
x      <- rnorm(N)
beta   <- 0.4
errors <- rlnorm(N, meanlog=0, sdlog=1)
errors <- -1*errors   # this makes them left skewed
errors <- errors - 1  # this centers the error distribution on 0
y      <- 1 + x*beta + errors

nhập mô tả hình ảnh ở đây

Tôi nên lưu ý vào thời điểm này rằng hồi quy không đưa ra bất kỳ giả định nào về phân phối của hoặc , chỉ về các lỗi, (xem tại đây: Điều gì xảy ra nếu phần dư được phân phối bình thường, nhưng y thì không? ). Vì vậy, đó là trọng tâm của câu trả lời của tôi ở trên. Y εXYε


Cập nhật: Đây là phiên bản sai lệch với các lỗi được phân phối là Weibull:

set.seed(5840)  # this makes the example exactly reproducible
N      <- 100
x      <- rnorm(N)
beta   <- 0.4
errors <- rweibull(N, shape=1.5, scale=1)
# errors <- -1*errors   # this makes them left skewed
errors <- errors - factorial(1/1.5)  # this centers the error distribution on 0
y      <- 1 + x*beta + errors

Dữ liệu Weibull đã bị sai lệch, vì vậy chúng tôi không cần phải chuyển hướng của chúng (nghĩa là chúng tôi bỏ -1*errorsphần đó). Ngoài ra, từ trang Wikipedia cho phân phối Weibull, chúng tôi thấy rằng giá trị trung bình của một Weibull phải là:. Chúng tôi muốn trừ giá trị đó từ mỗi lỗi để phân phối lỗi kết quả được tập trung vào . Điều đó cho phép phần cấu trúc (nghĩa là ) của mã của bạn phản ánh chính xác phần cấu trúc của quy trình tạo dữ liệu. 0E[W]=(1/shape)!01 + x*beta

nhập mô tả hình ảnh ở đây

Các phân phối ExGaussian là tổng của một bình thường và một mũ. Có một chức năng ? RexGAUS trong gói gamlss.dist để tạo các hàm này. Tôi không có gói đó, nhưng bạn sẽ có thể điều chỉnh mã của tôi ở trên mà không gặp quá nhiều khó khăn. Bạn cũng có thể tạo một biến bình thường ngẫu nhiên (thông qua rnorm()) và hàm mũ (qua rexp()) và tổng hợp chúng khá dễ dàng. Chỉ cần nhớ trừ trung bình dân số, , từ mỗi lỗi trước khi thêm lỗi vào phần cấu trúc của quy trình tạo dữ liệu. (Tuy nhiên, hãy cẩn thận để không trừ trung bình mẫu !) μ+1/λmean(errors)


Một số ý kiến ​​cuối cùng, không liên quan: Mã ví dụ của bạn trong câu hỏi có phần bị sai sót (có nghĩa là không vi phạm). Bởi vì rnorm(N)tạo dữ liệu với mean=0sd=1theo mặc định, 0.4*rnorm(N)sẽ tạo ra rnorm(N, mean=0, sd=0.4). Mã của bạn (và có thể là suy nghĩ của bạn) sẽ rõ ràng hơn nhiều nếu bạn sử dụng công thức sau. Ngoài ra, mã của bạn betacó vẻ bối rối. Chúng tôi thường nghĩ vềβtrong một mô hình kiểu hồi quy như một tham số, không phải là một biến ngẫu nhiên. Đó là, một hằng số chưa biết chi phối hành vi của quá trình tạo dữ liệu, nhưng bản chất ngẫu nhiên của quy trình được gói gọn bởi các lỗi. Đây không phải là cách chúng ta nghĩ về nó khi chúng ta làm việc với các mô hình đa cấp và mã của bạn dường như nằm giữa mô hình hồi quy tiêu chuẩn và mã cho mô hình hồi quy đa cấp. Chỉ định riêng betas của bạn là một ý tưởng tốt để duy trì sự rõ ràng về khái niệm của mã, nhưng đối với mô hình hồi quy tiêu chuẩn, bạn sẽ chỉ gán một số duy nhất cho mỗi beta (ví dụ beta0 <- 1; beta1 <- .04:).


cảm ơn câu trả lời của bạn, để cụ thể hơn: Tôi cần mô phỏng dữ liệu thời gian đáp ứng. Thời gian đáp ứng thường bị lệch phải và được phân phối xấp xỉ như Ex-Gaussian hoặc Weibull.
BeginneR

Tôi sẽ làm việc với một ví dụ như vậy, nhưng đó sẽ là những lỗi bị sai lệch, phân phối biên của Y là ngẫu nhiên. Ngoài ra, dữ liệu thời gian đáp ứng phải được lệch phải (một vài RT dài, nhưng sàn vững chắc), không bị lệch trái (hướng tới các giá trị nhỏ).
gung - Phục hồi Monica

Có phải lệch, tôi vô tình viết "lệch trái" trong câu hỏi của tôi.
BeginneR

1
cảm ơn câu trả lời sâu rộng của bạn Trên thực tế, tôi đang mô phỏng dữ liệu cho một mô hình đa cấp. Tôi chỉ sử dụng mã và chấp nhận nó cho một kịch bản hồi quy tuyến tính đơn giản.
BeginneR

một câu hỏi nữa: bạn có biết làm thế nào để mô phỏng dữ liệu đo lặp lại bằng mô hình hồi quy như mô hình trên để các biện pháp lặp lại có cấu trúc tương quan cụ thể (để tính đến tính toàn cầu) không? Giả sử có N đối tượng, mỗi đối tượng cung cấp 20 thử nghiệm trong mỗi ba điều kiện điều trị trong đó mối tương quan giữa các điều kiện điều trị nên được biết trong quá trình tạo dữ liệu.
BeginneR
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.