R:R语言实战学习一(基本统计分析)

本学期的课程R语言实战只学了前六章的皮毛,实际上后面的知识用的更多,前面的是基础,这次学习第七章:基本统计分析。

1.描述性统计分析

主要关注分析连续型变量的中心趋势、变化性和分布形状的方法,为了便于说明,使用的是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)。

2.分组计算描述性统计量

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

3.频数和列联表

函 数 描述
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”。

你可能感兴趣的:(R学习笔记,r语言,学习,开发语言)