问题
如何使用R软件计算下列统计量:均值、中位数、标准差、方差、协方差和相关系数。
解决方案
采用如下函数进行计算,其中x、y均为向量: mean(x) median(x) sd(x) var(x) cor(x, y) cov(x, y)
讨论
我初次阅读R软件帮助文件是为了寻找“标准差的计算过程”这一内容,原本认为帮助文件会以一整章篇幅介绍这一重要概念。
实际上没有那么复杂。
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结果,甚至可能造成计算机在计算过程中报错: > x <- c(0,1,1,2,3,NA) > mean(x) [1] NA > sd(x) [1] NA
虽然R软件对于缺失值的敏感程度有时会造成用户的不便,但这种处理方式也是合情合理的。对于R软件返回的结果你应该慎重地考虑:数据中的缺失值是否会严重影响统计结果?如果是,那么R软件返回错误结果是正确的;如果不是,则可以通过设置参数na.rm=TRUE, 告知R软件忽略缺失值:
> 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函数能巧妙地处理数据框数据,自动将数据框中的每一列认为是不同的变量,并对每列数据分别进行计算。下面的例子展示了mean和sd函数对有三列的数据框的计算结果: > print(dframe) small mediumbig 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函数都会返回3个值,每个数值对应着对数据框中一列数据的计算结果(一般地,R软件会以一个包含三个元素的向量返回结果,其中每个元素的names属性由数据框中各个列的名称得来)。
var函数也能处理数据框数据,但处理方式与mean函数和sd函数有些许不同。var函数计算每两列变量间的协方差,并以协方差矩阵的形式返回结果: > 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(x) 返回其协方差矩阵:
> cor(dframe) small medium big small 1.00000000 -0.3711367 -0.08424345 medium -0.37113670 1.0000000 -0.11466070 big -0.08424345 -0.1146607 1.00000000 > cov(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
median函数无法辨认数据框形式的数据。
求土豪给知识的搬运工一点奖励: