我应该对双峰分布使用什么转换?

机器算法验证 r 数据转换 二项分布
2022-04-16 12:44:19

我有一些双峰数据,例如生成的数据(R 语言),但我不知道如何将其转换为具有正态分布或同方差性。我正在运行线性判别分析,我需要同方差性,但我无法通过这种分布得到它。你有这个问题的替代方案吗?

生成虚假数据

x = rnorm(100, mean = 10, sd = 2)
y = rnorm(100, mean = 20, sd = 2)
bimodal =c(x,y)
shapiro.test(bimodal)
hist(bimodal)

使用 Box-Cox 进行转换

library(geoR)
lambda=boxcoxfit(bimodal)$lambda
bin.tr.bc=((bimodal^lambda)-1)/(lambda)

shapiro.test(bin.tr.bc)
hist(bin.tr.bc)

日志

shapiro.test(log(bimodal))
hist(log(bimodal))

平方根

shapiro.test(sqrt(bimodal))
hist(sqrt(bimodal))

对数平方

shapiro.test((log(bimodal))^2)
hist((log(bimodal))^2)

对数指数 1.5

shapiro.test((log(bimodal))^1.5)
hist((log(bimodal))^1.5)

立方根

shapiro.test((bimodal)^(1/3))
hist((bimodal)^(1/3))

绝望的反正弦复数变换

shapiro.test(asin((bimodal/max(bimodal))^(1/2)))
hist(asin((bimodal/max(bimodal))^(1/2)))
2个回答

你的变量binomial不是二项式的。你是说双峰吗?

尝试这个:

transformed <- abs(binomial - mean(binomial))
shapiro.test(transformed)
hist(transformed)

这会产生接近于略微审查的正态分布的东西,并且(取决于你的种子)

        Shapiro-Wilk normality test

data:  transformed
W = 0.98961, p-value = 0.1564

在此处输入图像描述

一般来说,任意变换很难证明是正确的。你需要一个理由来做这种事情,独立于实际数据

没有单调变换可以做你想做的事,非单调变换通常是个坏主意。通常,您应该根据经验或使用混合模型对双峰进行建模。

例如,将一个点放置在带有指示变量的左叶或右叶中,就好像两个进程正在生成两个不同的分布,但您只能看到组合的结果。在不了解您的问题的情况下,我没有任何更具体的建议。