R语言入门秘录8/25:计算基本统计量

数据分析网整理自tbkken的《R语言入门25招》,一招招技能带你走进R语言。

问题

要计算基本的统计量:均值、中值、标准差、方差、相关系数、协方差

解决方案

使用下面的函数,假设x和y是向量:

代码

mean(x)

median(x)

sd(x)

var(x)

cor(x, y)

cov(x, y)

讨论

我第一次打开R的文档时,就想在其中找到诸如“计算标准差的操作步骤”这样的章节。但我发现,要解决这个重要的问题需要读上一整章的内容。

其实这并没有那么复杂。

用很简单的函数就能计算出标准差等基本统计量。通常,函数的参数就是一个向量,然后函数就会返回计算出来的统计量:

代码

> x <- c(0,1,1,2,3,5,8,13,21,34)

> mean(x)

[1] 8.8

> median(x)

[1] 4

> sd(x)

[1] 11.03328

> var(x)

[1] 121.7333

sd函数计算样本标准差,var计算的是样本方差。

cor和cov函数分别计算的是两个向量间的相关系数和协方差:

代码

> x <- c(0,1,1,2,3,5,8,13,21,34)

> y <- log(x+1)

> cor(x,y)

[1] 0.9068053

> cov(x,y)

[1] 11.49988

这些函数都对NA敏感。只要向量中有NA值,函数就会返回NA,甚至会报错:

代码

> x <- c(0,1,1,2,3,NA)

> mean(x)

[1] NA

> sd(x)

[1] NA

R的这种小心翼翼让人心烦,但确实应该这么做。遇到这种情况一定要小心。数据中的NA是不是会使得统计量没有意义?如果是的,那么R就作对了。如果不是,可以将na.rm参数设为TRUE,R就会忽略NA值:

代码

> x <- c(0,1,1,2,3,NA)

> mean(x, na.rm=TRUE)

[1] 1.4

> sd(x, na.rm=TRUE)

[1] 1.140175

mean和sd函数都能很智能的处理数据框。他们知道数据框中的每一列都是一个不同的变量,因此它们会逐列地计算统计量。下面这个例子计算了一个有三列数据的数据框的基本统计量:

代码

> print(dframe)

small medium big

1 0.6739635 10.526448 99.83624

2 1.5524619 9.205156 100.70852

3 0.3250562 11.427756 99.73202

4 1.2143595 8.533180 98.53608

5 1.3107692 9.763317 100.74444

6 2.1739663 9.806662 98.58961

7 1.6187899 9.150245 100.46707

8 0.8872657 10.058465 99.88068

9 1.9170283 9.182330 100.46724

10 0.7767406 7.949692 100.49814

> mean(dframe)

small

medium

big

1.245040 9.560325 99.946003

> sd(dframe)

small medium big

0.5844025 0.9920281 0.8135498

可以看到,mean和sd都返回了三个值,分别对应数据框中的三列。(技术上来说,是返回了一个有三个元素的向量,名称来自于数据框中每一列的名称。)

var函数也能理解数据框,但是它的处理方法跟mean和sd有些不同。他们计算数据框中每两列间的方差,返回一个方差矩阵:

代码

> var(dframe)

small medium big

small 0.34152627 -0.21516416 -0.04005275

medium -0.21516416 0.98411974 -0.09253855

big -0.04005275 -0.09253855 0.66186326

类似的,如果x是数据框或矩阵,cor(x)会返回相关矩阵,cov会返回协方差矩阵:

代码

> cor(dframe)

small

small 1.00000000

medium -0.37113670

big -0.08424345

> cov(dframe)

small

small 0.34152627

medium -0.21516416

big -0.04005275

medium big

-0.3711367 -0.08424345

1.0000000 -0.11466070

-0.1146607 1.00000000

medium big

-0.21516416 -0.04005275

0.98411974 -0.09253855

-0.09253855 0.66186326

遗憾的是,median函数是无法理解数据框的。要计算数据框中各列的中位值,需要用lapply函数将median函数应用数据框的每一列上。

扩展阅读

第12招中介绍了如何计算均值的可信区间。第15招中介绍了检测相关性的显著性。

本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。

(0)
小胖的头像小胖编辑
上一篇 2016-01-01 13:42
下一篇 2016-01-03 13:47

相关文章

关注我们
关注我们
分享本页
返回顶部