Estoy tratando de reproducir un algoritmo de predicción existente, transmitido por un investigador retirado. El primer paso es ajustar algunos datos observados a una distribución de Weibull, para obtener una forma y una escala que se utilizarán para predecir valores futuros. Estoy usando R para hacer esto. Aquí hay un ejemplo de mi código:
x<-c(23,19,37,38,40,36,172,48,113,90,54,104,90,54,157,51,77,78,144,34,29,45,16,15,37,218,170,44,121)
f<-fitdistr(x, 'weibull')
Esto funciona bien a menos que haya ceros en la matriz de entrada, lo que hace que falle por completo. Lo mismo sucede en SAS. Según tengo entendido, esto se debe a que uno de los pasos para calcular la distribución de Weibull es tomar el registro natural, que no está definido para 0. ¿Hay alguna forma razonable de evitar esto?
Lo mejor que he encontrado hasta ahora es sumar 1 a todos mis valores de entrada, ajustar la curva y luego restar uno de mis valores predichos ("desplazar" la curva hacia arriba y luego hacia abajo por 1). Esto se ajusta bastante bien a los datos previstos anteriormente, pero parece que debe ser una forma incorrecta de hacerlo.
editar: los valores en la matriz de entrada se observan, datos del mundo real (el número de ocurrencias de algo) durante un rango de años. Entonces, en algunos años, el número de ocurrencias fue cero. Ya sea que sea la mejor manera o no (estoy de acuerdo en que puede no serlo), el autor del algoritmo original afirma haber usado la distribución Weibull, y tengo que intentar replicar su proceso.
fuente
Respuestas:
(Como otros han señalado, es probable que una distribución de Weibull no sea una aproximación apropiada cuando los datos son solo enteros. Lo siguiente tiene la intención de ayudarlo a determinar lo que hizo el investigador anterior, correcta o incorrectamente).
Existen varios métodos alternativos que no se ven afectados por ceros en los datos, como el uso de varios estimadores de métodos de momentos. Por lo general, requieren una solución numérica de ecuaciones que involucran la función gamma, porque los momentos de la distribución de Weibull se dan en términos de esta función. No estoy familiarizado con R, pero aquí hay un programa Sage que ilustra uno de los métodos más simples: ¿tal vez se pueda adaptar a R? (Puede leer sobre este y otros métodos similares en, por ejemplo, "La distribución de Weibull: un manual" de Horst Rinne, p. 455ff; sin embargo, hay un error tipográfico en su ecuación 12.4b, como el '-1' es redundante)
Esto produjo la salida
Si los datos anteriores se modifican (solo para ilustración) reemplazando los tres valores más pequeños por , es decir
entonces el mismo procedimiento produce la salida
EDITAR: acabo de instalar R para probarlo. A riesgo de hacer esta respuesta demasiado tiempo, para cualquier persona interesada aquí está mi código R para el método Blischke-Scheuer:
Esto reproduce (a cinco dígitos significativos) los dos ejemplos de Sage anteriores:
fuente
fitdistr
fitdistr
Luego minimice esta función utilizando la optimización unidimensional:
donde acabo de inventar el "+10" basado en nada en absoluto.
Para los datos con los tres valores más pequeños reemplazados por ceros, obtenemos:
bar$minimum
fitdistr
fuente
Debería fallar, deberías estar agradecido de que haya fallado.
Sus observaciones mostraron que las fallas ocurrieron en el mismo momento en que comenzó a observarlas. Si este es un proceso real, proveniente de datos reales (y no de datos simulados), debe de alguna manera explicar la razón por la que obtiene ceros. He visto estudios de supervivencia donde aparecen 0 veces como consecuencia de una de varias cosas:
Entonces, para el caso 1: debe usar métodos de censura adecuados, incluso si eso significa extraer registros retrospectivamente. El caso 2 significa que puede usar el algoritmo EM porque tiene un problema de precisión. Los métodos bayesianos también funcionan de manera similar aquí. El caso 3 significa que solo necesita excluir los valores que se suponía que faltaban.
fuente
Estoy de acuerdo con la respuesta del cardenal anterior. Sin embargo, también es bastante común agregar una constante para evitar ceros. Otro valor comúnmente usado es 0.5, pero podría haberse usado cualquier constante positiva. Puede probar un rango de valores para ver si puede identificar el valor exacto utilizado por el investigador anterior. Entonces podría estar seguro de que puede reproducir sus resultados, antes de buscar una mejor distribución.
fuente
[Asumiendo que Weibull es apropiado] El libro de Johnson Kotz y Balakrishnan tiene muchas maneras de estimar los parámetros de Weibull. Algunos de estos no dependen de los datos que no incluyen ceros (por ejemplo, usando la media y la desviación estándar, o usando ciertos percentiles).
Johnson, NL, Kotz, S. y Balakrishnan, N. (1994). Distribuciones Univariadas Continuas. Nueva York: Wiley, aproximadamente en la página 632.
fuente