범주 형 변수를 사용하여 로지스틱 회귀 분석을위한 데이터 시뮬레이션


9

로지스틱 회귀 분석을위한 테스트 데이터를 만들려고했는데이 게시물을 찾았습니다. 로지스틱 회귀 분석을 위해 인공 데이터를 시뮬레이션하는 방법은 무엇입니까?

좋은 대답이지만 연속 변수 만 만듭니다. 링크에서와 동일한 예에서 y와 연관된 5 단계 (ABCDE)를 갖는 범주 형 변수 x3은 어떻습니까?


sample (x = c (1, 2, 3), size = 1, prob = rep (1/3, 3))은 동일한 확률로 "1", "2"또는 "3"중 하나를 생성합니다.
ocram

의견을 보내 주셔서 감사합니다. 여기에 언급 한 게시물의 y와 확률을 어떻게 연관 시키나요? 해당 게시물 'code'> set.seed (666)> x1 = rnorm (1000) # 일부 연속 변수> x2 = rnorm (1000)> z = 1 + 2 * x1 + 3 * x2 # 선형 조합에서 일부 코드를 복사합니다. 바이어스와> PR = 1 / (1 + EXP (-z))는 INV-로짓 함수> 내지 # 패스 Y = rbinom (1000,1, PR) # 베르누이 응답 변수 '부호'
user1301295

답변:


13

모델

하자 한 "B"카테고리를 가지며, 경우 그렇지. , 및 정의하십시오 . 만약 , 그때 우리는 카테고리 "A"가 (즉, "A"입니다 기준 레벨). 그런 다음 모델을 다음과 같이 쓸 수 있습니다.xB=1xB=0xCxDxExB=xC=xD=xE=0

logit(π)=β0+βBxB+βCxC+βDxD+βExE
및 차단β0

R의 데이터 생성

(ㅏ)

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

x벡터를 갖는 n구성 요소 (각 하나). 각 구성 요소는 "A", "B", "C", "D"또는 "E"입니다. "A", "B", "C", "D"및 "E"는 각각 동일 할 가능성이 있습니다.

(비)

library(dummies)
dummy(x)

dummy(x) , , , 및n 해당하는 행 (각 개인에 대해 하나씩)과 5 개의 열 이있는 행렬입니다 . 그런 다음 선형 예측 변수 (각 개인마다 하나씩)를 다음과 같이 쓸 수 있습니다.xAxBxCxDxE

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

(씨)

성공 확률은 로지스틱 모델에서 따릅니다.

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

(디)

이제 이진 반응 변수를 생성 할 수 있습니다. 번째 응답은 이항 확률 변수에서 유래 와 및 :iBin(n,p)n=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-매개 변수를 선택하고 구성 요소의 확률을 선택하는 데 약간의 직관을 줄 수 있습니까? 이러한 변화가 운동에 어떤 영향을 미칩니 까?
d_a_c321

@dchandler : 설명을 위해 매개 변수와 확률을 임의로 선택했습니다.
ocram

2
@ocram-이해했습니다. 그러나 더 광범위한 시뮬레이션을 실행할 수 있도록 좋은 계수가 무엇인지에 대한 직감을 찾고 있습니다. 예를 들어 올가미 회귀를 시뮬레이션하려면 의미없는 변수 (0 계수 포함)를 추가하고 의미없는 변수의 수와 의미없는 변수의 0이 아닌 계수의 크기가 시뮬레이션에 어떤 영향을 미치는지 확인하는 데 관심이있을 수 있습니다.
d_a_c321
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.