使用 qqplot 将原始数据转换为高斯(正常)导致相同原始数据值的不同正常值

Convert raw data to Gaussian (normal) using qqplot leads to different normal values for same raw data value

我想使用 qqnorm 函数将原始数据转换为高斯分布(均值=0,标准差=1)。但我意识到,对于相同的原始值,我得到不同的高斯值。例如:

mydata = c(2.4,       3.7,       2.1,       3,         1.6,       2.5,       2.9, 2.9 )
myquant = qqnorm(mydata)
myquant
          -0.4727891  1.4342002 -0.8524950  0.8524950 -1.4342002 -0.1525060  0.1525060  0.4727891

此外,我使用以下代码将数据转换为正常数据:

for (i in 1:ncol(sampledataSubGaus) ) {
  
  
  sampledataSubGaus[,i] <- qqnorm( as.matrix(sampledataSub[,i]) )$x
  
}

我又遇到了同样的问题。 对此有解释吗?供您参考,我使用了另一个名为 score.transform 的函数,它的行为正常。

我不太确定您使用 qqnorm 将数据“转换”为 N(0,1) 是什么意思。 qqnorm() 函数 returns x,它们是与数据中相应分位数关联的正常分位数。 qqnorm() 的胆量正在做以下事情:

mydata = c(2.4,3.7,2.1,3,1.6,2.5,2.9, 2.9 )
y <- mydata  
n <- length(y)
x <- qnorm(ppoints(n))[order(order(y))]
plot(x,y)

如果您采用这些值的子集,您将得到不同的 x 值,因为它将使用不同数量的点来生成正常分位数(即 [=16 的值=] 会有所不同)。

我可能是错的,但我从未听说过有人使用 qqnorm() 来转换数据 - 它是对正常情况的诊断,而不是补救措施。在适当的情况下,像 Box-Cox transformation 这样的东西可以帮助将偏斜变量转换为具有更正态分布的变量。