统计学第二课:描述数据的统计量
我们拿到一组数据后,想要读懂必须先找到数据的特征,描述数据的特征可以从三方面进行:水平、差异、分布的形状。在统计学中有专门的统计量用来诠释这三个方面的特征。
一、描述水平的统计量
主要有:平均数、分位数、众数。
平均数
一般我们很难获知总体的数值,所以我们会从总体中抽样,算出样本平均值,此时的平均值我们叫做“x拔”,写成x上加一个横线,总体数据平均值我们叫做“miu”,写成μ。
我们经常用到的平均数有算数平均数和加权平均数。
data<-c(4,5,6,8,11,3,7)
# 计算算数平均数
mean(data)
mean(iris$Sepal.Length)
# 计算加权平均数,x代表组中值,w代表组频数(权数)
# 计算时数据本身要先分组才可以
weighted.mean(x,w)
分位数
一组数据从小到大排序,找到某个位置的数据可以代表数据水平的高低,这就是分位数。常用的是中位数也就是50%分位数。
四分位数指的是一组数据排序后处在25%、75%位置上的数值。
百分位数在上述基础上,将数据等分成100份。
# 直接计算中位数
median(iris$Sepal.Length)
#使用quantile函数计算25%、50%、75%分位数,默认算法是6
quantile(iris$Sepal.Length,probs = c(0.25,0.5,0.75),type=6)
众数
顾名思义,在一组数据中出现的次数最多的数值就是众数。如果数据分布没有明显的峰值,众数则不存在,如果数据有两个或者多个峰值,则众数也会有两个或多个。
在R语言中没有专门的众数函数,需要自己编写函数。 或者使用mode函数,但貌似只能取一个出现最多的数或者字符
总结:当数据分布接近对称时,建议使用平均数作为衡量水平的统计量;如果数据有明显的偏斜时,建议使用分位数、众数作为衡量水平的统计量。
二、描述差异的统计量
所谓的差异指的是,一组数据中的离散程度。数据越离散,水平统计量代对数据的代表性就越差。差异统计量主要有:极差、四分位差、方差、标准差、测量相对离散程度的变异系数。
极差和四分位差
极差就是一组数据中最大值与最小值的差值(也叫全距)。极差一般用作分析数据离散程度的一个参考值,不会单独使用的。
四分位差也叫做四分位距。一组数据的75%位置数值与25%位置数值的差值,用IQR表示。四分位差说明了,中间50%的数值的离散程度,差值越小,数据越集中。
# 用一组数据的最大值减去最小值直接计算极差
max(iris$Sepal.Length)-min(iris$Sepal.Length)
# 计算四分位差
IQR(iris$Sepal.Length,type = 6)
方差和标准差
由于平均数代表一组数据的水平,那么将每个数据与平均数做差值比较,可以用此衡量一组数据的离散程度,这个结果比极差、四分位差更加精准,叫做离差。通过计算所有数据与平均数之差的和为0。所以要将这个差值转为绝对值后,求和后再平均,这就是绝对离差。
还有一种方法是将离差平方后求平均数,这就是方差。方差开方后,所得的结果为标准差。
标准差是指的一组数据与他的平均数相比,平均相差了多少,这是用的最广泛的一个描述差异的统计量。
标准差是反应数据离散程度的绝对值,所以受到原始数据大小的影响,数据观测值大,标准差也会大。由于很多样本之间的计量单位不同,大小也不一样,所以需要计算变异系数。变异系数也成为离散系数,指的是一组数据的标准差与其平均值相比S÷x拔。因为这种做法消除了数值大小和计量单位的影响,所以也可以反应一组数据的相对离散程度,所以变异系数用作不同样本之间的离散程度比较,值越大,证明相对离散程度越大。
# 计算方差
v <- var(iris$Sepal.Length)
#计算标准差
s <- sd(iris$Sepal.Length)
# 计算变异系数
cv <- s/mean(iris$Sepal.Length)
标准分数
也成为标准化值。可以度量每个数值在这组数据的相对位置,判断一组数据里是否有离群点。换句话说,它描述了数据距离平均值有几个标准差。
通常我们将3个标准差之外的数据作为离群点。99%的数据在±3个SD之内,95%的数据在±2个SD之内,68%的数据在±1个SD之内。
# 计算标准化分数(距离平均值几个标准差)
# scale函数可以计算标准分数
# as.vector将某一个数据结果以向量的形式输出
# round函数是将某个结果的数值,保留几位小数
as.vector(round(scale(iris$Sepal.Length),4))
三、描述分布形状的统计量
直方图可以看出来数据的分布是否是对称的。有些统计量可以描述不对称的分布的数据。主要有:偏度系数、峰度系数。
偏度
偏度说的是数据不对称,偏度系数是一种描述数据有多么不对称的统计量。当数据对称分布时,偏度系数接近0,若大于或者小于1,证明严重偏斜分布。一般认为,0.5~±1属于中等偏斜分布,小于±0.5属于轻微偏斜分布,负代表左偏,正代表右偏。
峰度
峰度说的是数据分布波浪中峰度的高低,测度分布峰值的统计量就是峰度系数,记作K。峰度一般与标准正态分布相比较而言,标准正态分布的峰度系数K>0,为尖峰分布,数据的峰值比标准正态分布高,那么数据更集中;如果K<0,形状更扁平,数据相对分散。
install.packages("agricolae")
library(agricolae)
# 计算偏度系数
skewness(chickwts$weight)
# 计算峰度系数
kurtosis(hickwts$weight)
四、综合描述数据
注意,如果你使用Mac电脑时发现中文乱码问题,可以尝试写入下方代码:
Sys.setlocale(category="LC_ALL",locale="en_US.UTF-8")
首选选取一个一个CSV文件,确保文件读取没有问题:
install.packages("readr","fansi","stringi")
library(readr)
# 判断编码类型
readr::guess_encoding("文件路径.csv")
# 按照编码类型读取文件
readr::read_csv("文件路径.csv",locale = locale(encoding = "UTF-8"))
① describe函数进行数据综合描述
# 使用包pastecs的stat.desc函数,对数据进行综合描述
install.packages("pastecs")
library(pastecs)
read.csv("文件路径.csv",header = TRUE,encoding = "UTF-8")
round(stat.desc(example3_9),4) #保留4位小数
② stat.desc函数进行数据综合描述
install.packages("psych")
library(psych)
example<-read_csv("文件路径.csv")
describe(example)
③ summary函数进行数据综合描述
example<-read_csv("文件路径.csv")
summary(example)
④ 以绘图的方式将统计量表达出来
# 通过上文的方法加载数据并赋值给对象
example2<-read_csv("文件路径.csv")
# attach(example2)
# 确认图形绘制位置、图形绘制的默认字体
par(fig=c(0,0.8,0,0.8),family='STKaiti')
# hist函数可以绘制直方图(选取一个用户绘制图形的向量数据,xlab横坐标名字,ylab纵坐标名字,pro为T代表频率为F代表频数,col代表颜色,main代表主要标题)
hist(example2$月生活费支出,xlab = "月生活费支出",ylab = "频率",prob=T,col = "lightblue",main = "")
# jitter给向量数据加噪声,rug向每个数据点添加一个小的随机值
rug(jitter(example2$月生活费支出))
# lines函数t通过各种方式绘制成线条
# density进行核密度估计,给定要估计的向量参数即可(用于估计随机变量概率密度函数的一种非参数方法);
# 如果只想画一条核密度曲线,可以使用plot(density(x))
lines(density(example2$月生活费支出),col="red")
# 再次确认一个位置坐标,并且位置作用在另一个新的图上,且不会覆盖原来的图
par(fig=c(0,0.8,0.35,1),new=TRUE)
# boxplot函数可以绘制箱线图,给定要绘制的向量数据
# horizontal参数true为水平,false非垂直,axes代表是否展示坐标轴,true代表展示
boxplot(example2$月生活费支出,horizontal = TRUE,axes=FALSE)
绘制的效果如下图:
![](https://img.haomeiwen.com/i3947230/06f3836acce6790c.png)
【扩展】par函数的fig如何理解:
fig=c(x1,x2,y1.y2)。可以确认绘制图形所在的区域位置。看下图一目了然:
![](https://img.haomeiwen.com/i3947230/f364d289806e6b23.png)