如何将瘦态分布转变为正态分布?


12

假设我有一个变数变量,我想将其转换为正态分布。哪些转换可以完成此任务?我很清楚,转换数据可能并不总是理想的,但是作为一项学术追求,假设我想将数据“锤击”到正常状态。此外,从图中可以看出,所有值均严格为正。

我已经尝试了各种转换(我以前见过的几乎所有转换,包括等),但是它们都不能很好地工作。是否有使Leptokurtic分布更正常的众所周知的转换?1X,X,asinh(X)

请参见下面的示例普通QQ图:

在此处输入图片说明


5
您是否熟悉概率积分变换?如果您希望在实际操作中看到它,则已在该站点的多个线程中对其进行了调用。
ub

8
您需要在对称性上工作的变量(变量 “中间”),同时还要注意符号。如果您没有“中间”,那么您尝试过的任何事情都不会接近。将中值用作“中间”,并尝试偏差的立方根,记住记住将立方根实现为sign(。)* abs(。)^(1/3)。没有任何保证并且非常临时,但是它应该朝着正确的方向推进。
尼克·考克斯

1
嗯,是什么让您称呼普拉蒂库里奇人?除非我错过任何东西,否则看起来它的峰度比正常人要高。
Glen_b-恢复莫妮卡2014年

3
@Glen_b我认为是正确的:这是leptokurtic。但是,这两个术语都非常愚蠢,除非它们允许学生参考Biometrika中的原始漫画。标准是峰度;值是高还是低或(甚至更好)量化。
尼克·考克斯

3
Leptokurtic为什么被描述为“瘦尾巴”?虽然尾巴的粗细与峰度之间没有必要的关系,但总体趋势是沉重的尾巴与峰度有关(例如,将与正常值进行比较,以标准化的密度计)t6
Glen_b -Reinstate Monica 2014年

Answers:


12

我使用重尾Lambert W x F分布来描述和转换瘦体素数据。有关更多详细信息和参考,请参见以下我的帖子:

这是使用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)

测试原始数据的正态性

## $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

的qqplot yy是非常接近你qqplot在原岗位和数据确实是与你的。因此数据可以由一个兰伯特W¯¯很好地描述为5的峰度略微尖峰厚尾高斯分布与输入和尾部参数(这意味着仅存在阶次为矩)。X Ñ 2000 400 δ = 0.2 5×XN(2000,400)δ=0.25

现在回到您的问题:如何再次使该瘦体素数据正常?好吧,我们可以使用MLE估算分布的参数(或使用矩的方法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)

测试高斯数据的正态性

## $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

瞧!


我是一名迷,并且开始研究类似scikit-learn的python版本:github.com/gregversteeg/gaussianize
Greg Ver Steeg

Georg是否可以为您提供有关转换如何工作的更直观的解释?
azuric

@azuric它基于的逆变换,其中是标准的正常随机变量。无需详细说明(请参阅参考文献),应该直观地看出,对于,随机变量尾部很重。因此,当您观察重尾数据时,您要做的就是找到逆变换以获取“正常”数据。Ü δ > 0 žZ=Uexp(δ/2U2)Uδ>0Z
格奥尔格·戈尔格

9

此答案归功于原始问题的评论部分中的@NickCox的建议。他建议我减去数据的中位数,然后将转换应用于偏差。例如,,并以作为参数。 ÿ-中值Ýsign(.)abs(.)13Ymedian(Y)

尽管立方根的转换效果不佳,但事实证明平方根和更模糊的四分之三根效果很好。

这是与原始问题中瘦腿变量的QQ图相对应的原始内核密度图:

在此处输入图片说明


将平方根变换应用于偏差后,QQ图如下所示:

在此处输入图片说明

更好,但是可以更接近。


进行更多锤击,将四分之三的根变换应用于偏差,得出:

在此处输入图片说明


这个转换变量的最终内核密度如下所示:

在此处输入图片说明

看起来离我很近。


8

在许多情况下,可能根本就没有简单形式的单调变换会产生接近正常值的结果。

例如,假设我们有一个分布,它是各种参数的对数正态分布的有限混合。对数转换会将混合的任何分量转换为正态,但是转换后的数据中的法线混合会给您带来不正常的东西。

或可能有相对不错的转换,但不是您想尝试的一种形式-如果您不知道数据的分布,则可能找不到。例如,如果数据是伽玛分布的,除非我确切地告诉您分布是什么,否则您甚至都不会找到对正态性的确切变换(确实存在)(尽管您可能会偶然发现这种情况下的立方根变换)只要shape参数不是太小,情况就会非常接近正常情况)。

在无数种方法中,数据看起来可以合理地进行转换,但在任何明显的转换列表中看起来都不理想。

如果您可以让我们访问数据,则很可能是我们可以发现可以进行的转换-或可以向您展示为什么找不到一个转换。

仅从那里的视觉印象来看,它看起来就像是两个具有不同比例的法线的混合。仅有一点不对称提示,您很容易偶然发现。这是一个使用两个具有共同均值的法线混合而成的样本的示例-如您所见,它看起来有点像您的情节(但其他样本可能看起来更重或更轻尾)-在此样本大小下,顺序存在很大差异均值两端均超出1 sd的统计信息)。

在此处输入图片说明

实际上,这是您和我的叠加:

在此处输入图片说明


它的确看起来像是两个不同比例的正态分布的混合物,具有出色的观察力。
Underminer 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.