Como verifico se meus dados se encaixam em uma distribuição exponencial?

22

Como posso verificar se meus dados, por exemplo, salário, são de uma distribuição exponencial contínua em R?

Aqui está o histograma da minha amostra:

insira a descrição da imagem aqui

. Qualquer ajuda será muito apreciada!

stjudent
fonte
1
sua variável é discreta ou contínua? A distribuição exponencial é definida como contínua .
Curioso
contínuo. Gostaria de saber se existe qualquer teste em R para verificar se
stjudent
1
Bem vinda. Procure a função fitdistrem R. Ele ajusta as funções de densidade de probabilidade (pdfs) com base no método de estimativa de máxima verossimilhança (MLE). Pesquise também neste site os termos como pdf, fitdistr, mle e perguntas semelhantes. Lembre-se de que perguntas como essa quase requerem exemplos reproduzíveis para obter boas respostas. Além disso, ajuda se a pergunta não for puramente sobre programação (o que pode levá-la a ser colocada em espera como fora do tópico).
18713 Andre Andre
8
Uma distribuição exponencial será plotada como uma linha reta contra posição de plotagem) onde a posição de plotagem é (classificação , a classificação é para o valor mais baixo, é o tamanho da amostra e opções populares para incluem . Isso fornece um teste informal que pode ser tão ou mais útil do que qualquer teste formal. - um ) / ( n - 2 a + 1 ) 1 n um 1 / 2ln(1a)/(n2a+1)1na1/2
Nick Cox
O @Berkan desenvolveu a idéia do enredo quantil em seu post.
Nick Cox

Respostas:

29

Eu faria isso estimando primeiro o único parâmetro de distribuição rateusando fitdistr. Isso não informa se a distribuição se encaixa ou não, então você deve usar o teste de qualidade do ajuste . Para isso, você pode usar ks.test:

require(vcd)
require(MASS)

# data generation
ex <- rexp(10000, rate = 1.85) # generate some exponential distribution
control <- abs(rnorm(10000)) # generate some other distribution

# estimate the parameters
fit1 <- fitdistr(ex, "exponential") 
fit2 <- fitdistr(control, "exponential")

# goodness of fit test
ks.test(ex, "pexp", fit1$estimate) # p-value > 0.05 -> distribution not refused
ks.test(control, "pexp", fit2$estimate) #  significant p-value -> distribution refused

# plot a graph
hist(ex, freq = FALSE, breaks = 100, xlim = c(0, quantile(ex, 0.99)))
curve(dexp(x, rate = fit1$estimate), from = 0, col = "red", add = TRUE)

insira a descrição da imagem aqui

Da minha experiência pessoal (embora nunca o tenha encontrado oficialmente em nenhum lugar, confirme ou corrija-me), ks.testsó será executado se você fornecer primeiro a estimativa de parâmetros. Você não pode permitir que ele estime os parâmetros automaticamente, como por exemplo goodfit. É por isso que você precisa deste procedimento em duas etapas fitdistr.

Para mais informações siga o excelente guia de Ricci: MONTAGEM distribuições R .

Curioso
fonte
2
+1. O ks.test é o melhor teste para testar a qualidade do ajuste nessas situações? Eu acho que você também respondeu uma pergunta minha .
18713 Andre Andre
4
apenas um aviso, você deve ter cuidado se estiver estimando os parâmetros a partir dos próprios dados. Nesse caso, um teste como anderson querido pode ser o melhor, pois é robusto contra tais situações.
JPC
No teste KS para exponencialidade quando o parâmetro rate é estimado a partir dos dados: consulte Uma pergunta ingênua sobre o teste Kolmogorov Smirnov .
Scortchi - Restabelece Monica
8

Embora eu normalmente recomende verificar a exponencialidade usando gráficos de diagnóstico (como gráficos de QQ), discutirei os testes, pois as pessoas geralmente os querem:

Como sugere Tomas, o teste de Kolmogorov-Smirnov não é adequado para testar a exponencialidade com um parâmetro não especificado.

No entanto, se você ajustar as tabelas para a estimativa de parâmetros, obterá o teste de Lilliefors para a distribuição exponencial.

Lilliefors, H. (1969), "No teste de Kolmogorov-Smirnov para a distribuição exponencial com média desconhecida", Journal of the American Statistical Association , vol. 64 387-389.

O uso deste teste é discutido nas Estatísticas Não Paramétricas Práticas de Conover .

No entanto, em Goodness of Fit Techniques , de D'Agostino e Stephens , eles discutem uma modificação semelhante do teste de Anderson-Darling (um tanto obliquamente se bem me lembro bem, mas acho que todas as informações necessárias sobre como abordá-lo para o caso exponencial são encontrado no livro), e é quase certo que ele tem mais poder contra alternativas interessantes.

Da mesma forma, pode-se estimar algo como um teste de Shapiro-Francia (semelhante a, mas mais simples que o Shapiro-Wilk), baseando-se em que é a correlação entre as estatísticas da ordem e as pontuações exponenciais ( estatísticas de ordem exponencial esperada). Isso corresponde ao teste da correlação no gráfico QQ.rn(1r2)r

Finalmente, pode-se adotar a abordagem de teste suave , como no livro de Rayner & Best ( Smooth Tests of Goodness of Fit , 1990 - embora eu acredite que exista uma mais recente, com Thas e " in R " adicionado ao título). O caso exponencial também é abordado em:

JCW Rayner e DJ Best (1990), "Smooth Testes of Goodness of Fit: An Overview", International Statistical Review , vol. 58, nº 1 (abril de 1990), pp. 9-17

Cosma Shalizi também discute testes suaves em um capítulo de suas notas de aula de Análise Avançada de Dados em Graduação , ou veja o Capítulo 15 de seu livro Análise Avançada de Dados de um Ponto de Vista Elementar .

Para algumas das opções acima, pode ser necessário simular a distribuição da estatística de teste; para outras tabelas, estão disponíveis (mas, em alguns casos, pode ser mais fácil simular de qualquer maneira, ou ainda mais preciso simular a si mesmo, como no teste de Lilliefors, devido ao tamanho limitado da simulação no original).

Entre todas, eu me inclinaria a fazer o equivalente exponencial ao Shapiro-Francia (ou seja, testaria a correlação no gráfico QQ [ou, se estivesse fazendo tabelas, talvez use , que rejeitará os mesmos casos] - deve ser poderoso o suficiente para ser competitivo com os melhores testes, mas é muito fácil de fazer e tem uma correspondência agradável com a aparência visual do gráfico QQ (pode-se até escolha adicionar a correlação e o valor p ao gráfico, se desejar).n(1r2)

Glen_b -Reinstate Monica
fonte
5

Você pode usar um gráfico qq , que é um método gráfico para comparar duas distribuições de probabilidade, plotando seus quantis uns contra os outros.

Em R, não há função qq-plot pronta para uso para a distribuição exponencial especificamente (pelo menos entre as funções base). No entanto, você pode usar isso:

qqexp <-  function(y, line=FALSE, ...) { 
    y <- y[!is.na(y)]
    n <- length(y)
    x <- qexp(c(1:n)/(n+1))
    m <- mean(y)
    if (any(range(y)<0)) stop("Data contains negative values")
    ylim <- c(0,max(y))
    qqplot(x, y, xlab="Exponential plotting position",ylim=ylim,ylab="Ordered sample", ...)
    if (line) abline(0,m,lty=2)
    invisible()
  }

Ao interpretar seus resultados: Se as duas distribuições comparadas forem semelhantes, os pontos no gráfico qq estarão aproximadamente na linha y = x. Se as distribuições estiverem linearmente relacionadas, os pontos no gráfico qq ficarão aproximadamente em uma linha, mas não necessariamente na linha y = x.

Zhubarb
fonte
2
No Stata, qexpdo SSC é uma implementação enlatada.
Nick Cox