探索性数据分析(Exploratory Data Analysis,EDA):是通过分析数据集以决定选择哪种方法适合统计推断的过程。
4.1 主要分析工具
主要的图形表示方法有(括号中为R语言绘图函数):
(1)条图(barplot):用于分类数据;
(2)直方图(hist)、点图(dotchart)、茎叶图(stem):用于观察数值型分布的形状;
(3)箱线图(boxplot):给出数值型分布的汇总数据,适用于不同分布的比较和拖尾、截尾分布的识别;
(4)正态概率图(qqnorm):用于观察数据是否近似地服从正态分布;
例4-1:
从某大学统计系的学生中随机抽取24人,对数学和统计学的考试成绩进行调查,结果如下,试对这些学生的数学成绩和统计成绩进行探索性分析。
//将文件存放在一个txt文档中
> MS=read.table("C:\\Users\\lenovo\\Desktop\\mathstat.txt",header=T)
> MS
math stat
1 81 72
2 90 90
3 91 96
4 73 78
5 88 89
6 78 82
7 95 96
8 63 75
9 85 86
10 60 71
11 83 78
12 81 94
13 77 73
14 60 66
15 66 58
16 84 87
17 80 86
18 85 84
19 70 82
20 54 56
21 93 98
22 68 76
> stem(MS$stat)
The decimal point is 1 digit(s) to the right of the |
5 | 68
6 | 6
7 | 1235688
8 | 2246679
9 | 04668
> stem(MS$math)
The decimal point is 1 digit(s) to the right of the |
5 | 4
6 | 00368
7 | 0378
8 | 01134558
9 | 0135
> EDA<-function(x)
+ {
+ par(mfrow=c(2,2))#图窗口为2行2列格式
+ hist(x); # 直方图
+ dotchart(x); # 点图
+ boxplot(x,horizontal=T); # 箱式图
+ qqnorm(x);qqline(x)
+ par(mfrow=c(1,1))
+ }
> EDA(MS$math)
> EDA(MS$stat)
>
当数据成偏态分布时,可使用稳健方法去分析,如使用中位数或进行数据变换
4.2 单变量数据分析
4.2.1 分类型数据
取值范围是有限个值或是一个数列构成的变量称为 离散变量,若表示分类情况的离散变量又称为分类变量
对于分类数据,我们可以用频数表来分析,也可以用条形图和饼图来表示
1 分类频数表(table)
频数表可以描述一个分类变量的数值分布概况,R中的table命令可以生成频数表。若X是分类数据,只要用table(X)就可以生成分类频数表
例:
> x=c("是","否","是","否","是","否","是")
> table(x)
x
否 是
3 4
>
2 条图(Barplot)
R画条图的命令是barplot(),对分类数据作条图,需先对原始数据进行分组,否则作出来的不是分类数据的条形图
例:
> drink=c(3, 4,1,1,3,4,3,3,1,3,2,1,2,1,2,3,2,3,1,1,1,1,4,3,1)
> barplot(drink)#没有对Y轴数据进行分组的条图
> barplot(table(drink)) #对Y轴数据进行分组的条图
> barplot(table(drink)/length(drink)) #将y轴修改为频率
> barplot(table(drink),col=c("red","yellow","blue","green")) #给条图填充不同的颜色
3 饼图(Pie Graph)
对于分类数据还可以用饼图来描述,饼图用于表示各类别某种牲的构成比情况
> drink=c(3, 4,1,1,3,4,3,3,1,3,2,1,2,1,2,3,2,3,1,1,1,1,4,3,1)
> drink.count=table(drink)
> pie(drink.count)
> names(drink.count)=c("红酒","白酒","黄酒","啤酒") #把各标记改成文字
> pie(drink.count)
> pie(drink.count,col=c("purple","green","cyan","white")) #修改各扇区的颜色
4.2.2 数值型数据
1 集中趋势和离散程度
对于数值型数据,经常要分析一个分布的集中趋势和离散程度,用来描述集中趋势的主要有均值(mean())、中位数(median())
描述离散程度的主要有方差(var())、标准差(sd())
fivenum( )对数值数据五等分法(运算)
summary()示出分位数
例:
> salary = c(2000,2100,2200,2300,2350,2450,2500 ,2700,2900,2850,
+ 3500,3800,2600,3000,3300,3200,4000,3100,4200)
> mean(salary) #求均值
[1] 2897.368
> median(salary)#求中位数
[1] 2850
> var(salary) #求方差
[1] 414853.8
> sd(salary) #求标准差
[1] 644.0915
> fivenum(salary) #对数值数据五等分分法(运算)
[1] 2000 2400 2850 3250 4200
> summary(salary) #求分位数
Min. 1st Qu. Median Mean 3rd Qu. Max.
2000 2400 2850 2897 3250 4200
2 稳健的集中趋势和离散程度
利用均值和方差描述集中趋势和离散程度往往基于正态分布,而若数据是长尾或是有异常值时,这时用均值和方差就不能正确地描述集中趋势和离散程度。
而此时用中位数来描述集中趋势则是稳健的,不易受异常值影响。
可对mean函数里对trim参数进行设置
例:
> salarym=c(salary,15000)
> mean(salarym)
[1] 3502.5
> median(salarym)
[1] 2875
> mean(salarym,trim=0.2) #用R计算截尾均值 即去两头20%后的均值
[1] 2870.833
> mean(salarym,0.5) #去两头50%后的均值,trim可以省略,实际上就是中位数
[1] 2875
> IQR(salarym) #四分位间距
[1] 925
> mad(salarym) #平均差
[1] 704.235
3 茎叶图(Stem-and-Leaf Graph)
由于绘制直方图时需要先对数据进行分组汇总,故对样本量较小的情形,直方图会损失一部分信息,此时可以使用茎叶图来进行更精确的描述。
4 对数值数据分组
统计分析中经常要碰到 对数值数据进行分组,在R里可以用cut函数对数值数据进行分组
例:
我们需要对工资按2 000~3 000,3 000~4 000,4 000以上进行分组,并用table()函数整理成频数表形式:
> salaryg=cut(salary,breaks=c(2000,3000,4000,max(salary)))
> table(salaryg)
salaryg
(2e+03,3e+03] (3e+03,4e+03] (4e+03,4.2e+03]
11 6 1
5 直方图(Histogram)
直方图用于表示(描述)连续性变量的频数分布,实际应用中常用于考察变量的分布是否服从某种分布类型,如正态分布
用R来作直方图的函数是hist()
图形以矩阵的面积表示各组段的频数(或频率),各矩阵的面积总和为总频数(或等于1)
作频率直方图时,只要把 probability参数设置为T可以了,默认为F
R中还可以用rug()命令把各个数据竖线描绘在X轴上
6 箱线图(Boxplot Graph)
箱线图和直方图一样用于考察连续变量的分布情况,但直方图侧重于一个连续变量的分布情况进行详细考察,而箱线图更注重于勾勒出统计的主要信息,并便于对多个连续变量同时考察,或对一个变量分组进行考察,在使用上要比直方图更为灵活,用途更为广泛。
函数为:boxplot() 可设置垂直和水平型,默认为垂直型,要得到水平型箱线图,只要把参数horizontal设为T就可以了
> boxplot(salary)
> boxplot(salary,horizontal=T)
> boxplot(salary,horizontal=F)
7 密度函数线(Densities)
把直方图各个中点连接起来就是密度函数线
函数为:density()
> hist(faithful$eruptions,prob=T,breaks=25)
> lines(density(faithful$eruptions),col='red')
4.3 双变量数据分析
4.3.1 分类数据对分类数据
1 二维表
table()可以把双变量分类数据整理成二维表形式,table命令处理双变量数据类似于处理单变量数据,只是参数由原来的不念旧恶变成了两个。
边缘概率函数:
prop.table( )
其句法是:prop.table(x,margin) 当margin=1时,表示各个数据占行汇总数的比例,margin=2表示各个数据占列汇总数的比例,省略时,表示占总和的比例。
> smoke=c("Y","N","N","Y","N","Y","Y","Y","N","Y")
> study=c("<5h","5-10h","5-10h",">10h",">10h","<5h","5-10h","<5h
+ ", ">10h","5-10h")
> table(smoke,study)
study
smoke <5h <5h\n >10h 5-10h
N 0 0 2 2
Y 2 1 1 2
> tab=table(smoke,study)
> prop.table(tab,1)
study
smoke <5h <5h\n >10h 5-10h
N 0.0000000 0.0000000 0.5000000 0.5000000
Y 0.3333333 0.1666667 0.1666667 0.3333333
2 复杂(复式)条图
条图用等宽直条的长短来表示相互独立的各指标数值大小,该指标可以是连续性变量的某汇总指标,也可以是分类变量的频数或构成比。
R作条形图的函数是:barpolt() 在作条图前需对数据进行分组
main 参数用来为图像添加标题;
sub添加副标题;
beside参数设置为False时,作出的图是分段式条形图,True时作出的条形图是并式,R默认的是False;
legend.text作为图添加的图例来说明;
4.3.2 分类数据地数值型数据
例:
药物临床试验,有实验组和对照组两组数据。
实验组:5 5 5 13 7 11 11 9 8 9
对照组:11 8 4 5 9 5 10 5 4 10
可以用箱线图粗略比较这两组数据之间的关系,对于这种双变量数据作箱线图类似于单变量数据。
> x=c(5,5,13,7,11,11,9,8,9)
> y=c(11,8,4,5,9,5,10,5,4,10)
> boxplot(x,y)
4.3.3 数值型数据对数值型数据
1 散点图
plot()函数
2 相关系数
相关系数是用来反映两个数值变量的相关程度
Person相关系数用来反映两个变量的线性相关关系。
总体相关系数的定义式是:
样本相关系数的定义公式是:
spearman等级相关系数:
其中di=(xi-yi),xi和yi分别是两个变量按大小排位的等级,n是样本的容量,spearman
R 语言中求相关系数的函数是:cor()
spearman等级相关系数(秩相关系数) spearman相关是一种秩相关,可先对数据求秩,然后计算它们的pearson相关
R里的rank()函数提供了求秩功能
4.4 多变量数据分析
4.4.1 访问数据框数据
R使用数据框(data frame)形式储存多变量数据
1 数据框绑定“attach”
attach()函数将数据框“连接(绑定)”入当前的名字空间,从而可以直接用数据框中的变量名访问而不必用“数据框名$变量名”这种格式;
对于数据框变量我们不能直接引用,要用“数据框名$变量名”的格式,或利用attach()把数据框“连接(绑定)”入当前的名字空间。
要取消连接,用函数detach()即可
2 以数组形式访问
数据框可以看作是特殊的数组,故可以以数组形式访问数据框。
数组可以按行或列访问,故可利用"数组名[行,列]"
3 以列表形式访问数据框
列表是对象的集合,且这些对象可以是不同类型的。
数据框是特殊的列表,数据框的列看作向量,且标是同一类型的对象。
以列表形式访问数据框:
在列表名称后面加$,再加上变量名即可:yx$x
列表名[[变量名(号)]]形式访问:yx[['y']] yx[[1]]
4.4.2 数据框的拆分与合并
R中拆分数据框:unstack()
合并数据框:stack()
4.4.3 多变量数据的分析
1 多维列联表
2 复式条形图
多变量数据统计分析中经常用到复式条形图,复式条形图是指两条或两个以上小直条组成条图的条形图。与简单条形图相比,复式条形图多考察了一个分组因素,常用于考察比较两组研究对象的某观察指标。
作复式条形图时:先用table()函数作频数表,作复式条形图的函数是barplot()
R默认的分段式复式条形图,要作并列式复式条形图,要设置参数beside=TRUE
3 并列箱线图
对于多变量数据结党要用到箱线图来分析各个变量的分布情况
R作箱线图的函数是:boxplot()
4 点带图(stripchart)
箱线图经常用来比较各变量的分布情况,尤其是当每个变量都有很(较)多的观察值时
点带图也可以用来比较各变量的分布情况,但主要用在样本观察值比较少时。
R作点带图的函数是:stripchart()
对于双变量数据其用法是 stripchart(z~t) z变量在t变量上的分布情况,不同的是这里z变量刻度在x轴上,而t变量在x轴上
5 多变量散点图
(1)重叠散点图
将两个或多组两个变量的散点图绘制在同一个图中,可以更好比较它们之间的相关关系,这时可以绘重叠散点图
(2)矩阵式散点图
当欲同时考察三个或三个以上的数值变量间的相关关系时,若一一绘制它们之间的简单散点图,十分麻烦,利用矩阵式散点图比较合适,这样可以快速发现多个变量间主要相关性,在多元线性回归显得尤为重要。
R作矩阵式散点图的函数是:pairs()