データを取得し、データの分布をプロットし、qqnorm関数を使用しましたが、正規分布に従っていないようです。データを記述するためにどの分布を使用する必要がありますか?
経験累積分布関数


データを取得し、データの分布をプロットし、qqnorm関数を使用しましたが、正規分布に従っていないようです。データを記述するためにどの分布を使用する必要がありますか?
経験累積分布関数


回答:
ヘビーテールのランベルトW x FまたはゆがんだランベルトW x Fディストリビューションを試してみることをお勧めします(免責事項:私は著者です)。Rでは、それらはLambertWパッケージに実装されています。
彼らは、ランダム変数(RV)のパラメータ、非線形変換から生じるヘビーテイル(スキュー)バージョンに、Y 〜ランバートW × F。以下のためにFがガウシアンである、重尾ランバートW FはTukeyのに低減xは時間分布。(ここではヘビーテールバージョンの概要を説明しますが、歪んだものも同様です。)
彼らは持っている一つのパラメータ(γ ∈ RスキューランバートWはF X用)尾の重さ(歪度)の度合いを調節します。オプションで、左と右の異なるヘビーテールを選択して、ヘビーテールと非対称を実現することもできます。これは、標準正規変換U 〜N(0 、1 )ランバートWに×ガウスZによって Z = U EXP (δ
場合、ZはUよりも裾が重い。ためδ = 0、Z ≡ U 。
ガウスをベースラインとして使用したくない場合は、お気に入りの分布の他のランバートWバージョンを作成できます。たとえば、t、ユニフォーム、ガンマ、指数、ベータなどです。テールランベルトW xガウス分布(または歪んだランベルトW xt)分布は、出発点として適しているようです。
library(LambertW)
set.seed(10)
### Set parameters ####
# skew Lambert W x t distribution with
# (location, scale, df) = (0,1,3) and positive skew parameter gamma = 0.1
theta.st <- list(beta = c(0, 1, 3), gamma = 0.1)
# double heavy-tail Lambert W x Gaussian
# with (mu, sigma) = (0,1) and left delta=0.2; right delta = 0.4 (-> heavier on the right)
theta.hh <- list(beta = c(0, 1), delta = c(0.2, 0.4))
### Draw random sample ####
# skewed Lambert W x t
yy <- rLambertW(n=1000, distname="t", theta = theta.st)
# double heavy-tail Lambert W x Gaussian (= Tukey's hh)
zz =<- rLambertW(n=1000, distname = "normal", theta = theta.hh)
### Plot ecdf and qq-plot ####
op <- par(no.readonly=TRUE)
par(mfrow=c(2,2), mar=c(3,3,2,1))
plot(ecdf(yy))
qqnorm(yy); qqline(yy)
plot(ecdf(zz))
qqnorm(zz); qqline(zz)
par(op)

### Parameter estimation ####
mod.Lst <- MLE_LambertW(yy, distname="t", type="s")
mod.Lhh <- MLE_LambertW(zz, distname="normal", type="hh")
layout(matrix(1:2, ncol = 2))
plot(mod.Lst)
plot(mod.Lhh)

この重尾の生成はに基づいているため、全単射のRV /データの変換には、データから重尾を削除することができ、それらがあるかどうかを確認素敵は今、すなわち、それらはガウスであれば(と正規のテストを使用してテスト)。
### Test goodness of fit ####
## test if 'symmetrized' data follows a Gaussian
xx <- get_input(mod.Lhh)
normfit(xx)

これは、シミュレートされたデータセットではかなりうまくいきました。私はあなたにそれを試してみて、Gaussianize()あなたのデータもできるかどうか確かめることをお勧めします。
ただし、@ whuberが指摘したように、ここでは二峰性が問題になる可能性があります。したがって、多峰性で何が起こっているのか(ヘビーテールなしで)変換されたデータをチェックインして、(元の)データをモデル化する方法に関する洞察を提供したい場合があります。
これは、正規分布よりも両方向に長い裾を持つ非対称分布のように見えます。
観測されたポイントは、左側と右側の両方で正規分布の下で予想されるポイントよりも極端であるため(つまり、それぞれラインの下と上にある)、ロングテールであることがわかります。
非対称性がわかります。右裾では、正規分布の下で期待されるよりも極端なポイントの範囲が、左裾よりも大きいためです。
このような形の「缶詰」分布は考えられませんが、上記の特性を持つ分布を「作り出す」のはそれほど難しくありません。
シミュレーションの例を次に示します(R)。
set.seed(1234)
x=rexp(1e3)
y=-rexp(1e3,rate=2)
z=c(x,y)
qqnorm(z)
qqline(z) # see below for the plot.
plot( ecdf(z) ) # see below for plot (2nd plot)
この例は、あなたが見ているものと非常によく似たqqplotと経験的CDFを(定性的に)生成します。

どの分布が最適であるかを判断するために、最初にいくつかの潜在的なターゲット分布を特定します。データを生成した実際のプロセスについて考え、次にいくつかの潜在的な密度をデータに当てはめ、対数尤度スコアを比較して確認しますどの潜在的分布が最適か。これは、MASSライブラリの関数fitdistrを使用して、Rで簡単に実行できます。
データがマクロのzのようなものである場合:
>fitdistr(z,'cauchy',list(location=mean(z),scale=sqrt(sd(z))))$loglik
[1] -2949.068
> fitdistr(z,'normal')$loglik
[1] -3026.648
> fitdistr(z,'t')$loglik
[1] -2830.861
したがって、これはt分布をマクロのデータに(私たちが試したものの)最適なものとして与えます。fitdistrからのパラメーターを使用するいくつかのqqplotsでこれを確認します。
> qqplot(z,rt(length(z),df=2.7))
次に、このプロットを他の分布近似と比較します。