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

【R语言】数据分析

一、描述性统计量

借助R语言内置的airquality数据集进行简单地演示:

1、集中趋势:均值和中位数

head(airquality)
# 求集中趋势
mean(airquality$Ozone, na.rm=T) # 求均值
median(airquality$Ozone, na.rm=T) # 求中位数

2、众数

众数(mode)是指在一组数据中出现频率最高的值。尽管R语言本身没有直接提供计算众数的内置函数,但可以使用其他函数和方法来计算众数。

# 假设Temp是离散数据
which.max(table(airquality$Temp))
# 假设Temp是连续数据:density$x[which.max(density$y)]
Density <- density(airquality$Temp) 
Density

3、离散趋势

# 先求极差:最大值-最小值
max(airquality$Ozone, na.rm=T) - min(airquality$Ozone, na.rm=T)
# 选取Ozone中所有非空元素组成的子集
Ozone.rm.na <- with(airquality, Ozone[is.na(Ozone)==F])
# 求平均差
sum(abs(Ozone.rm.na - mean(Ozone.rm.na))) / length(Ozone.rm.na)
# 求标准差
sd(airquality$Ozone, na.rm=T)
# 求方差
var(airquality$Ozone, na.rm=TRUE)
# 求变异系数
with(airquality, sd(Ozone, na.rm=T) / mean(Ozone, na.rm=T) * 100)

 4、峰度和偏度

需要先安装moments扩展包。

library(moments)
kurtosis(airquality$Ozone, na.rm=T) # 峰度
skewness(airquality$Ozone, na.rm=T) # 偏度

5、百分位数

quantile(airquality$Ozone, probs=seq(0,1,by=0.1), na.rm=TRUE)

6、Turkey五数

最小值、25百分位数、中位数、75百分位数、最大值

fivenum(airquality$Ozone, na.rm=TRUE)

7、数量

length(airquality$Month)
table(airquality$Month)

8、算数截断平均数

mean()函数中有一个参数trim,当指定trim时(0~0.5的数),表示先在数据两端各自截断相应比例的最大值和最小值,再计算平均数,此平均数就叫算数截断平均数,它更能有效地代表数据的集中趋势。

mean(airquality$Ozone, na.rm=T, trim=0.2)

二、列联表

table()函数

使用table()函数创建列联表时,只需要将相应的变量作为参数写进函数中即可。

当列联表多于二维度时,可以使用ftable()函数,使其呈现得更紧凑。

如下以vcd扩展包中的Arthritis数据集进行演示:

二维度列联表

library(vcd)
head(Arthritis)
# 二维度列联表
table.2D <- table(Arthritis$Treatment, Arthritis$Sex)
table.2D

三维度列联表

# 三维度列联表
table.3D <-  table(Arthritis$Treatment, Arthritis$Sex, Arthritis$Improved)
table.3D

ftable()函数

更紧凑的呈现方式

ftable(table.3D)

xtabs()函数

也可以使用xtabs()函数创建列联表。此函数的特点是以公式而非变量的形式传递进函数中。

二维度列联表

xtabs(~ Treatment + Sex, data=Arthritis)

三维度列联表

xtabs(~ Treatment + Sex + Improved, data=Arthritis)

prop.table()函数

上述的table()函数和xtabs()函数得到的是频数表,可以使用prop.table()函数得到频率表,此函数通过margins参数指定频率分母的维度,默认将所有数值相加作为分母。

# 默认将所有数值相加作为分母
prop.table(table.2D)
# 按行计算频率
prop.table(table.2D, margin=1)
# 按列计算频率
prop.table(table.2D, margin=2)

addmargins()函数

此函数可以在列联表中加入边际边,默认边际边求和,也可以通过FUN参数指定其它计算。

边际边是边际频数(marginal frequencies)的简称,它指的是列联表中行总和与列总和。

vcd扩展包中的mar_table()函数也可以同时加入按行或列求和的边际边。

按行和列求和

# 按行求和
addmargins(table.2D, margin=1)
# 按列求和
addmargins(table.2D, margin=2)

同时求行和列的和

# 分别按行和列求和
addmargins(table.2D, margin=1:2)

mar_table(table.2D)

按列求平均

addmargins(table.2D, margin=2, FUN=mean)

margin.table()函数

margin.table(table.2D, margin=1)
margin.table(table.2D, margin=2)

三、同时输出多个统计量

ggplot2包中的diamonds数据集做演示:

此数据集总共只有10列数据。

library(ggplot2)
head(diamonds)

1、summary()函数

此函数R语言内置的统计量集合函数。当数据为数值时,它输出最小值、第1四分位数、中位数、平均数、第3四分位数和最大值;当数据为因子或类别时,它输出各个水平或类别的数量。

summary(diamonds)

 2、describe()函数

psych扩展包的describe()函数输出的结果更丰富,包括数据量、均值、标准差、中位数、截断均值(默认截断比例为0.1),中位数绝对离差、最小值、最大值、全距、偏度、峰度和标准误差。

library(psych)
describe(diamonds)

3、stat.desc()函数

pastecs扩展包中的stat.desc()函数可以通过设置不同的参数来调整输出的统计量。

basic=TRUE(默认):计算观测值、空值和缺失值的数量,计算最大值、最小值、值域以及求和;

desc=TRUE:计算中位数、平均数、均值标准误差、95%的置信区间、方差、标准差以及变异系数;

norm=TRUE:计算正态分布的统计量,如峰度、偏度、显著程度。

library(pastecs)
options(digits=3) # 保留3位小数
stat.desc(diamonds, basic=FALSE, desc=FALSE)

 


http://www.kler.cn/a/538613.html

相关文章:

  • Docker Desktop安装到其他盘
  • 利用UNIAPP实现短视频上下滑动播放功能
  • 28.<Spring博客系统⑤(部署的整个过程(CentOS))>
  • Kafka 入门与实战
  • CNN-day5-经典神经网络LeNets5
  • 将Deepseek接入pycharm 进行AI编程
  • fatal:Authentication failed for “http....
  • 现在中国三大运营商各自使用的哪些band频段
  • 【Pycharm+Git+Gitlab】安装部署(粗糙版)
  • 电脑黑屏按什么键恢复?电脑黑屏的解决办法
  • [Redis] Redis分布式锁与常见面试题
  • Nginx中替换即将到期的SSL/TLS证书
  • 【开发电商系统的技术选型】
  • ArgoCD实战指南:GitOps驱动下的Kubernetes自动化部署与Helm/Kustomize集成
  • 【ArcGIS】R语言空间分析、模拟预测与可视化技术
  • 问卷数据分析|SPSS之数据导入及变量设置
  • 在AWS上设计与实现个人财务助理的Web应用程序
  • Gradle 发布Jar到 Maven Central
  • [oeasy]python064_命令行工作流的总结_vim_shell_python
  • 腾讯混元3D创作引擎:一站式AI 3D创作平台的深度解析
  • 工业网关:开启制造工程高效生产新时代
  • XMLHttpRequest的基础使用
  • Linux中,使用C++获取网络摄像头视频流的方式【附带源码示例】
  • 配置 VS Code 调试 ROS Python 脚本:完整步骤
  • 保研考研机试攻略:python笔记(4)
  • 设计模式-生产者消费者模型