Estou trabalhando em um algoritmo que se baseia no fato de que as observações são normalmente distribuídas e eu gostaria de testar a robustez do algoritmo para essa suposição empiricamente.
Para fazer isso, eu estava procurando uma sequência de transformações que progressivamente iria perturbar a normalidade da . Por exemplo, se os são normais, eles têm assimetria e curtose , e seria bom encontrar uma sequência de transformação que aumente progressivamente as duas.
Minha idéia era simular alguns dados normalmente distribuídos aproximadamente e testar o algoritmo nisso. Que o algoritmo de teste em cada conjunto de dados transformado , para ver quanto a saída está mudando.
Note-se que não controlar a distribuição do simulado s, por isso, não pode simular-los usando uma distribuição que generaliza o normal (tal como a distribuição de erro é enviesado Generalizada).
fonte
Respostas:
Isso pode ser feito usando a transformação sinh-arcsinh de
A transformação é definida como
onde e ô ∈ R + . Quando essa transformação é aplicada ao CDF normal S ( x ; ϵ , δ ) = Φ [ H ( x ; ϵ , δ ) ] , produz uma distribuição unimodal cujos parâmetros ( ϵ , δ ) controlam a assimetria e curtose, respectivamente (Jones e Pewsey, 2009), no sentido de van Zwet (1969) . Além disso, se ϵ = 0 e δϵ∈R δ∈R+ S( x ; ϵ , δ)=Φ[H(x;ϵ,δ)] (ϵ,δ) ϵ=0 , obtemos a distribuição normal original. Veja o seguinte código R.δ= 1
Portanto, escolhendo uma sequência apropriada de parâmetros , é possível gerar uma sequência de distribuições / transformações com diferentes níveis de assimetria e curtose e fazê-las parecer tão semelhantes ou diferentes da distribuição normal quanto desejar.(ϵn, δn)
O gráfico a seguir mostra o resultado produzido pelo código R. Para (i) e δ = 1 , e (ii) ϵ = 0 e δ = ( 0,5 , 0,75 , 1 , 1,25 , 1,5 ) .ϵ = ( - 2 , - 1 , 0 , 1 , 2 ) δ= 1 ϵ = 0 δ= ( 0,5 , 0,75 , 1 , 1,25 , 1,5 )
A simulação dessa distribuição é direta, pois você precisa transformar uma amostra normal usando o inverso de .( ⋆ )
fonte
gamlss.dist::rSHASHo
pode gerar essas distribuições.Isso pode ser feito usando variáveis / distribuições aleatórias de Lambert W x F. Uma variável aleatória Lambert W x F (VR) é um X não-linearmente transformado (RV) X com distribuição F.
Gaussianize()
Eles são implementados no
As transformações Lambert W x F são apresentadas em três sabores:
type = 's'
type = 'h'
type = 'hh'
Consulte as referências sobre cauda (s) inclinada (s) e pesada (isenção de responsabilidade: eu sou o autor).
Em R, você pode simular, estimar, plotar, etc. várias distribuições Lambert W x F com o pacote LambertW .
fonte
Uma dessas seqüências é a exponenciação em vários graus. Por exemplo
fonte
Mesma resposta que @ user10525, mas em python
[
fonte