' vmmin'中的初始值即使改变起始值也不是有限的

时间:2016-03-02 20:05:57

标签: r

我正在努力为时空模型做最大可能性。但是,我认为我应该先从一个简单的模型开始,然后再去复杂的模型。我试图运行一个简单的最大似然模型,它给了我这个错误消息:initial value in 'vmmin' is not finite。我正在看另一篇文章,它建议我改变起始值。我确实尝试了几个不同的值,它仍然给了我这个错误信息。我该怎么办?这个功能有什么问题吗?

y <- matrix(low$SalePrice, ncol=1)    
z <- as.matrix(cbind(1,low$Housesqft,low$lotacres))    
OLS<-function(theta,y,z){    
   n <- nrow(z)    
   k <- ncol(z)    
   beta <- theta[1:k]    
   sigma2 <- theta[k+1]    
   e <- y-z%*%beta    
   logl<- -0.5*n*log(2*pi)-0.5*n*log(sigma2)-((t(e)%*%e)/(2*sigma2))    
   return(-logl)    
}    
p <- optim(c(1,1,1),OLS, method="BFGS", hessian=TRUE, y=y, z=z)
Error in optim(c(1, 1, 1), OLS, method = "BFGS", hessian = TRUE,
  y = y, z = z) : 
  initial value in 'vmmin' is not finite

1 个答案:

答案 0 :(得分:2)

tl; dr 您的模型需要4个参数,但您只在起始矢量中提供了3个参数。我通过(1)尝试OLS(c(1,1,1),y=y,z=z)(确认起始值的返回值为NA)来计算出来; (2)设置debug(OLS)并单步执行。

当您逐步执行功能检查值时,您可以看到sigma2变为NA,因为k==3(模型矩阵有三列),而您只给了三个值,所以theta[k+1]是超出向量末尾的值,并给出NA(如果R在这种情况下给出索引错误会很好,但它不会。)

你没有给出一个可重复的例子,所以我做了一个......

set.seed(101)
y <- matrix(rnorm(100), ncol=1)    
z <- cbind(1,rnorm(100),rnorm(100))
OLS <- function(theta,y,z){    
   n <- nrow(z)    
   k <- ncol(z)   
   beta <- theta[1:k]    
   sigma2 <- theta[k+1]    
   e <- y-z%*%beta    
   logl<- -0.5*n*log(2*pi)-0.5*n*log(sigma2)-((t(e)%*%e)/(2*sigma2))    
   return(-logl)    
}

OLS(c(1,1,1),y=y,z=z)  ## NA

另一方面,这很好用。

OLS(c(1,1,1,1),y=y,z=z)

p <- optim(c(1,1,1,1),OLS, method="BFGS", hessian=TRUE, y=y, z=z)
p
$par
[1] -0.03281533  0.10308645 -0.02229842  0.85335713

$value
[1] 133.965

$counts
function gradient 
      47       16 

$convergence
[1] 0

$message
NULL

$hessian
              [,1]          [,2]          [,3]          [,4]
[1,]  1.171842e+02 -4.922016e+00  2.426181e-01  3.779377e-05
[2,] -4.922016e+00  1.171892e+02  1.468891e+01  3.787193e-05
[3,]  2.426181e-01  1.468891e+01  8.838051e+01 -1.979572e-05
[4,]  3.779377e-05  3.787193e-05 -1.979572e-05  6.866123e+01