问题
要计算基本的统计量:均值、中值、标准差、方差、相关系数、协方差
解决方案
使用下面的函数,假设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」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。