カテゴリー変数を使用したロジスティック回帰のデータのシミュレーション


9

私はロジスティック回帰のテストデータを作成しようとしていましたが、この投稿「ロジスティック回帰の人工データをシミュレートする方法」を見つけました

これは良い答えですが、連続変数のみを作成します。リンクと同じ例で、yに関連付けられた5レベルのカテゴリカル変数x3(ABCDE)はどうですか?


sample(x = c(1、2、3)、size = 1、prob = rep(1/3、3))は、「1」、「2」、または「3」のいずれかを等確率で生成します。
ocram 2013

あなたのコメントに感謝しますが、ここで確率を私が言及した投稿のyに関連付けるにはどうすればよいですか?その投稿からいくつかのコードをコピーします 'コード'> set.seed(666)> x1 = rnorm(1000)#いくつかの連続変数> x2 = rnorm(1000)> z = 1 + 2 * x1 + 3 * x2#線形結合バイアスあり> pr = 1 /(1 + exp(-z))#inv-logit関数を通過> y = rbinom(1000,1、pr)#bernoulli応答変数 'c​​ode'
user1301295

回答:


13

モデル

レッツ 1は、カテゴリ"B"、および持っている場合そう。、、およびをに定義します。もし、そして我々は、カテゴリ"A"(すなわち、 "A"は基準レベルである)を持っています。モデルは次のように書くことができますバツB=1バツB=0バツCバツDバツEバツB=バツC=バツD=バツE=0

ロジットπ=β0+βBバツB+βCバツC+βDバツD+βEバツE
with an intercept。β0

Rでのデータ生成

(a)

x <- sample(x=c("A","B", "C", "D", "E"), 
              size=n, replace=TRUE, prob=rep(1/5, 5))

xベクターが有するn構成要素(各個人に1つ)。各コンポーネントは、「A」、「B」、「C」、「D」、または「E」のいずれかです。「A」、「B」、「C」、「D」、および「E」のそれぞれは、同等の可能性があります。

(b)

library(dummies)
dummy(x)

dummy(x)有する行列であるnに対応する行(各個人のもの)と5列、、、、及び。線形予測子(個人ごとに1つ)は、次のように記述できます。バツバツBバツCバツDバツE

linpred <- cbind(1, dummy(x)[, -1]) %*% c(beta0, betaB, betaC, betaD, betaE)

(c)

成功の確率はロジスティックモデルに従います。

pi <- exp(linpred) / (1 + exp(linpred))

(d)

これで、バイナリ応答変数を生成できます。番目の応答は、二項確率変数から来るとおよび。置き場p=1p= pi[i]

y <- rbinom(n=n, size=1, prob=pi)

これを確認するためのいくつかの簡単なシミュレーションは問題ありません

> #------ parameters ------
> n <- 1000 
> beta0 <- 0.07
> betaB <- 0.1
> betaC <- -0.15
> betaD <- -0.03
> betaE <- 0.9
> #------------------------
> 
> #------ initialisation ------
> beta0Hat <- rep(NA, 1000)
> betaBHat <- rep(NA, 1000)
> betaCHat <- rep(NA, 1000)
> betaDHat <- rep(NA, 1000)
> betaEHat <- rep(NA, 1000)
> #----------------------------
> 
> #------ simulations ------
> for(i in 1:1000)
+ {
+   #data generation
+   x <- sample(x=c("A","B", "C", "D", "E"), 
+               size=n, replace=TRUE, prob=rep(1/5, 5))  #(a)
+   linpred <- cbind(1, dummy(x)[, -1]) %*% c(beta0, betaB, betaC, betaD, betaE)  #(b)
+   pi <- exp(linpred) / (1 + exp(linpred))  #(c)
+   y <- rbinom(n=n, size=1, prob=pi)  #(d)
+   data <- data.frame(x=x, y=y)
+   
+   #fit the logistic model
+   mod <- glm(y ~ x, family="binomial", data=data)
+   
+   #save the estimates
+   beta0Hat[i] <- mod$coef[1]
+   betaBHat[i] <- mod$coef[2]
+   betaCHat[i] <- mod$coef[3]
+   betaDHat[i] <- mod$coef[4]
+   betaEHat[i] <- mod$coef[5]
+ }
> #-------------------------
> 
> #------ results ------
> round(c(beta0=mean(beta0Hat), 
+         betaB=mean(betaBHat), 
+         betaC=mean(betaCHat), 
+         betaD=mean(betaDHat), 
+         betaE=mean(betaEHat)), 3)
 beta0  betaB  betaC  betaD  betaE 
 0.066  0.100 -0.152 -0.026  0.908 
> #---------------------

1
@ocram-パラメータの適切な選択とコンポーネントの確率の選択(パートa)に直感を与えることができますか?これらの変更は演習にどのように影響しますか?
d_a_c321 2014

@dchandler:説明のために、パラメーターと確率は任意に選択されました。
ocram 2014

2
@ocram-わかりました。ただし、より広範なシミュレーションを実行できるように、適切な係数がどれであるかを直観的に探しています。たとえば、なげなわ回帰をシミュレートしたい場合は、無意味な変数(ゼロ係数あり)を追加し、無意味な変数の数と、意味のある変数の非ゼロ係数の大きさがシミュレーションにどのように影響するかを確認したいと思います。
d_a_c321 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.