当前位置: 首页 > news >正文

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/

相关文章:

  • MFC添加免费版大漠3.1233
  • AI编程工具哪家强?对比Cusor、Copilot、Cline
  • 中医病因辨证
  • Unity Shader 学习18:Shader书写基本功整理
  • 一款超级好用且开源免费的数据可视化工具——Superset
  • Postman下载安装使用指南
  • Vue 3 + Composition API + Vite + Pinia + Element Plus 构建项目的完整指南
  • vue复习1~45
  • 数据安全与网络安全——问答复习
  • STL入门
  • SpringBoot3+Vue3开发公司库房管理系统
  • Cursor异常问题全解析-无限使用
  • 【ComfyUI】相似画绘制工作流教程
  • Ubuntu22云服务器添加2G Swap分区
  • C++中获取文件名的后缀
  • 深入探索 Python 中的 asyncio:异步编程的利器
  • es 3期 第27节-运用Script脚本实现复杂需求
  • 5500字,从零开始入门OpenCV的超基础操作~
  • Vue实现动态数据透视表(交叉表)
  • GCP(Google Cloud-native stack)的云原生技术栈介绍
  • 昆明做网站外包/佛山seo培训机构
  • 行业网站模版/seo网站搜索优化
  • wordpress swf插件/九江seo
  • 网站的基本设置/免费行情网站的推荐理由
  • 谷歌网站统计/查询网站
  • 成都服务器租赁/seo建站教学