TransWikia.com

Error in h(simpleError(msg, call))

Stack Overflow en español Asked by Andrea Márquez on January 12, 2021

Estoy haciendo mi trabajo de fin de master y es la primera vez que uso R. Debo aplicar una estimacion por Maxima verosimilitud.
El error que obtengo es:

 - Error in h(simpleError(msg, call)) : 
         error in evaluating the argument 'object' in selecting a method for function 'logLik': only defined on a data frame with all numeric
   variables

Esto es paso a paso lo que he ido aplicando, el error se genera en el ultimo comando:

Datos <- read.table("C:/Users/andre/Documents/Master Consultoria Economica/TFM/Base tfm.csv",header=TRUE, sep=";", na.strings="NA", dec=",", strip.white=TRUE, fileEncoding="UTF-8-BOM")

summary(Datos)
sapply(Datos, class)
attach(Datos)

##DEFINIR VARIABLES##

Ct=data.frame(VarCredito)

X1=data.frame(FonDisp,
              TAE,
              TasaMora,
              PrecioPet,
              IDEAC)
X2=data.frame(TAE,
              Paro,
              IPIM,
              Inflacion)

x1=as.matrix(X1)
x2=as.matrix(X2)  

 
#Definimos la función de verosimilitud
##########################################################
fmv <- function(y,xa,xb,sigma1,sigma2,
                a1,a2,a3,a4,a5,
                b1,b2,b3,b4 ) {
  beta1 <- data.frame(a1,a2,a3,a4,a5)
  beta2 <- data.frame(b1,b2,b3,b4)
  f1 <- 1/sqrt(2*pi*sigma1^2 ) * exp(-1/(2*sigma1^2 )*(Ct-x1%*%t(beta1))^2)
  f2 <- 1/sqrt(2*pi*sigma2^2 ) * exp(-1/(2*sigma2^2 )*(Ct-x2%*%t(beta2))^2)
  F1 <- numeric(nrow(Ct))
  F2 <- numeric(nrow(Ct))
  for (i in 1:nrow(Ct)){
    F1[i] <- pnorm(Ct[i,1], x1[i,]%*%t(beta1), sigma1, lower.tail = F)
    F2[i] <- pnorm(Ct[i,1], x2[i,]%*%t(beta2), sigma2, lower.tail = F)
  }
  -sum(log((f1*F2)+(f2*F1)),log=TRUE)
}


#PARAMETROS INICIALES MCO
summary(FIT <-
          lm(VarCredito~FonDisp+TAE+TasaMora+PrecioPet+IDEAC+-1))

summary(FIT2 <- lm(VarCredito~TAE+Paro+IPIM+Inflacion+-1))

plot(VarCredito,type="o",col="black")
lines(predict(FIT),type="o",col="blue")
lines(predict(FIT2),type="o",col="red")



#FUNCION MCO
fmc <- function(y,xa,xb,
                a1,a2,a3,a4,a5,
                b1,b2,b3,b4 ) {
  beta1 <- data.frame(a1,a2,a3,a4,a5)
  beta2 <- data.frame(b1,b2,b3,a4)
  sum((Ct-pmin(x1%*%t(beta1),x2%*%t(beta2), log=TRUE))^2)
}


library("bbmle")
class(Ct[,1])

p<-mle2(fmc,start=list(a1= -0.000003533,a2=0.009015,a3=-0.5944,a4=0.03418,a5=0.00001512,
                       b1= -0.0112861,b2= 0.6571781,b3= 0.0006255,b4= 0.0021346),
        data=list(y=Ct,xa=x1,xb=x2))

summary(p)
########################################################## 
#Tomamos 100 valores iniciales aleatorios con media los obtenidos por MCO 
##########################################################
asigma1<-rnorm(100,0.035,0.026) 
asigma2<-rnorm(100,0.035,0.026) 
aa1<-rnorm(100,coef(p)[1],1) 
aa2<-rnorm(100,coef(p)[2],1) 
aa3<-rnorm(100,coef(p)[3],0.0001) 
aa4<-rnorm(100,coef(p)[4], 0.0001) 
aa5<-rnorm(100,coef(p)[5],1)
ab1<-rnorm(100,coef(p)[6],1) 
ab2<-rnorm(100,coef(p)[7],0.0001) 
ab3<-rnorm(100,coef(p)[8],1)
ab4<-rnorm(100,coef(p)[9],0.0001)


#Vemos cuál de estos valores iniciales nos da una verosimilitud más alta
L <- numeric(100) 
for (i in 1:100){ 
m <- logLik(mle2(fmv,start=list(sigma1=asigma1[i],sigma2=asigma2[i], 
a1=aa1[i],a2=aa2[i],a3=aa3[i],a4=aa4[i],a5=aa5[i], 
b1=ab1[i],b2=ab2[i],b3=ab3[i],b4=ab4[i]), 
data=list(y=Ct,xa=x1,xb=x2))) 
L[i] <-m[1] 
} 

Posteriormente debo aplicar which.max(L), pero el error se genera en L y no me deja. Todas las variables son numéricas.

One Answer

He logrado resolver el error, al parecer en f1 cuando la función calcula exp genera INF como resultado porque los números son muy grandes, se corrigió añadiendo la función mprfy luego calculando exp

Answered by Andrea Márquez on January 12, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP