假设我有一个想要转换为正态的leptokurtic 变量。哪些转换可以完成这项任务?我很清楚转换数据可能并不总是可取的,但作为一种学术追求,假设我想将数据“锤击”成常态。此外,从图中可以看出,所有值都是严格正数。
我尝试了各种转换(几乎所有我以前见过的转换,包括 等),但它们都不是特别好。是否有众所周知的变换可以使尖峰分布更正常?
请参见下面的正态 QQ 图示例:
假设我有一个想要转换为正态的leptokurtic 变量。哪些转换可以完成这项任务?我很清楚转换数据可能并不总是可取的,但作为一种学术追求,假设我想将数据“锤击”成常态。此外,从图中可以看出,所有值都是严格正数。
我尝试了各种转换(几乎所有我以前见过的转换,包括 等),但它们都不是特别好。是否有众所周知的变换可以使尖峰分布更正常?
请参见下面的正态 QQ 图示例:
我使用重尾 Lambert W x F 分布来描述和转换细峰数据。有关更多详细信息和参考,请参阅(我的)以下帖子:
这是一个使用LambertWR包的可重现示例。
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
的 qqplotyy
非常接近您在原始帖子中的 qqplot,并且数据确实略微呈尖峰态,峰度为 5。因此,您的数据可以通过输入 $X \sim N 的 Lambert W $\times$ 高斯分布很好地描述(2000, 400)$ 和 $\delta = 0.2$ 的尾部参数(这意味着仅存在高达 $\leq 5$ 的时刻)。 Gaussian distribution with input and a tail parameter of (which implies that only moments up to order exist).
现在回到你的问题:如何让这个 leptokurtic 数据再次正常?好吧,我们可以使用 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$,按照设计,它应该非常接近正常值。, which -- by design -- should be very close to a normal.
# 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
瞧!
这个答案的功劳归功于@NickCox 在原始问题的评论部分中的建议。他建议我减去数据的中位数并将转换应用于偏差。例如,$\text{sign(.)}\cdot\text{abs(.)}^{\frac 1 3}$,以 $Y-\text{median}(Y)$ 作为参数。, with as the argument.
虽然立方根变换效果不佳,但事实证明平方根和更模糊的四分之三根效果很好。
这是与原始问题中细峰变量的 QQ 图相对应的原始核密度图:
对偏差应用平方根变换后,QQ 图如下所示:
更好,但它可以更接近。
再锤一些,将四分之三根变换应用于偏差给出:
这个转换后的变量的最终核密度如下所示:
看起来离我很近。
在许多情况下,可能根本没有简单形式的单调变换会产生接近正常的结果。
例如,假设我们有一个分布,它是各种参数的对数正态分布的有限混合。对数变换会将混合的任何分量转换为正态,但转换后的数据中的正态混合会给您留下不正常的东西。
或者可能有相对不错的转换,但不是您想尝试的一种形式——如果您不知道数据的分布,您可能找不到它。例如,如果数据是伽马分布的,除非我确切地告诉您分布是什么,否则您甚至找不到确切的正态变换(当然存在)(尽管您可能会偶然发现在这个只要形状参数不太小,case 就会使其非常接近正常值)。
有无数种方法可以使数据看起来可以合理地进行转换,但在任何明显的转换列表中看起来都不是很好。
如果您可以让我们访问数据,那么我们很可能可以发现一个可行的转换 - 或者我们可以向您展示您找不到的原因。
从那里的视觉印象来看,它看起来更像是两个不同比例的法线的混合体。只有轻微的不对称迹象,你可以很容易地偶然观察到。这是一个来自具有共同平均值的两个法线混合的样本示例 - 正如您所看到的,它看起来很像您的图(但其他样本可能看起来更重或更轻 - 在这个样本大小下,顺序有很多变化均值两侧 1 sd 以外的统计数据)。
事实上,这是你和我的叠加: