¿Cómo puedo determinar los parámetros weibull a partir de los datos?

10

Tengo un histograma de datos de velocidad del viento que a menudo se representa usando una distribución weibull. Me gustaría calcular la forma weibull y los factores de escala que dan el mejor ajuste al histograma.

Necesito una solución numérica (a diferencia de las soluciones gráficas ) porque el objetivo es determinar la forma weibull mediante programación.

Editar: las muestras se recogen cada 10 minutos, la velocidad del viento se promedia durante los 10 minutos. Las muestras también incluyen la velocidad de viento máxima y mínima registrada durante cada intervalo, que se ignora en la actualidad pero me gustaría incorporar más adelante. El ancho del contenedor es de 0.5 m / s

Histograma para 1 mes de datos

klonq
fuente
1
cuando dice que tiene el histograma, ¿quiere decir que también tiene la información sobre las observaciones o SÓLO conoce el ancho y la altura del contenedor?
suncoolsu
@suncoolsu Tengo todos los puntos de datos. Conjuntos de datos que van desde 5,000 hasta 50,000 registros.
klonq
¿No podría tomar una muestra aleatoria de los datos y realizar un MLE de los parámetros?
schenectady
2
¿Cuál es el propósito de la estimación? ¿Para caracterizar retrospectivamente las condiciones pasadas? Para predecir la futura generación de energía en un solo lugar? ¿Para predecir la generación de energía dentro de una red de turbinas? Para calibrar un modelo meteorológico? Etc. Para esta pregunta, determinar una solución adecuada depende de manera crítica de cómo se utilizará.
whuber
@whuber en la actualidad, la idea es resumir los conjuntos de datos de viento en un formulario que permita la comparación de un período a otro y / o de un sitio a otro. Más adelante, el objetivo será comparar tendencias y, como usted dice, formar juicios sobre la producción futura, etc. Soy un novato en las estadísticas, pero tengo una montaña de datos (que no puedo compartir) y me gustaría extraerlos como tanta información como sea posible. Si me puede señalar cualquier lectura sobre este tema, sería muy apreciado.
klonq

Respuestas:

11

La estimación de máxima verosimilitud de los parámetros de Weibull puede ser una buena idea en su caso. Una forma de distribución de Weibull se ve así:

(γ/θ)(x)γ1exp(xγ/θ)

θ,γ>0X1,,Xn

L(θ,γ)=i=1nlogf(Xi|θ,γ)

Una solución "basada en programación" sería optimizar esta función utilizando una optimización restringida. Resolviendo para una solución óptima:

logLγ=nγ+1nlogxi1θ1nxiγlogxi=0
logLθ=nθ+1θ21nxiγ=0

θ

[1nxiγlogxi1nxiγ1γ]=1n1nlogxi

γ^

θγ^

θ^=1nxiγ^n
suncoolsu
fuente
Una cosa de la que sería cauteloso es que parece que tenemos datos de series temporales aquí. Si los datos se muestrean en un corto período de tiempo, asumir la independencia podría ser peligroso. Dicho eso, (+1).
cardenal
@cardinal Por favor explique. Los datos varían en el transcurso de un mes o hasta un año, pero se toman muestras regularmente (10 minutos). ¿Qué podría implicar esto?
klonq
@cardinal Gracias por señalarlo. Tampoco estaba seguro si el supuesto de independencia es apropiado.
suncoolsu
1
@klonq, ¿cómo se toma la muestra? ¿Es la velocidad promedio durante los diez minutos entre grabaciones? ¿Más de un minuto antes de la grabación? ¿La velocidad instantánea en el momento de la grabación? Principalmente buscaría correlaciones en serie, lo que podría reducir considerablemente el tamaño efectivo de la muestra. El uso de una estimación de ML basada en un supuesto de muestras independientes puede o no proporcionarle una buena estimación en ese contexto, y se debe tener especial cuidado con respecto a cualquier inferencia basada en la estimación. Sin embargo, el enfoque de Suncoolsu definitivamente proporciona una primera línea de ataque.
Cardenal
@klonq - Si es posible, ¿puede describir cómo se recolectó su muestra? ¿Cómo se ven los datos?
suncoolsu
12

Utilice fitdistrplus:

Necesita ayuda para identificar una distribución por su histograma

Aquí hay un ejemplo de cómo se ajusta la Distribución Weibull:

library(fitdistrplus)

#Generate fake data
shape <- 1.9
x <- rweibull(n=1000, shape=shape, scale=1)

#Fit x data with fitdist
fit.w <- fitdist(x, "weibull")
summary(fit.w)
plot(fit.w)


Fitting of the distribution ' weibull ' by maximum likelihood 
Parameters : 
       estimate Std. Error
shape 1.8720133 0.04596699
scale 0.9976703 0.01776794
Loglikelihood:  -636.1181   AIC:  1276.236   BIC:  1286.052 
Correlation matrix:
          shape     scale
shape 1.0000000 0.3166085
scale 0.3166085 1.0000000

ingrese la descripción de la imagen aquí

bill_080
fuente
Gracias, pero estoy tratando de encontrar una solución en Java.
klonq
¿Algún indicador en la codificación R para obtener factores de forma y escala? Gracias.