R语言对偏态换数据进行转换(对数、平方根、立方根)

我们进行研究的时候经常会遇见偏态数据,数据转换是统计分析和数据预处理中的一项基本技术。使用 R 时,了解如何正确转换数据有助于满足统计假设、标准化分布并提高分析的准确性。在 R 中实现和可视化最常见的数据转换:对数、平方根和立方根转换。

在这里插入图片描述
为什么要转换数据?

了解数据分布
当您的数据集不满足统计分析所需的假设时(例如绘制限制立方样条或者曲线拟合不理想的时候),数据转换就变得必要。常见方案包括:

高度偏斜的分布
非线性关系
异方差性(不等方差)
非正态分布

下面咱们正式开始:
先生成两个偏态数据

# 种子
set.seed(123)

# 生成两个偏态数据
right_skewed_data <- rchisq(1000, df=3)  # 右倾数据

在这里插入图片描述

count_data <- rpois(1000, lambda=5)  # 计数数据
hist(count_data,
     main="Original Count Data",
     xlab="Value",
     col="lightblue",
     breaks=30)

在这里插入图片描述
咱们可以看到上面两个数据都是偏态数据,下面进行数据转换

数据转换的类型
1. 对数变换

# 创建一个包含2行和2列的绘图窗口
par(mfrow=c(2,2))

# #原始数据
hist(right_skewed_data, 
     main="Original Right-Skewed Data",
     xlab="Value",
     col="lightblue",
     breaks=30)

# 自然日志转换(加1处理零)
log_data <- log1p(right_skewed_data)
hist(log_data,
     main="Natural Log Transformed",
     xlab="log(x+1)",
     col="lightgreen",
     breaks=30)

# Log10 转换
log10_data <- log10(right_skewed_data + 1)
hist(log10_data,
     main="Log10 Transformed",
     xlab="log10(x+1)",
     col="lightpink",
     breaks=30)

# QQ日志转换数据图
qqnorm(log_data)
qqline(log_data, col="red")

在这里插入图片描述
左上图是原始数据,咱们可以看到转换后分布明显不一样

2. 平方根变换

平方根变换对于计数数据和适度的右偏度特别有效:

par(mfrow=c(2,2))

# 原始数据
hist(count_data,
     main="Original Count Data",
     xlab="Value",
     col="lightblue",
     breaks=30)

# 平方根转换
sqrt_data <- sqrt(count_data)
hist(sqrt_data,
     main="Square Root Transformed",
     xlab="sqrt(x)",
     col="lightgreen",
     breaks=30)

# 比较分布
boxplot(count_data, sqrt_data,
        names=c("Original", "Square Root"),
        main="Distribution Comparison")

# QQ 图
qqnorm(sqrt_data)
qqline(sqrt_data, col="red")

在这里插入图片描述
左上图是原始数据,咱们可以看到转换后分布明显不一样,而且箱线图看出明显差异。

3. Cube Root 转换(立方根转换)

par(mfrow=c(2,2))

# 具有负值的原始数据
hist(right_skewed_data,
     main="Original Data (with negatives)",
     xlab="Value",
     col="lightblue",
     breaks=30)

# Cube root 转换
cbrt_data <- sign(right_skewed_data) * abs(right_skewed_data) ^ (1/3)
hist(cbrt_data,
     main="Cube Root Transformed",
     xlab="cbrt(x)",
     col="lightgreen",
     breaks=30)

# 显示密度分布
plot(density(right_skewed_data),
     main="Density Plot Comparison",
     xlab="Value")
lines(density(cbrt_data), col="red")
legend("topright", 
       legend=c("Original", "Cube Root"),
       col=c("black", "red"),
       lty=1)

# QQ 图
qqnorm(cbrt_data)
qqline(cbrt_data, col="red")

在这里插入图片描述
最后总结一下,上面三种方法侧重点不同,但是经过转换都能把偏态数据很好的转成正态分布

参考文献:https://www.r-bloggers.com/2024/12/how-to-transform-data-in-r-log-square-root-cube-root/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值