2016-03-02 709 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