[R-br] FW: [R] HELP ERROR Weibull values must be > 0

Bernardo Rangel Tura tura em centroin.com.br
Quarta Fevereiro 22 07:24:40 BRST 2012


On 02/22/2012 12:38 AM, Vanúcia Schumacher wrote:

> Tura,
> meus dados possuem mais de 700 elementos, fica muito inviavel passa-los aqui por summarya questão e que nesses dados eu tenho valores ausentes e valores 0, li algumas sugestões em que deve-se mensurar os valores em 0 para 0.00001,sendo assim ele roda tranquilo , mas retorna um aviso de Nas, mas me retorna os parametros.
> Não sei se estou fazendo a coisa certa, mas como estou querendo ajustar a distribuição m dados de vento paraprodução de energia eólica, conforme varios artigos que li, essa seria a melhor distribuição.
> Se puder ajudar fico muito agradecida.
>


Bom dia Vanúncia

Quando lhe falei do summary queria apenas o resultado, segue um exemplo 
para te exemplificar melhor

set.seed(146)
x<-rweibull(1000,shape=2,scale=3)
x[c(34,56,12,156,789)]<-0
x[c(44,62,21,516,189)]<-NA
summary(x)
    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's
   0.000   1.585   2.468   2.630   3.467   8.519   5.000

Vamos agora a seu problema.

Vejo duas situações distintas: o valor 0 é possível nos seus dados (o 
que significa que de fato existe uma medida de valor 0) ou o valor 0 não 
é possível (este valor ocorreu porque seu equipamento de medida não 
consegue medir abaixo de um valor limite qualquer ou em vez de ser 
preenchido como NA alguém pois 0)

Na primeira situação o ideal é não ajustar uma weibull pois ela não 
permite este tipo de valor. Nesta situação vejo duas possives soluções:

1- Achar outra distribuição
2- Utilizar uma mistura de distribuições, algo como uma weibull + uma 
"distribuição carregada" no 0, ou seja, dados = p*weibull+(1-p)*0, onde 
p é a probabilidade do seu dado ter um distribuição weibull.

Na segunda situação tanto o zero quanto o NA são valores omissos e a 
solução é usar de imputação. Só que a situação aqui exige cuidado. 
Observe que a imputação para o NA é diferente da imputação para o 0.
O NA pode ter qualquer valor mais o 0 deve ter um valor maior que 0 e 
menor que o limite mínimo de detecção do seu aparelho.

Usar um valor fixo irá por um viés na sua estimativa e dificultará o 
ajuste. Eu resolveria da seguinte forma

para os dados NA

require(MASS)

x_linha <- x[!is.na(x)&x!=0]

para<-fitdistr(x_linha,"weibull")

# garantir a reprodutibilidade da imputação
set.seed(qualquer valor que você quiser)

x[is.na(x)] <- rweibull(sum(is.na(x)),para$estimate)

para os dados 0 eu utilizaria uma distribuição uniforme entre 0 e o 
menor valor de detecção algo como

# garantir a reprodutibilidade da imputação
set.seed(qualquer valor que você quiser)

x[x==0]<-runif(numero de valores iguais a zero, 0, menor valor de detecção)


A nova distribuição será uma weibull com algum viés por causa da 
uniforme, mas este você pode estimar pois conhece a distribuição

[]s
Tura











Mais detalhes sobre a lista de discussão R-br