欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > R语言对偏态换数据进行转换(对数、平方根、立方根)

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

2025/3/31 17:40:53 来源:https://blog.csdn.net/dege857/article/details/146549065  浏览:    关键词: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/

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词