简体   繁体   中英

Find the second derivative of a log likelihood function

I'm interested in finding the values of the second derivatives of the log-likelihood function for logistic regression with respect to all of my m predictor variables.

Essentially I want to make a vector of m 2 L/ β j 2 values where j goes from 1 to m.

I believe the second derivative should be -Σ i=1 n x ij 2 (e x i β )/((1+e x i β ) 2 ) and I am trying to code it in R. I did something dumb when trying to code it and was wondering if there was some sort of sapply function I could use to do it more easily.

Here's the code I tried (I know the sum in the for loop doesn't really do anything, so I wasn't sure how to sum those values).

  for (j in 1:m)
  {
    for (i in 1:n)
    {
      d2.l[j] <- -1*(sum((x.center[i,j]^2)*(exp(logit[i])/((1 + exp(logit[i])^2)))))
    }
  }

And logit is just a vector consisting of if that's not clear.

I'm hazy on the maths (and it's hard to read latex) but purely on the programming side, if logit is a vector with indices i =1,...,n and x.center is a nxm matrix:

for (j in 1:m)
   dt.l[j] <- -sum( x.center[,j]^2 * exp(logit)/(1+exp(logit))^2 )

where the sum sums over i .

If you want to do it "vector-ish", you can take advantage of the fact that if you do matrix * vector (your x.center * exp(logit)/... ) this happens column-wise in R which suits your equation:

-colSums(x.center^2 * exp(logit)/(1+exp(logit))^2)

For what it's worth, although the latter is "slicker", I will often use the explicit loop (as with the first example), purely for readability. Or else when I come back in a month's time I get very confused about my i s and j s and what is being summed over when.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM