本学期的课程R语言实战只学了前六章的皮毛,实际上后面的知识用的更多,前面的是基础,这次学习第七章:基本统计分析。
主要关注分析连续型变量的中心趋势、变化性和分布形状的方法,为了便于说明,使用的是mtcars数据集,主要关注mpg(每加仑汽油行驶英里数)、hp(马力)、wt。
summary()函数
summary提供了最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计。
> myvars <- c("mpg", "hp", "wt")
> head(mtcars[myvars])
mpg hp wt
Mazda RX4 21.0 110 2.620
Mazda RX4 Wag 21.0 110 2.875
Datsun 710 22.8 93 2.320
Hornet 4 Drive 21.4 110 3.215
Hornet Sportabout 18.7 175 3.440
Valiant 18.1 105 3.460
#通过summary()计算描述性统计量
> summary(mtcars[myvars])
mpg hp wt
Min. :10.40 Min. : 52.0 Min. :1.513
1st Qu.:15.43 1st Qu.: 96.5 1st Qu.:2.581
Median :19.20 Median :123.0 Median :3.325
Mean :20.09 Mean :146.7 Mean :3.217
3rd Qu.:22.80 3rd Qu.:180.0 3rd Qu.:3.610
Max. :33.90 Max. :335.0 Max. :5.424
sapply()函数
sapply将列表、向量或数据帧作为输入,并以向量或矩阵的形式输出,和lapply函数做一样的工作,但是saply返回一个向量,lapply函数返回列表。
使用格式:sapply(x, FUN, options)
x是你的数据框(或矩阵),FUN为一个任意的函数。如果指定了options,它们将被传递给FUN。
#通过sapply()计算描述性统计量
#na.omit=FALSE 去掉缺失值 for循环在不是缺失值的时候循环
#s标准差 skew偏度 kurt峰度
> mystats <- function(x, na.omit=FALSE){
+ if (na.omit)
+ x <- x[!is.na(x)]
+ m <- mean(x)
+ n <- length(x)
+ s <- sd(x)
+ skew <- sum((x-m)^3/s^3)/n
+ kurt <- sum((x-m)^4/s^4)/n - 3
+ return(c(n=n, mean=m, stdev=s, skew=skew, kurtosis=kurt))
+ }
> myvars <- c("mpg", "hp", "wt")
> sapply(mtcars[myvars], mystats)
mpg hp wt
n 32.000000 32.0000000 32.00000000
mean 20.090625 146.6875000 3.21725000
stdev 6.026948 68.5628685 0.97845744
skew 0.610655 0.7260237 0.42314646
kurtosis -0.372766 -0.1355511 -0.02271075
对于样本中的车型,每加仑汽油行驶英里数的平均值为20.1,标准差为6.0。分布呈现右偏(偏度+0.61),并且较正态分布稍平(峰度–0.37)。
aggregate()函数
使用格式:aggregate(x, by, FUN)
x是待折叠的数据对象,by是一个变量名组成的列表,这些变量将被去掉以形成新的观测,而FUN则是用来计算描述性统计量的标量函数,它将被用来计算新观测中的值。通俗一点就是对x中的by做FUN运算,得到新的观测值。
#使用aggregate()分组获取描述性统计量
aggregate(mtcars[myvars], by=list(am=mtcars$am), mean)
am mpg hp wt
1 0 17.14737 160.2632 3.768895
2 1 24.39231 126.8462 2.411000
#如果使用的是list(mtcars$am) 则am列将被标注为Group.1而不是am
#如果有多个分组变量,可以使用by=list(name1=groupvar1,name2=groupvar2, ... , nameN=groupvarN)这样的语句
by()函数
使用格式:==by(data, INDICES, FUN) ==
data是一个数据框或矩阵,INDICES是一个因子或因子组成的列表,定义了分组,FUN是任意函数。
#使用by()分组计算描述性统计量
#sapply调用了上面的mystats函数
#mtcars$am的数据都是0 1 是按这个进行分组的
> dstats <- function(x)sapply(x, mystats)
> myvars <- c("mpg", "hp", "wt")
> by(mtcars[myvars], mtcars$am, dstats)
mtcars$am: 0
mpg hp wt
n 19.00000000 19.00000000 19.0000000
mean 17.14736842 160.26315789 3.7688947
stdev 3.83396639 53.90819573 0.7774001
skew 0.01395038 -0.01422519 0.9759294
kurtosis -0.80317826 -1.20969733 0.1415676
----------------------------------------------------
mtcars$am: 1
mpg hp wt
n 13.00000000 13.0000000 13.0000000
mean 24.39230769 126.8461538 2.4110000
stdev 6.16650381 84.0623243 0.6169816
skew 0.05256118 1.3598859 0.2103128
kurtosis -1.45535200 0.5634635 -1.1737358
函 数 | 描述 |
---|---|
table(var1, var2, …, varN) | 使用 N 个类别型变量(因子)创建一个 N 维列联表 |
xtabs(formula, data) | 根据一个公式和一个矩阵或数据框创建一个 N 维列联表 |
prop.table(table, margins) | 依 margins 定义的边际列表将表中条目表示为分数形式 |
margin.table(table, margins) | 依 margins 定义的边际列表计算表中条目的和 |
addmargins(table, margins) | 将概述边 margins(默认是求和结果)放入表中 |
ftable(table) | 创建一个紧凑的“平铺”式列联表 |
一维列联表
table():简单的频数统计表
prop.table():转化为比例值
prop.table()*100:转化为百分比
二维列联表
table(A,B):A是行变量 B是列变量
table()函数默认忽略缺失值(NA)。要在频数统计中将NA视为一个有效的类别,请设定参数useNA=“ifany”。