使用R计算多元线性回归的对数似然

时间:2019-07-11 13:51:34

标签: r linear-regression multivariate-testing log-likelihood

我想计算多元线性回归的对数似然。我不确定这段代码是否正确。

我已经使用mvtnorm r软件包中的dmvnorm函数计算了对数似然。

sdmvn_mle <- function(obj){
  sdmvn_mle_1 <- apply(obj$residuals^2,2,mean)
  sdmvn_mle_2 <- mean(residuals(obj)[,1] * residuals(obj)[,2])
  return(matrix(c(sdmvn_mle_1[1], sdmvn_mle_2, sdmvn_mle_2, sdmvn_mle_1[2]), nrow = 2))
} 


llmvn <- function(obj, sd){
  lr <- c()
  for( i in 1: nrow(obj$fitted.values)){
    lr <- c(lr, mvtnorm::dmvnorm(model.response(model.frame(obj))[i,], mean=fitted(obj)[i,], sigma=sd, log=TRUE))
  }
  return(sum(lr))
}

Y <- as.matrix(mtcars[,c("mpg","disp")])
(mvmod <- lm(Y ~ hp + drat + wt, data=mtcars))
# Call:
# lm(formula = Y ~ hp + drat + wt, data = mtcars)

# Coefficients:
#             mpg        disp     
# (Intercept)   29.39493   64.52984
# hp            -0.03223    0.66919
# drat           1.61505  -40.10238
# wt            -3.22795   65.97577

llmvn(mvmod, sdmvn_mle(mvmod))
# [1] -238.7386

我不确定结果是否正确。

另外,请告诉我是否还有另一种用于计算多元线性回归的对数似然的策略。

0 个答案:

没有答案