Normal-Distribution
如何將尖峰分佈轉換為正態分佈?
假設我有一個想要轉換為正態的leptokurtic 變量。哪些轉換可以完成這項任務?我很清楚轉換數據可能並不總是可取的,但作為一種學術追求,假設我想將數據“錘擊”成常態。此外,從圖中可以看出,所有值都是嚴格正數。
我嘗試了各種轉換(幾乎我以前見過的任何東西,包括等),但它們都不是特別好。是否有眾所周知的變換可以使尖峰分佈更正常?
請參見下面的正態 QQ 圖示例:
我使用重尾 Lambert W x F 分佈來描述和轉換細峰數據。有關更多詳細信息和參考,請參閱(我的)以下帖子:
- 增加正常 rv 峰度和偏度的變換:這顯示了密度在變化時如何變化的一些說明.
- 這些數據的分佈是什麼?:如何使用它來估計模型參數和對數據進行高斯化的應用示例。
這是一個使用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
的 qqplot
yy
與原始帖子中的 qqplot 非常接近,並且數據確實略微呈尖峰態,峰度為 5。因此,Lambert W 可以很好地描述您的數據帶輸入的高斯分佈和尾部參數(這意味著只有時刻才能訂購存在)。現在回到你的問題:如何讓這個 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()
)將數據反變換到輸入,這 - 按照設計 - 應該非常接近正常值。# 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
瞧!