Como posso determinar os parâmetros weibull dos dados?

10

Eu tenho um histograma de dados de velocidade do vento que geralmente é representado usando uma distribuição weibull. Eu gostaria de calcular os fatores de forma e escala do weibull que melhor se ajustam ao histograma.

Preciso de uma solução numérica (em oposição às soluções gráficas ), porque o objetivo é determinar o formulário do weibull programaticamente.

Editar: as amostras são coletadas a cada 10 minutos, a velocidade do vento é calculada em média durante os 10 minutos. As amostras também incluem a velocidade máxima e mínima do vento registrada durante cada intervalo que são ignoradas no momento, mas eu gostaria de incorporar mais tarde. A largura do compartimento é de 0,5 m / s

Histograma para 1 mês de dados

klonq
fonte
11
quando você diz que possui o histograma - quer dizer também ter as informações sobre as observações ou conhece SOMENTE a largura e a altura da bandeja?
30511 suncoolsu
@suncoolsu Eu tenho todos os pontos de dados. Conjuntos de dados que variam de 5.000 a 50.000 registros.
klonq
Você não conseguiu coletar uma amostra aleatória dos dados e executar um MLE dos parâmetros?
30511 schenectady
2
Qual é o objetivo da estimativa? Caracterizar retrospectivamente condições passadas? Para prever a geração futura de energia em um local? Prever geração de energia em uma grade de turbinas? Calibrar um modelo meteorológico? Etc. Para esta pergunta, determinar uma solução apropriada depende criticamente de como será usada.
whuber
No momento, a idéia da @whuber é resumir os conjuntos de dados de vento de uma forma que permita a comparação de período para período e / ou site para site. Mais tarde, o objetivo será comparar tendências e, como você diz, formar julgamentos quanto à produção futura, etc. Sou muito novato em estatísticas, mas tenho uma montanha de dados (que não posso compartilhar) e gostaria de extrair muita informação dele possível. Se você puder me indicar alguma leitura sobre esse assunto, seria muito apreciada.
klonq

Respostas:

11

A estimativa de máxima verossimilhança dos parâmetros Weibull pode ser uma boa ideia no seu caso. Uma forma de distribuição Weibull é assim:

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

Onde são parâmetros. Dadas as observações , a função de probabilidade de log éθ,γ>0X1,,Xn

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

Uma solução "baseada em programação" seria otimizar essa função usando otimização restrita. Solução para solução ideal:

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

Ao eliminar , obtemos:θ

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

Agora isso pode ser resolvido para a estimativa de ML . Isso pode ser realizado com o auxílio de procedimentos iterativos padrão que são resolvidos para encontrar a solução da equação, como - Newton-Raphson ou outros procedimentos numéricos.γ^

Agora pode ser encontrado em termos de como:θγ^

θ^=1nxiγ^n
suncoolsu
fonte
Uma coisa de que eu seria cauteloso é que parece que temos dados de séries temporais aqui. Se os dados forem amostrados em um curto período de tempo, assumir a independência pode ser perigoso. Dito isto, (+1).
cardeal
@ cardinal Por favor, explique. Os dados variam ao longo de um mês ou até um ano, mas são amostrados regularmente (10 minutos). O que isso pode implicar?
klonq
@ cardinal Obrigado por apontar. Também não tinha certeza se a suposição de independência é apropriada.
suncoolsu
11
@klonq, como é feita a amostra? É a velocidade média durante os dez minutos entre as gravações? Mais de um minuto antes da gravação? A velocidade instantânea no momento da gravação? Principalmente, eu estaria procurando correlações em série, o que poderia reduzir consideravelmente o tamanho efetivo da amostra. O uso de uma estimativa de ML baseada na suposição de amostras independentes pode ou não ainda fornecer uma boa estimativa nesse contexto, e deve-se tomar um cuidado especial com relação a qualquer inferência baseada na estimativa. A abordagem do Suncoolsu definitivamente fornece uma primeira linha de ataque, no entanto.
cardeal
@klonq - Se possível, você pode descrever como sua amostra foi coletada? Como são os dados?
suncoolsu
12

Use fitdistrplus:

Precisa de ajuda para identificar uma distribuição por seu histograma

Aqui está um exemplo de como a Distribuição Weibull é adequada:

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

insira a descrição da imagem aqui

bill_080
fonte
Obrigado, mas estou tentando encontrar uma solução em Java.
klonq
algum ponteiro na codificação R para obter fatores de forma e escala? Obrigado.