R中的连续PowerTransform/BoxCox变换
我有一个数据集需要转换成正态分布 首先,生成一个可复制的数据集R中的连续PowerTransform/BoxCox变换,r,function,transform,r-car,R,Function,Transform,R Car,我有一个数据集需要转换成正态分布 首先,生成一个可复制的数据集 df <- runif(500, 0, 100) 因为p
df <- runif(500, 0, 100)
因为p<0.05,转化为df
BoxCoxTrans(df)
然后它会给我以下错误消息
Error in qr.resid(xqr, w * fam(Y, lambda, j = TRUE)) :
NA/NaN/Inf in foreign function call (arg 5)
我做错了什么 添加
print(summary(y))
在结束之前,while
循环并观察计算爆炸。在任何情况下,重复应用Box-Cox都没有意义,因为您从第一次应用中获得了变换参数的ML(-like)估计量。此外,你为什么期望权力转换使均匀分布正常化
John您可以使用Box-Muller变换从随机均匀分布生成近似正态分布。这可能比Box-Cox变换更合适,后者通常用于将偏态分布转换为几乎正态分布 下面是一个应用于一组均匀分布数字的Box-Muller变换示例:
set.seed(1234)
size <- 5000
a <- runif(size)
b <- runif(size)
y <- sqrt(-2 * log(a)) * cos(2 * pi * b)
plot(density(y), main = "Example of Box-Muller Transformation", xlab="x", ylab="f(x)")
library(nortest)
#> lillie.test(y)
#
# Lilliefors (Kolmogorov-Smirnov) normality test
#
#data: y
#D = 0.009062, p-value = 0.4099
#
#> shapiro.test(y)
#
# Shapiro-Wilk normality test
#
#data: y
#W = 0.99943, p-value = 0.1301
#
set.seed(1234)
大小您可能不希望递归转换y
。不客气。我很高兴能帮上忙;-)干杯非常感谢。这很有帮助!完全有道理。我需要复习我的统计书。
print(summary(y))
set.seed(1234)
size <- 5000
a <- runif(size)
b <- runif(size)
y <- sqrt(-2 * log(a)) * cos(2 * pi * b)
plot(density(y), main = "Example of Box-Muller Transformation", xlab="x", ylab="f(x)")
library(nortest)
#> lillie.test(y)
#
# Lilliefors (Kolmogorov-Smirnov) normality test
#
#data: y
#D = 0.009062, p-value = 0.4099
#
#> shapiro.test(y)
#
# Shapiro-Wilk normality test
#
#data: y
#W = 0.99943, p-value = 0.1301
#