Model
Let tek "B" kategorisi vardır ve eğer aksi. , ve tanımlayın . Eğer , o zaman "A" kategorisi vardır (yani, "A" referans düzeyi). Daha sonra modeliniz şu şekilde yazılabilir:xB= 1xB= 0xCxDxExB=xC=xD=xE=0
logit(π)=β0+βBxB+βCxC+βDxD+βExE
ile .
β0
R de veri üretimi
(A)
x <- sample(x=c("A","B", "C", "D", "E"),
size=n, replace=TRUE, prob=rep(1/5, 5))
x
Vektörüne sahip n
bileşenler (her birey için bir tane). Her bileşen "A", "B", "C", "D" veya "E" dir. "A", "B", "C", "D" ve "E" nin her biri eşit derecede olasıdır.
(B)
library(dummies)
dummy(x)
dummy(x)
bir matris n
satır ve karşılık gelen 5 sütun (her bir için bir tane) , , , ve . Doğrusal öngörücüler (her birey için bir tane) daha sonra şu şekilde yazılabilir:xAxBxCxDxE
linpred <- cbind(1, dummy(x)[, -1]) %*% c(beta0, betaB, betaC, betaD, betaE)
(C)
Başarı olasılıkları lojistik modelden gelir:
pi <- exp(linpred) / (1 + exp(linpred))
(D)
Şimdi ikili yanıt değişkenini üretebiliriz. inci yanıt rasgele değişken gelir ile ve :iBin(n,p)n=1p= pi[i]
y <- rbinom(n=n, size=1, prob=pi)
Bunu kontrol etmek için bazı hızlı simülasyonlar sorun değil
> #------ 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
> #---------------------