生成二进制和连续变量之间的随机相关数据


23

我想生成两个变量。一个是二元结果变量(例如成功/失败),另一个是年龄。我希望年龄与成功成正比。例如,较高年龄段的成功应该比较低年龄段的成功更多。理想情况下,我应该能够控制相关程度。我怎么做?

谢谢

Answers:


20

@ocram的方法肯定会起作用。在依赖属性方面,虽然有些限制。

另一种方法是使用系脉推导关节分布。您可以指定成功和年龄的边际分布(如果有现有数据,这特别简单)和系群。改变系动词的参数会产生不同程度的依赖性,并且不同的系动词族将为您提供各种依赖性关系(例如强上尾部依赖性)。

通过copula软件包在R中执行此操作的最新概述在此处提供。另请参见该文件中的讨论。

您不一定需要整个程序包;这是一个使用高斯系数,边际成功概率为0.6和伽玛分布年龄的简单示例。改变r以控制依赖性。

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))

输出:

表:

           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

在此处输入图片说明


好答案!Copulas是一个很好的工具,尽管它未被重视。概率模型(在连续变量上具有高斯边际)是高斯copula模型的特例。但这是一个更通用的解决方案。
jpillow'7

1
@JMS:+1是的,Copulas非常吸引人。我应该尝试更详细地研究它们!
ocram 2011年

@jpillow确实;高斯copula模型包含任何种类的多元概率模型。通过比例混合,它们还扩展到t / logistic copulae和logit / robit模型。Tres很酷:)
JMS

@ocram做!在混合数据上下文中有很多未解决的问题(当使用它们作为模型而不仅仅是从它们中提取时),像我这样的人都希望看到解决的问题……
JMS

@JMS极好的答案!
user333 2011年

28

您可以模拟逻辑回归模型

更准确地说,您可以先生成年龄变量的值(例如,使用均匀分布),然后使用以下方法计算成功概率

πX=经验值β0+β1个X1个+经验值β0+β1个X

β0β1个β1个

π

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
很好的答案,尽管从美学角度(而不是实际角度)来看,概率回归模型可能更好。概率模型等效于从二元高斯RV开始并对其之一进行阈值化(零或1)。实际上,它仅涉及用高斯累积法线(“概率”)函数代替逻辑回归中使用的对数。实际上,这应该会提供相同的性能(并且由于normcdf的评估成本很高(1 + e ^ x)^-1,因此计算速度较慢),但是考虑带有被审查变量之一(“四舍五入”)的高斯方程,这很好。
jpillow'7

@jpillow:谢谢您的评论。我会尽快考虑的!
ocram 2011年

1
Probit / Gaussian copula模型的优点在于,参数采用两个量之间的协方差矩阵形式(然后将其中一个二值化为0和1)。因此,从可解释性的角度来看很好(但是从计算便利性的角度来看不是很好)。
jpillow'7

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.