Valoarea inițială în „vmmin” nu este finită nici măcar atunci când se modifică valoarea inițială (Programare, R)

user6009447 a intrebat.

Încerc să fac maximum de verosimilitate pentru un model spațio-temporal. Totuși, cred că ar trebui să încep mai întâi cu un model simplu înainte de a mă apuca de unul complicat. Am încercat să execut un model simplu de maximă verosimilitate și mi-a dat acest mesaj de eroare: initial value in 'vmmin' is not finite. M-am uitat la un alt mesaj și mi-a sugerat să schimb valoarea de pornire. Am încercat câteva valori diferite și tot mi-a dat acest mesaj de eroare. Ce ar trebui să fac? Este ceva în neregulă cu funcția?

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

Comentarii

  • Posibil duplicat al erorii MLE în R: valoarea inițială în ‘vmmin’ nu este finită –  > Por Waldir Leoncio.
1 răspunsuri
Ben Bolker

tl;dr modelul tău are nevoie de 4 parametri, dar ai dat doar 3 parametri în vectorul de pornire. Mi-am dat seama de acest lucru prin (1) încercarea de (1) a încerca OLS(c(1,1,1),y=y,z=z) (pentru a confirma că valoarea de returnare este NA la valoarea de pornire); (2) setarea debug(OLS) și trecând prin ea.

Atunci când parcurgeți funcția verificând valorile pe parcurs, puteți vedea că sigma2 devine NA, , deoarece k==3 (matricea modelului are trei coloane), iar tu ai dat doar trei valori, deci theta[k+1] este cu una peste capătul vectorului și dă NA (ar fi frumos dacă R ar da o eroare de indexare în acest caz, dar nu o face).

Nu ați dat un exemplu reproductibil, așa că am inventat unul …

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

Pe de altă parte, acest lucru funcționează bine.

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

Tags: