Skip to content

[R-es] Ajuste con exponencial

9 messages · "Hector Gómez Fuerte", Francisco Rodríguez, Jorge I Velez +2 more

#
Hola, ¿qué tal?

Creo que el ajuste (por máxima verosimilitud) de lambda es el inverso
de la media de tus datos. Tu densidad en el intervalo de interés es
como la de la exponencial (dividida por una constante de
normalización). El logaritmo de la verosimitud es, por lo tanto, como
el de la exponencial sin truncar más una constante.

Luego la teoría habitual (de cómo el inverso de la media es el
estimador por MV de lambda) aplica con cambios mínimos.

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com

El día 27 de enero de 2015, 19:53, "Hector Gómez Fuerte"
<hector3 en gmx.es> escribió:
#
Hola Hector, buenos días:
Hay un método generalista para maximizar funciones en R que quizás te valga, prueba lo siguiente a ver qué tal (por supuesto, si te fijas en la definición de la función de verosimilitud, ves que la "he cuadrado a mano" al intervalo que tratas"
library(optimx)
muestra <- c(50, 20, 31, 40, 10)
funcionExpTrun <- function(l, x){    n <- length(x)    f <- rep(0, n)        for (i in 1:n)    {      f[i]<- -log(l*exp(-l*x[i])/(exp(-10*l)-exp(-60*l)))    }        sumaf <- sum(f)        return (sumaf)    }
resultado <- optim(par = c(0.1), fn = funcionExpTrun,                   method = c("L-BFGS-B"), lower = c(-Inf, 0), upper = c(Inf,                                                                         Inf), x = muestra)


El código lo he sacado (con alguna adaptación por mi parte) de:
http://www.mat.uda.cl/jolivares/probabilidades/EMV.pdf
El parámetro al que converge sería: 
$par[1] 0.02356897

Un saludo

From: hector3 en gmx.es
To: cgb en datanalytics.com; r-help-es en r-project.org
Date: Wed, 28 Jan 2015 12:27:56 +0100
Subject: Re: [R-es] Ajuste con exponencial


Saludos cordiales.

 

Lamentablemente lo que dice Carlos no es correcto. Cuando la distribución exponencial la truncamos en un intervalo la constante de la función de densidad (para que integre 1) tiene una dependencia (complicada) del parámetro que multiplica al exponente, con lo cual la ecuación de verosimilitud no es nada sencila ni se puede resolver exactamente . La estimación maximo-verosímil requeriría de algoritmos numéricos y por tanto de software para su cálculo. Yo creo que esta no debe ser la mejor solución, y me sorprende no haber encontrado (puede que por mi torpeza) nada para ello en el R. De aquí la pregunta que hacia en este foro.

 

Héctor Gómez

 

Enviar: martes 27 de enero de 2015 a las 22:07

De: "Carlos J. Gil Bellosta " <cgb en datanalytics.com>

Para: "Hector Gómez Fuerte" <hector3 en gmx.es>

CC: "Lista R" <r-help-es en r-project.org>

Asunto: Re: [R-es] Ajuste con exponencial

Hola, ¿qué tal?



Creo que el ajuste (por máxima verosimilitud) de lambda es el inverso

de la media de tus datos. Tu densidad en el intervalo de interés es

como la de la exponencial (dividida por una constante de

normalización). El logaritmo de la verosimitud es, por lo tanto, como

el de la exponencial sin truncar más una constante.



Luego la teoría habitual (de cómo el inverso de la media es el

estimador por MV de lambda) aplica con cambios mínimos.



Un saludo,



Carlos J. Gil Bellosta

http://www.datanalytics.com



El día 27 de enero de 2015, 19:53, "Hector Gómez Fuerte"

<hector3 en gmx.es> escribió:

        

            

        
        

            
_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
#
Hola Hector, buenos días:Hay un método generalista para maximizar funciones en R que quizás te valga, prueba lo siguiente a ver qué tal (por supuesto, si te fijas en la definición de la función de verosimilitud, ves que la "he cuadrado a mano" al intervalo que tratas"library(optimx)muestra <- c(50, 20, 31, 40, 10)funcionExpTrun <- function(l, x){    n <- length(x)    f <- rep(0, n)        for (i in 1:n)    {      f[i]<- -log(l*exp(-l*x[i])/(exp(-10*l)-exp(-60*l)))    }        sumaf <- sum(f)        return (sumaf)    }resultado <- optim(par = c(0.1), fn = funcionExpTrun,                   method = c("L-BFGS-B"), lower = c(-Inf, 0), upper = c(Inf,                                                                         Inf), x = muestra)El código lo he sacado (con alguna adaptación por mi parte) de:http://www.mat.uda.cl/jolivares/probabilidades/EMV.pdfEl parámetro al que converge sería: $par[1] 0.02356897Un saludo
From: hector3 en gmx.es
To: cgb en datanalytics.com; r-help-es en r-project.org
Date: Wed, 28 Jan 2015 12:27:56 +0100
Subject: Re: [R-es] Ajuste con exponencial


Saludos cordiales.

 

Lamentablemente lo que dice Carlos no es correcto. Cuando la distribución exponencial la truncamos en un intervalo la constante de la función de densidad (para que integre 1) tiene una dependencia (complicada) del parámetro que multiplica al exponente, con lo cual la ecuación de verosimilitud no es nada sencila ni se puede resolver exactamente . La estimación maximo-verosímil requeriría de algoritmos numéricos y por tanto de software para su cálculo. Yo creo que esta no debe ser la mejor solución, y me sorprende no haber encontrado (puede que por mi torpeza) nada para ello en el R. De aquí la pregunta que hacia en este foro.

 

Héctor Gómez

 

Enviar: martes 27 de enero de 2015 a las 22:07

De: "Carlos J. Gil Bellosta " <cgb en datanalytics.com>

Para: "Hector Gómez Fuerte" <hector3 en gmx.es>

CC: "Lista R" <r-help-es en r-project.org>

Asunto: Re: [R-es] Ajuste con exponencial

Hola, ¿qué tal?



Creo que el ajuste (por máxima verosimilitud) de lambda es el inverso

de la media de tus datos. Tu densidad en el intervalo de interés es

como la de la exponencial (dividida por una constante de

normalización). El logaritmo de la verosimitud es, por lo tanto, como

el de la exponencial sin truncar más una constante.



Luego la teoría habitual (de cómo el inverso de la media es el

estimador por MV de lambda) aplica con cambios mínimos.



Un saludo,



Carlos J. Gil Bellosta

http://www.datanalytics.com



El día 27 de enero de 2015, 19:53, "Hector Gómez Fuerte"

<hector3 en gmx.es> escribió:

        

            

        
        

            
_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
#
Hola Hector,

No soy experto, pero en

http://r.789695.n4.nabble.com/Fitting-weibull-exponential-and-lognormal-distributions-to-left-truncated-data-td869977.html
http://www.r-bloggers.com/r-help-follow-up-truncated-exponential/
http://www.jstatsoft.org/v16/c02/paper

hay algunas ideas.    Espero te sirvan.

Saludos,
Jorge.-



2015-01-28 22:27 GMT+11:00 "Hector Gómez Fuerte" <hector3 en gmx.es>:

  
  
#
Hola,

Si tienes su expresión algebráica, podrías ajustarla con un ajuste no
lineal "nls()".

"nls()" viene por defecto dentro del paquete "stats" y si no fuese posible
hacerla converger, puedes utilizar otros paquetes (nlstools, nls2) que
modifican "nls()" que utilizan otros algoritmos de convergencia.

Saludos,
Carlos Ortega
www.qualityexcellence.es

El 27 de enero de 2015, 19:53, "Hector Gómez Fuerte" <hector3 en gmx.es>
escribió:

  
    
#
Mil perdones, llevo unos días "fuera de mi eje". Tienes toda la razón del mundo.

Analíticamente se puede probar (y si aceptas que 1-exp(-50 lambda) es
1, es decir, que tu lambda no es demasiado pequeño) que tu lambda no
está lejos del inverso de la media de tus valores menos diez.

Maximizar via optim la función de verosimilitud como propone Francisco
es otra opción.

Hay un paquete para distribuciones truncadas, truncgof, que usé hace
unos años, pero nunca funcionó demasiado bien (al menos con
distribuciones más raras que la exponencial). Es otra opción, pero ten
cuidado con los resultados.

Un saludo y mil excusas,

Carlos J. Gil Bellosta
http://www.datanalytics.com




El día 28 de enero de 2015, 12:27, "Hector Gómez Fuerte"
<hector3 en gmx.es> escribió: