1.1 变量概况
(1)可以通过attributes()函数给出数据集的属性列表,其中包括变量名称($names),数据集格式($class)一级列名($row.names)三个部分,由此可以对数据集结构有一个整体的把握。
library("MASS")
attributes(Insurance)
(2)函数str()可以进一步查看数据集的内部结构,可以看到观测样本数,变量数,各变量的类型及取值情况。
str(Insurance)
(3)函数summary()可以更进一步查看变量情况,对于定性变量,会给出其频数,对于定性变量会给出最小值(Min),一分位点(1st Qu),中位数(Median),均值(Mean),三分位点(3st Qu),最大值(Max)这6个指标。若均值比中位数高很多,则表明该变量可能存在极大的异常值。
1.2 变量详情
(1)若想获得更细节的变量情况,则可以考虑使用Hmisc包中的describe()函数来获得,给出样本总个数(n),缺失样本数(missing),水平个数(unique),并列出每一个水平的取值,频数,频率。
library(Hmisc)
describe(Insurance[,1:3])
结果分析:District变量共有64条取值,无缺失值,且含有4个水平,分别为1,2,3,4,各水平的频数都是16,频率为25%。
(2)服务于金融的软件包,其中包含一些基础的统计、参数估计、假设检验等相关函数,basicStata()是一个用于计算时间序列数据基础统计指标的函数,也可以用于一般数据集。
以Holders变量为例,输出的指标包括观测样本数(nobs)、缺失值(NAs)、最大值、最值、1分位数、3分位数、均值、中位数、和、标准误差均值(SE Mean)、95%的置信水平下均值的置信下限(LCL Mean)/置信上限(UCL Mean)、方差(Variance)、标准误差(Stdev)、两个分布指标----偏度(Skewnes)、峰度(Kurtosis)。
library(fBasics)
basicStats(Insurance$Holders)
结果分析:数据集共23359位,约2.3玩=万投保人信息,且在具体的区域District、发动机排量Group、年龄段Age情况下,平均有365位投保人,对于该变量均值的真实值位于区间[209,521](置信下/上限)中,有95%的可信度。
1.2.1 分布指标
分布指标的偏度和峰值也可以使用timeDate软件包中的skewness()、kurtosis()两个函数分别计算得到,也是一个服务于金融工程领域的软件包。
偏度是用于衡量数据的偏倚程度,也就是数据的对称程度,若以一个正太分布为基准的指标,即正太分布为完全对称分布,其偏度为0;当该指标取值在[-1,1]区间,则说明数据分布的对称性较强,即不存在明显的左偏或者右偏情况;当该指标绝对值大于1,即超出该区间,则认为数据存在显著偏倚。且为正值时表示该数据的总体取值大于均值,即有右偏的趋势。反之,负值表示左偏趋势。峰度经常与偏度共同使用,用于衡量数据分布形态的陡缓程度,也可以说时集中与分散程度,若以一个正太分布为基准的指标,当其值为0,说明其集散程度与正太分布相同,又称为标准峰度,当峰度大于0则表示该数据分布与正太分布相比较为陡峭,为尖顶峰度,当峰度小于0表示其与正太分布相比较为平坦,为平顶峰度。峰度的绝对值数值越大表示其分布形态的陡缓程度与正太分布的差异程度越大。
library(timeDate)
skewness(Insurance[,4:5])
kurtosis(Insurance[,4:5])
1.2.2稀疏性
数据的稀疏性时对高维数据而言,我们使用Matrix软件包进行研究,现在尝试使用Matrix这种的sparseMatirx()函数生成稀疏数据集
library(Matrix) #加载包
i=sample(1:10,10,replace = F) #从1到10中无放回的抽取10个数
j=sample(1:10,10,replace = F) #从1到10中无放回的抽取10个数
(A=sparseMatrix(i,j,x=1)) #对第i行j列的元素取值为1,其他元素为空
local<-which(A==1,arr.ind = T) #取local变量记录非空元素位置
plot(local,pch=22) #对如上local变量值绘制散点图,模拟稀疏矩阵散点图
1.2.3 缺失值
数据中的缺失值很常见,我们可以使用mice软件包中的md.pattern()函数来获取其中的缺失值分布情况,软件包mice专注与多重查补技术(Multiple Imputation),即对缺失值等数据不足情况的处理技术。
在上述describe()的输出结果中,我们知道数据集Insurance中各变量不含有缺失值,因此在64*5个取值中,随机选出10个,将其转变为缺失值NA,再使用md.pattern()函数来获取这10个缺失值的分布情况。
library("mice")
for(i in 1:10){
row=sample(1:64,1) #在1到64中随机选出一个数,作为第i个缺失值所在行的序号
col=sample(1:5,1) #在1到5中随机选出一个数,作为第i个缺失值所在列的序号
Insurance[row,col]=NA #将Insurance数据集的第row行,第col列设置为缺失值NA
}
md.pattern(Insurance) #显示数据集中缺失值的分布情况
结果分许:由图可知,第54行有0个缺失值,第5行有1个变量的缺失值,且缺失值变量为District,其他依次类推,表中输出结果的最后一行统计出了各变量有缺失值的样本个数,其和为缺失值个数10。
1.2.4 相关性
使用函数cor()来衡量变量之间的相关性,其取值在-1到1之间,其绝对值大小表示两变量相关性的大小,越接近1相关性越大,其符号的正负表示两个变量之间时正向还是负向关系。
一般来说,当相关系数的绝对值高于0.75,我们就认为相关度比较高,具体需要根据其他变量间的先惯性高低来判断所考察变量间的相关程度。
使用rattle软件包汇包中的weather数据集来说明:
library(rattle)
data("weather")
head(weather[,12:21]) #以第12到21列这10各连续变量
var<-c(12:21) #设置12到21列标量的列号向量var
cor_matrix<-cor(weather[var],use="pairwise") #对10个变量两两计算相关系数
cor_matrix
使用Ellipse软件包中的plotcorr()函数来绘制相关图:
install.packages("ellipse")
library(ellipse)
library("ellipse")
plotcorr(cor_matrix,col=rep(c("white","black"),5)) #对相关系数矩阵绘制相关图
结果分析:圆形的宽窄表示相关性的高低,两个变量对应的圆形越窄,表明其相关性越高,做对角线10个圆形已经窄成10条线段,因为它们自己的相关度为1,为完全相关,圆形倾斜的方向表示相关性的正负,向右倾斜表示正相关,向左倾斜表示负相关。
上图相关系数矩阵是对称的,可以添加type参数选择仅输出上半部分或者下半部分:
plotcorr(cor_matrix,diag=T,type="lower",col=rep(c("white","black"),5))