回答:
@ocramのアプローチは確かに機能します。ただし、依存関係のプロパティに関しては、多少制限があります。
別の方法は、コピュラを使用して共同分布を導出することです。成功と年齢(既存のデータがある場合、これは特に簡単です)およびコピュラファミリの周辺分布を指定できます。コピュラのパラメーターを変更すると、異なる程度の依存関係が得られ、異なるコピュラファミリにより、さまざまな依存関係が得られます(強力な上部テール依存関係など)。
Rでcopulaパッケージを使用してこれを行う最近の概要は、ここで入手できます。追加のパッケージについては、そのペーパーの説明も参照してください。
ただし、必ずしもパッケージ全体が必要なわけではありません。以下に、ガウスコピュラ、限界成功確率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
ロジスティック回帰モデルをシミュレートできます。
より正確には、最初に年齢変数の値を生成し(たとえば均一な分布を使用)、次に成功の確率を計算します
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