Excel 是数据分析中最常用的工具,本篇文章通过 R 与 excel 的功能对比介绍如何使用 R 通过函数式编程完成 excel 中的数据处理及分析工作。我们总结出最常用的 50 个函数,通过这些函数介绍如何通过 R 完成数据生成和导入,数据清洗,预处理,以及最常见的数据筛选,回归预测和假设检验等最常见的操作 。
本系列文章共分为三篇 10 个部分。已由人民邮电出版社出版,感兴趣的朋友可以在 异步社区 获取完整版。
这是第三篇,介绍最后三部分内容,数据统计,相关分析,回归预测及假设检验,数据导出。
第八部分为数据统计,这里主要介绍描述统计,标准差,协方差和相关系数的使用方法。
Excel 中的数据分析中提供了描述统计的功能。R 中可以通过 summary 对数据进行描述统计。
summary 函数是进行描述统计的函数,自动生成数据的数量,均值,标准差等数据。下面的代码中对数据表进行描述统计。
- #数据表描述统计
- summary(df)
- #特定列描述统计
- summary(df$age)
还有一些常见的计算函数,如计数,求和和计算均值等等。
- #数据表计数(列数)
- length(df)
- [1] 12
- #特定列计数
- length(df$id)
- [1] 8
- #求和
- sum(df$price)
- [1] 24483
- #均值
- mean(df$price)
- [1] 3060.375
R 中的 var 函数用来接算特定数据列的方差。
- #方差
- var(df$price)
- [1] 2082955
std 函数用来接算特定数据列的标准差。
- #标准差
- sd(df$price)
- [1] 1443.244
将以上常用的数值计算设置成自定义函数,可以一次计算出想要的结果。
- #自定义函数对数据表特定列进行统计
- data_summary<-function(x){
- n<-length(x)
- m<-mean(x)
- v<-var(x)
- s<-sd(x)
- wmin<-which.min(x)
- wmax<-which.max(x)
- na_c<-length(x[is.na(x)==TRUE])
- t<-typeof(x)
- data.frame(count=n,mean=m,var=v,sd=s,w_min=wmin,w_max=wmax,na_count=na_c,type=t)
- }
- [/code]
- [code lang="r"]
- data_summary(df$age)
- count mean var sd w_min w_max na_count type
- 1 10 33.9 90.98889 9.53881 1 3 0 double
- [/code]
- <h1>9 相关分析,预测及假设检验</h1>
- <h2>9.1. 协方差</h2>
- Excel中的数据分析功能中提供协方差的计算,R中通过cov函数计算两个字段或数据表中各字段间的协方差。
- <a href="http://bluewhale.cc/wp-content/uploads/2017/06/协方差.png"><img class="aligncenter size-full wp-image-4475" src="http://code.replays.net/uploads/2017/06/协方差.png" alt="协方差" width="667" height="410" /></a>
- Cov函数用来计算两个字段间的协方差,只能对数据表中的特定字段进行计算。
- #协方差
- cov(df$m_point,df$price)
- [1] 18546.57
Excel 的数据分析功能中提供了相关系数的计算功能,R 中则通过 cor 函数完成相关分析的操作,并返回相关系数。
cor 函数用来计算数据间的相关系数,可以单独对特定数据进行计算,也可以对整个数据表中各个列进行计算。相关系数在 - 1 到 1 之间,接近 1 为正相关,接近 - 1 为负相关,0 为不相关。
- #相关系数
- cor(df$m_point,df$price)
- [1] 0.8916421
Excel 中还有一个最常用分析功能是回归分析,在 R 中可以使用多种方法对数据完成回归分析。这里我们主要介绍四种,简单回归,多元回归,向后逐步回归和全子集回归。
在 R 中使用 lm() 函数对变量和目标值进行一元回归分析,并创建回归方程。R 方为 0.795。说明自变量可以对因变量 79% 的变化进行解释。
- #简单线性回归
- lm.sol<-lm(price~m_point,data = df)
- summary(lm.sol)
- [/code]
- <a href="http://bluewhale.cc/wp-content/uploads/2017/06/简单线性回归.png"><img class="aligncenter size-full wp-image-4478" src="http://code.replays.net/uploads/2017/06/简单线性回归.png" alt="简单线性回归" width="634" height="388" /></a>
- <strong>多元线性回归</strong>
- 在一元线性回归的基础上可以增加自变量的数量,进行多元线性回归。下面的代码中除了之前的m_point变量外,新增加了age字段作为变量创建回归方程。
- #多元线性回归
- lm.sol<-lm(price~m_point+age,data = df)
- summary(lm.sol)
- [/code]
- <a href="http://bluewhale.cc/wp-content/uploads/2017/06/多元线性回归.png"><img class="aligncenter size-full wp-image-4479" src="http://code.replays.net/uploads/2017/06/多元线性回归.png" alt="多元线性回归" width="725" height="405" /></a>
- <strong>向后逐步回归</strong>
- 逐步回归是选择用于预测变量的一种方法。逐步回归中有向前和向后两种方法。向前逐步回归每次增加一个变量,直到模型不再改变。向后逐步回归每次减少一个变量,直到模型不再改变。这里使用向后逐步回归的方法选择预测变量。
- 使用逐步回归需要先安装并加载MASS包。下面是具体的代码和结果。
- #安装MASS包
- installed.packages('MASS')
- #加载MASS包
- library('MASS')
- #向后逐步回归
- fit=lm(price~m_point+age,data=df)
- stepAIC(fit,direction="backward")
全子集回归
除了逐步回归方法外,还有全子集回归方法可以用于挑选预测变量。全子集回归检测所有的变量,并展示最佳的模型的结果。下面是使用全子集回归的代码和结果。
使用全子集回归前需要先安装和加载 leaps 包。
- #安装leaps包
- install.packages('leaps')
- #加载leaps包
- library('leaps')
- #全子集回归
- leaps=regsubsets(price~m_point+age,data=df,nbest=2)
- plot(leaps,scale='adjr2')
在上图中,Y 轴为 R 方值,X 轴为截距和三个变量。只包含截距和变量 age 的模型 R 方为 - 0.15,包含截距和变量 m_point 及 age 的 R 方为 0.72,只包含截距和变量 m_point 的 R 方式 0.76。
Excel 的数据分析功能中还有一个常用的功能是假设检验,其中较为常用的就是 t 检验。R 中使用 t.test 函数完成 t 检验过程。
方差检验
我们对数据表中的 age 字段的数据与一组新的 age 数据进行 t 检验,看看两者间是否有显著差异。
- age<-df$age
- age2=c(19,16,12,17,15,17)
- [/code]
- 首先使用var.test函数对两组数据进行方差检验,来确定方差是否相等。
- [code lang="r"]
- var.test(x = age,y = age2,conf.level = 0.95)
- [/code]
- <a href="http://bluewhale.cc/wp-content/uploads/2017/06/方差检验.png"><img class="aligncenter size-full wp-image-4483" src="http://code.replays.net/uploads/2017/06/方差检验.png" alt="方差检验" width="663" height="237" /></a>
- p-value=0.005774,小于0.05,两个总体方差不相同。进行异方差t检验。
- <strong>异方差t检验</strong>
- 建立假设
- H0:年龄没有差异
- H1:年龄有显著差异
- 使用异方差t检验对两组年龄数据进行检验,确定两组用户的年龄间是否有显著差异。
- t.test(age,age2,var.equal= FALSE,alternative = "two.sided")
p-value = 0.005086 小于 0.05,拒绝原假设,两组年龄间有显著差异。
第十部分是数据输出,处理和分析完的数据可以输出为 csv 格式和 txt 格式。
- #输出到csv格式文件
- write.csv(x = df,file = "r_test.csv")
- #输出到txt格式文件
- write.table(x=df,file = "r_test.txt",sep = ",")
本篇是《像 Excel 一样使用 R 进行数据分析》系列文章的最后一篇。在这个系列中我们总结出最常用的 50 个函数来实现 excel 中最常见的一些功能。感兴趣的朋友请继续关注,也欢迎给我留言进行交流。
来源: http://www.tuicool.com/articles/fYzmeyv