数据分析领域初期需要特别注意,目前大多数的数据分析软件都要求数据的存储形式为"宽格式",即每一列都应当是一个变量,而每一行则代表一个单独的观测值。且需要“长格式”数据的时候,可以通过宽格式数据轻易进行转换;存储格式,推荐使用.text或.csv
另外,任何形式的数据检验(异常值识别[缺失/错误值],正态性检验,方差齐性检验,共线性问题)都具有一定的局限性,大多数情况下,最行之有效的方式便是使用图形工具。
注:本文部分内容参考自公众号"生态文献分享 石亚飞"
1.异常/错误/缺失值识别(箱线图/Cleveland点阵图/散点图矩阵)
1.1 异常描述与R实战
【缺失值识别】对于缺失值,其实很容易识别到,当数据量不多的时候,可以使用Excel的筛选或排序功能[注意一定要先定义表,然后再筛选排序,以免产生错序情况;tips:建议使用NA()代替,不建议直接删除];当数据量较多的时候,可以使用R中内置函数进行识别,详细代码见下(此外,缺失值的处理也是一个很头疼的问题,这里推荐使用R语言中的mice包进行缺失值插补,这里仅展示了利用mice包可视化缺失值)
【图例】
#载入相关R包
library(mice)
library(VIM)
#定义数据集
data <- data.frame(
Pitcher_height = c(744, 700, 714, 667, 600, 777, 640, 440, 715, 573, 1500, 650, 480, 545, 845, 560, 450, 600, 607, 675, NA, NA, 5.1, 534, 655, 65.5),
Mouth_diameter = c(34.3, 34.4, 28.9, 32.4, 29.1, 33.4, 34.5, 29.4, 39.5, 33.0, 33.8, 36.3, 27.0, 30.3, 37.3, 42.1, 31.2, 34.6, 33.5, 31.4, NA, NA, 0.3, 30.2, 35.8, 3.52),
Tube_diameter = c(18.6, 20.9, 19.7, 19.5, 17.5, 21.1, 18.6, 18.4, 19.7, 15.8, 19.1, 20.2, 18.1, 17.3, 19.3, 14.6, 20.6, 17.1, 14.8, 16.3, NA, NA, 0.1, 16.5, 15.7, 1.77)
)
#缺失值识别
md.pattern(data)
aggr_plot <- aggr(data,
col=c('navyblue','red'),
numbers=TRUE,
sortVars=TRUE,
labels=names(data),
cex.axis=.7,
gap=3,
ylab=c("Histogram of missing data","Pattern"))
【异常/错误值识别】错误值通常是以异常值的形式出现,但是异常值不一定是错误值。一般情况下,如果某些数据超过了整体数据值分布的上10%分位数和下95%分位数,即可以认为这些数据是潜在的异常值,而如果数据超过了上5%分位数和下95%分位数,则可以认为数据大概率是异常值。首先可以使用"箱线图/茎叶图"快速识别异常值,并进一步通过两两变量之间的"散点图矩阵"对错误值进行识别。
#异常值识别
df1 <- data.frame(
id = rep(1:3, each = 4),
variable1 = rnorm(12),
variable2 = rnorm(12),
variable3 = rnorm(12)
)
stem(df[,2],scale = 2) #绘制第2列变量的茎叶图,茎部分显示2位数
# 使用 pivot_longer() 函数转换为长格式
library(tidyr)
long_df <- pivot_longer(df1, cols = -id, names_to = "variable", values_to = "value")#在这里,cols = -id 表示除了 id 列之外的所有列都应该被转换,names_to 是新列的名称,用于存储变量名,values_to 是新列的名称,用于存储变量值
# 绘制横向箱线图
ggplot(long_df, aes(y = value, x = variable)) +
geom_boxplot() +
labs(y = "Value", x = "Variable", title = "Horizontal Boxplot") +
theme_minimal()
#---环境建设---#
rm(list = ls());#清空变量空间
library(datasets)
library(export)
#---数据读入---#
dataname <- "iris"
rawdata <- datasets::iris
#散点图矩阵——Iris(GGally_ggpairs)
library(GGally)
ggpairs(rawdata, columns=1:5, aes(color=Species)) +
ggtitle("散点图矩阵——Iris(GGally_ggpairs)")+
theme_bw()
graph2png(file = paste("散点图矩阵(GGally_ggpairs) of", dataname))
2.正态性(直方图,QQ图)
2.1通过直方图与正态性检验了解数据的分布特征
计量数据的直方图,在SPSS中有多种方法可以获得,比如在图2-1-3中,点击Frequencies对话框中的【Charts】按钮,就可以选择输出直方图:
也可以在进行正态性检验时,一并输出直方图,操作如下:
点击菜单:Analyze => Descriptive Statistics => Explore
设置变量及分组因素(本例中为sex,将分别输出男性与女性的正态性检验结果),点击【Plots】按钮,在Expore: Plots对话框中,勾选直方图和正态性检验两个选项(如上图),点击【Continue】=>【OK】,就能输出结果,因为Expore的默认选项我们没有去除,所以输出的结果中内容非常多,截取我们需要的信息如下:
(1)正态性检验的结果
SPSS中提供了两种正态性检验的方法:
KS(Kolmogorov-Smirnov)检验和W检验(Shapiro-Wilk),一般认为样本量的范围在4~2000时,W检验的检验效能较高,而样本量超过2000时应采用KS检验结果。
本例中总样本量为199,因此选择W检验的结果:
对于Female,P = 0.043 < 0.05,因此拒绝原假设,认为女性的BMI不服从正态分布;同理,认为男性的BMI也不服从正态分布。
(2)正态Q-Q图(Quantile-Quantile Plot)
正态Q-Q图是直观地检查数据是否服从正态分布的方法,如下图:
如果数据呈正态分布,则Q-Q图中的点应位于对角线上。相反,图中的点与对角线的偏差越大,说明数据服从正态分布的可能性就越小。
当然,Q-Q图的方法是一种直观的目视法,通过正态Q-Q图判断数据是否服从正态分布有些主观,但是可以结合正态性检验的结果,对数据的正态性做一个综合判断。
通过正态性检验与正态Q-Q图,我们可以判断:无论哪种性别,BMI都是不服从正态分布的。事实上,从下面的直方图可以看出,男性和女性的BMI都有一点右偏,但是右偏并不严重,所以我们看到的Q-Q图中,大多数的点都在直线上或附近,只有少数离群值(与其它值相比,异常小或异常大的值)脱离对角线较远。
(3)直方图
本例输出的直方图:
直方图是观察数据分布最直观的方法,上图显示出BMI的分布:女性的BMI对称性稍差,男性的因为右侧的离群值因而显得比女性的更右偏一些。
(4)根据数据的分布特征,选择适当的描述性统计量
本例中BMI呈右偏态分布,宜选择中位数来描述其集中趋势,选择Q1和Q3来描述其离散趋势;相反的,如果数据服从正态分布,就可以选择算术均数(
标签:实战,数据,检验,SPSS,直方图,笔记,正态性,正态分布,library From: https://www.cnblogs.com/juezhe/p/18390357