Creating function arguments from a named list (with an application to stats4::mle)

后端 未结 4 1355
难免孤独
难免孤独 2021-02-06 02:20

I should start by saying what I\'m trying to do: I want to use the mle function without having to re-write my log likelihood function each time I want to try a different model s

4条回答
  •  旧巷少年郎
    2021-02-06 02:52

    It might be easier to use optim directly; that's what mle is using anyway.

    ll2 <- function(par, X, Y){
      beta <- matrix(c(par[-1]), ncol=1)
      -sum(log(dnorm(Y - X %*% beta, 0, par[1])))
    }
    getp <- function(X, sigma=1, beta=0.1) {
      p <- c(sigma, rep(beta, ncol(X)))
      names(p) <- c("sigma", paste("beta", 0:(ncol(X)-1), sep=""))
      p
    }
    
    set.seed(5)
    n <- 100
    df <- data.frame(x1 = runif(n), x2 = runif(n), y = runif(n))
    Y <- df$y
    X1 <- model.matrix(y ~ x1, data = df) 
    X2 <- model.matrix(y ~ x1 + x2, data = df)
    optim(getp(X1), ll2, X=X1, Y=Y)$par
    optim(getp(X2), ll2, X=X2, Y=Y)$par
    

    With the output of

    > optim(getp(X1), ll2, X=X1, Y=Y)$par
          sigma       beta0       beta1 
     0.30506139  0.47607747 -0.04478441 
    > optim(getp(X2), ll2, X=X2, Y=Y)$par
          sigma       beta0       beta1       beta2 
     0.30114079  0.39452726 -0.06418481  0.17950760 
    

提交回复
热议问题