Como transformar a distribuição leptocúrtica em normalidade?

12

Suponha que eu tenha uma variável leptocúrtica que gostaria de transformar em normalidade. Que transformações podem realizar essa tarefa? Estou ciente de que a transformação de dados nem sempre pode ser desejável, mas como uma atividade acadêmica, suponha que eu queira "martelar" os dados na normalidade. Além disso, como você pode ver no gráfico, todos os valores são estritamente positivos.

Eu tentei uma variedade de transformações (praticamente qualquer coisa que eu já usei antes, incluindo , etc.), mas nenhum deles funciona particularmente bem. Existem transformações bem conhecidas para tornar as distribuições leptocúrticas mais normais?1X,X,asinh(X)

Veja o exemplo de plot normal de QQ abaixo:

insira a descrição da imagem aqui

Minador
fonte
5
Você está familiarizado com a transformação integral de probabilidade ? Foi invocado em alguns tópicos neste site , se você gostaria de vê-lo em ação.
whuber
8
Você precisa de algo que funcione simetricamente (variável "meio"), respeitando também o sinal. Nada do que você tentou chega perto se você não tiver um "meio". Use a mediana para "meio" e tente a raiz cúbica dos desvios, lembrando-se de implementar a raiz cúbica como sinal (.) * Abs (.) ^ (1/3). Sem garantias e muito ad hoc, mas deve avançar na direção certa.
Nick Cox
1
Como você chama isso de platykurtic? A menos que eu tenha perdido algo, parece que ele tem curtose mais alta que o normal.
Glen_b -Reinstala Monica
3
@ Glen_b eu acho que está certo: é leptokurtic. Mas ambos os termos são bastante tolos, exceto na medida em que permitem referência ao desenho original de Student in Biometrika . O critério é curtose; os valores são altos ou baixos ou (melhor ainda) quantificados.
Nick Cox
3
t6

Respostas:

12

Eu uso distribuições de cauda longa Lambert W x F para descrever e transformar dados leptokurtic. Veja (meus) posts a seguir para obter mais detalhes e referências:

Aqui está um exemplo reproduzível usando o pacote LambertW R.

library(LambertW)
set.seed(1)
theta.tmp <- list(beta = c(2000, 400), delta = 0.2)
yy <- rLambertW(n = 100, distname = "normal", 
                theta = theta.tmp)

test_norm(yy)

testar a normalidade dos dados originais

## $seed
## [1] 267509
## 
## $shapiro.wilk
## 
##  Shapiro-Wilk normality test
## 
## data:  data.test
## W = 1, p-value = 0.008
## 
## 
## $shapiro.francia
## 
## 	Shapiro-Francia normality test
## 
## data:  data.test
## W = 1, p-value = 0.003
## 
## 
## $anderson.darling
## 
##  Anderson-Darling normality test
## 
## data:  data
## A = 1, p-value = 0.01

yy×XN(2000,400)δ=0,25

Agora, voltando à sua pergunta: como tornar esses dados leptocúrticos normais novamente? Bem, podemos estimar os parâmetros da distribuição usando o MLE (ou para métodos de uso de momentos IGMM()),

mod.Lh <- MLE_LambertW(yy, distname = "normal", type = "h")
summary(mod.Lh)

## Call: MLE_LambertW(y = yy, distname = "normal", type = "h")
## Estimation method: MLE
## Input distribution: normal
## 
##  Parameter estimates:
##        Estimate  Std. Error  t value Pr(>|t|)    
## mu     2.05e+03    4.03e+01    50.88   <2e-16 ***
## sigma  3.64e+02    4.36e+01     8.37   <2e-16 ***
## delta  1.64e-01    7.84e-02     2.09    0.037 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## -------------------------------------------------------------- 
## 
## Given these input parameter estimates the moments of the output random variable are 
##   (assuming Gaussian input): 
##  mu_y = 2052; sigma_y = 491; skewness = 0; kurtosis = 13.

W_delta()X

# get_input() handles does the right transformations automatically based on
# estimates in mod.Lh
xx <- get_input(mod.Lh)
test_norm(xx)

normalidade de teste dos dados gaussianizados

## $seed
## [1] 218646
## 
## $shapiro.wilk
## 
##  Shapiro-Wilk normality test
## 
## data:  data.test
## W = 1, p-value = 1
## 
## 
## $shapiro.francia
## 
## 	Shapiro-Francia normality test
## 
## data:  data.test
## W = 1, p-value = 1
## 
## 
## $anderson.darling
## 
##  Anderson-Darling normality test
## 
## data:  data
## A = 0.1, p-value = 1

Voila!

Georg M. Goerg
fonte
Eu sou um fã, e começou a trabalhar em um scikit-learn como a versão de python: github.com/gregversteeg/gaussianize
Greg Ver Steeg
Georg, é possível fornecer uma explicação mais intuitiva de como sua transformação funciona?
azuric
Z=vocêexp(δ/2você2)vocêδ>0 0Z
9

placa(.)abdômen(.)13Y-mediana(Y)

Embora a transformação da raiz do cubo não tenha funcionado bem, ela resulta na raiz quadrada e a raiz mais obscura de três quartos funciona bem.

Aqui estava o gráfico de densidade original do kernel correspondente ao gráfico QQ da variável leptokurtic na pergunta original:

insira a descrição da imagem aqui


Depois de aplicar a transformação de raiz quadrada aos desvios, o gráfico QQ fica assim:

insira a descrição da imagem aqui

Melhor, mas pode estar mais perto.


Martelando um pouco mais, aplicar a transformação raiz de três quartos aos desvios fornece:

insira a descrição da imagem aqui


E a densidade final do kernel dessa variável transformada se parece com isso:

insira a descrição da imagem aqui

Parece perto de mim.

Minador
fonte
8

Em muitos casos, pode simplesmente não haver transformação monotônica de forma simples que produza um resultado quase normal.

Por exemplo, imagine que temos uma distribuição que é uma mistura finita de distribuições lognormal de vários parâmetros. Uma transformação de log transforma qualquer componente da mistura em normalidade, mas a mistura de normais nos dados transformados deixa você com algo que não é normal.

Ou pode haver uma transformação relativamente agradável, mas não de uma das formas que você pensaria em tentar - se você não souber a distribuição dos dados, poderá não encontrá-lo. Por exemplo, se os dados foram distribuídos por gama, você nem encontrará a transformação exata para a normalidade (o que certamente existe), a menos que eu lhe diga exatamente qual é a distribuição (embora você possa encontrar a transformação de raiz de cubo que neste maiúsculas e minúsculas o tornariam bem próximo do normal, desde que o parâmetro de forma não seja muito pequeno).

Existem inúmeras maneiras pelas quais os dados podem parecer razoavelmente passíveis de serem transformados, mas que não ficam muito bem em nenhuma lista de transformações óbvias.

Se você pode nos dar acesso aos dados, pode ser que possamos identificar uma transformação que está bem - ou podemos mostrar por que você não encontrou uma.

Apenas pela impressão visual, parece uma mistura de duas normais com escalas diferentes. Há apenas uma leve sugestão de assimetria, que você pode facilmente observar por acaso. Aqui está um exemplo de amostra de uma mistura de duas normais com média comum - como você vê, parece um pouco com o seu gráfico (mas outras amostras podem parecer mais pesadas ou mais leves) - nesse tamanho de amostra, há muita variação na ordem estatísticas fora de 1 sd em ambos os lados da média).

insira a descrição da imagem aqui

De fato, aqui estão as suas e as minhas sobrepostas:

insira a descrição da imagem aqui

Glen_b -Reinstate Monica
fonte
Certamente parece uma mistura de duas distribuições normais de diferentes escalas, excelente observação.
Minador