2016-03-02 705 views
0

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

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 
+0

的可能的复制[R中MLE错误:初始值 'vmmin' 不是有限](http://stackoverflow.com/questions/24383746/mle-error-in-r-initial-value-在-vmmin此结果未有限) –

回答

1

TL;博士你的模型需要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