Tạo dữ liệu tương quan ngẫu nhiên giữa một nhị phân và một biến liên tục


23

Tôi muốn tạo hai biến. Một là biến kết quả nhị phân (nói thành công / thất bại) và hai là tuổi theo năm. Tôi muốn tuổi tác có mối tương quan tích cực với thành công. Ví dụ, nên có nhiều thành công hơn ở các phân khúc tuổi cao hơn là thấp hơn. Lý tưởng nhất là tôi nên ở vị trí để kiểm soát mức độ tương quan. Làm thế nào để làm điều đó?

Cảm ơn

Câu trả lời:


20

Cách tiếp cận của @ ocram chắc chắn sẽ có hiệu quả. Về mặt các thuộc tính phụ thuộc, nó hơi hạn chế.

Một phương pháp khác là sử dụng copula để lấy phân phối chung. Bạn có thể chỉ định phân phối cận biên cho thành công và tuổi tác (nếu bạn có dữ liệu hiện tại thì điều này đặc biệt đơn giản) và một họ copula. Thay đổi các tham số của copula sẽ mang lại mức độ phụ thuộc khác nhau và các họ copula khác nhau sẽ cung cấp cho bạn các mối quan hệ phụ thuộc khác nhau (ví dụ: phụ thuộc đuôi mạnh).

Một tổng quan gần đây về việc làm điều này trong R thông qua gói copula có sẵn ở đây . Xem thêm các cuộc thảo luận trong bài báo đó cho các gói bổ sung.

Bạn không nhất thiết cần một gói toàn bộ mặc dù; đây là một ví dụ đơn giản sử dụng copula Gaussian, xác suất thành công cận biên 0,6 và độ tuổi phân phối gamma. Thay đổi r để kiểm soát sự phụ thuộc.

r = 0.8 # correlation coefficient
sigma = matrix(c(1,r,r,1), ncol=2)
s = chol(sigma)
n = 10000
z = s%*%matrix(rnorm(n*2), nrow=2)
u = pnorm(z)

age = qgamma(u[1,], 15, 0.5)
age_bracket = cut(age, breaks = seq(0,max(age), by=5))
success = u[2,]>0.4

round(prop.table(table(age_bracket, success)),2)

plot(density(age[!success]), main="Age by Success", xlab="age")
lines(density(age[success]), lty=2)
legend('topright', c("Failure", "Success"), lty=c(1,2))

Đầu ra:

Bàn:

           success
age_bracket FALSE TRUE
    (0,5]    0.00 0.00
    (5,10]   0.00 0.00
    (10,15]  0.03 0.00
    (15,20]  0.07 0.03
    (20,25]  0.10 0.09
    (25,30]  0.07 0.13
    (30,35]  0.04 0.14
    (35,40]  0.02 0.11
    (40,45]  0.01 0.07
    (45,50]  0.00 0.04
    (50,55]  0.00 0.02
    (55,60]  0.00 0.01
    (60,65]  0.00 0.00
    (65,70]  0.00 0.00
    (70,75]  0.00 0.00
    (75,80]  0.00 0.00

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


Câu trả lời chính xác! Công thức là một công cụ đẹp nếu được đánh giá thấp. Mô hình probit (với biên Gaussian trên biến liên tục) là trường hợp đặc biệt của mô hình copula Gaussian. Nhưng đây là một giải pháp tổng quát hơn nhiều.
jpvel

1
@JMS: +1 Có, Công thức rất hấp dẫn. Tôi nên cố gắng nghiên cứu chúng chi tiết hơn!
ocram

@jpfl Thật vậy; Các mô hình copula Gaussian mô hình loại probit đa biến thuộc bất kỳ loại nào. Thông qua việc trộn quy mô, họ cũng mở rộng sang mô hình t / logistic và mô hình logit / robit. Tres cool :)
JMS

@ocram Làm! Có rất nhiều câu hỏi mở trong bối cảnh dữ liệu hỗn hợp (khi sử dụng chúng làm mô hình và không chỉ rút ra từ chúng) mà những người như tôi rất muốn thấy đã được giải quyết ...
JMS

@JMS Câu trả lời tuyệt vời!
dùng333

28

Bạn có thể mô phỏng mô hình hồi quy logistic .

Chính xác hơn, trước tiên bạn có thể tạo các giá trị cho biến tuổi (ví dụ: sử dụng phân phối đồng đều) và sau đó tính xác suất thành công bằng cách sử dụng

π(x)= =điểm kinh nghiệm(β0+β1x)1+điểm kinh nghiệm(β0+β1x)

β0β1β1

π

Ví dụ minh họa trong R:

n <- 10
beta0 <- -1.6
beta1 <- 0.03
x <- runif(n=n, min=18, max=60)
pi_x <- exp(beta0 + beta1 * x) / (1 + exp(beta0 + beta1 * x))
y <- rbinom(n=length(x), size=1, prob=pi_x)
data <- data.frame(x, pi_x, y)
names(data) <- c("age", "pi", "y")
print(data)

         age        pi y
 1  44.99389 0.4377784 1
 2  38.06071 0.3874180 0
 3  48.84682 0.4664019 1
 4  24.60762 0.2969694 0
 5  39.21008 0.3956323 1
 6  24.89943 0.2988003 0
 7  51.21295 0.4841025 1
 8  43.63633 0.4277811 0
 9  33.05582 0.3524413 0
 10 30.20088 0.3331497 1

3
Câu trả lời hay, mặc dù từ quan điểm thẩm mỹ ( không phải thực tế), mô hình hồi quy probit có thể còn đẹp hơn. Mô hình probit tương đương với bắt đầu với một Gaussian RV bivariate và đập một trong số chúng (về 0 hoặc 1). Thực sự nó chỉ liên quan đến việc thay thế hàm bình thường tích lũy Gaussian ("probit") cho logit được sử dụng trong hồi quy logistic. Thực tế, điều này sẽ cho cùng một hiệu suất (và tính toán nó chậm hơn vì Normcdf rất tốn kém để đánh giá (1 + e ^ x) ^ - 1), nhưng thật tuyệt khi nghĩ về một Gaussian với một trong các biến được kiểm duyệt ("làm tròn").
jpvel

@jpfl: Cảm ơn bạn đã bình luận của bạn. Tôi sẽ suy nghĩ về nó càng sớm càng tốt!
ocram

1
Điều thú vị về mô hình copula probit / Gaussian là các tham số có dạng ma trận hiệp phương sai giữa hai đại lượng (một trong số đó sau đó được chia thành 0 và 1). Vì vậy, nó tốt từ quan điểm của khả năng diễn giải (nhưng không tốt từ quan điểm của sự thuận tiện tính toán).
jpvel

1

Trước tiên bạn có thể tạo biến thành công / thất bại (X), và sau đó tạo ra tuổi (Y) với phân phối khác nhau tùy thuộc vào giá trị của X. Điều đó sẽ cho bạn sự tương quan.

Để định lượng mối tương quan, cách đơn giản nhất là thay đổi Y theo giá trị của X. Số lượng mà bạn thay đổi sẽ là thước đo tương quan.

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.