Die obige Antwort ist richtig. Als Referenz finden Sie hier einen ausgearbeiteten funktionierenden R-Code, um ihn zu berechnen. Ich habe mir erlaubt, einen Abschnitt hinzuzufügen, weil Sie wahrscheinlich einen davon wollen.
## make some data
set.seed(1234)
N <- 2000
x1 <- rnorm(N)
x2 <- rnorm(N)
## create linear predictor
lpred <- 0.5 + 0.5 * x1 + 0.25 * x2
## apply inverse link function
ey <- 1/(1 + exp(-lpred))
## sample some dependent variable
y <- rbinom(N, prob=ey, size=rep(1,N))
dat <- matrix(c(x1, x2, y), nrow=N, ncol=3)
colnames(dat) <- c('x1', 'x2', 'y')
Erstellen Sie nun eine Protokollwahrscheinlichkeitsfunktion zur Maximierung, verwenden Sie diese, dbinom
weil sie vorhanden ist, und summieren Sie die Ergebnisse
## the log likelihood function
log.like <- function(beta, dat){
lpred <- beta[1] + dat[,'x1'] * beta[2] + dat[,'x2'] * beta[2]**2
ey <- 1/(1 + exp(-lpred))
sum(dbinom(dat[,'y'], prob=ey, size=rep(1,nrow(dat)), log=TRUE))
}
und passen Sie das Modell mit maximaler Wahrscheinlichkeit an. Ich habe mir nicht die Mühe gemacht, einen Farbverlauf anzubieten oder eine Optimierungsmethode zu wählen, aber vielleicht möchten Sie beides tun.
## fit
res <- optim(par=c(1,1), ## starting values
fn=log.like,
control=list(fnscale=-1), ## maximise not minimise
hessian=TRUE, ## for SEs
dat=dat)
Schauen Sie sich jetzt die Ergebnisse an. Die ML-Parameterschätzungen und asymptotischen SEs sind:
## results
data.frame(coef=res$par,
SE=sqrt(diag(solve(-res$hessian))))
was sein sollte
## coef SE
## 1 0.4731680 0.04828779
## 2 0.5799311 0.03363505
oder es gibt einen Fehler (der immer möglich ist).
Es gelten die üblichen Vorbehalte gegen von Hessen abgeleitete Standardfehler.