R语言之探索性数据分析篇

探索性数据分析(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()








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值