像Excel一样使用R进行数据分析(3)

Excel是数据分析中最常用的工具,本篇文章通过R与excel的功能对比介绍如何使用R通过函数式编程完成excel中的数据处理及分析工作。我们总结出最常用的50个函数,通过这些函数介绍如何通过R完成数据生成和导入,数据清洗,预处理,以及最常见的数据筛选,回归预测和假设检验等最常见的操作 。

R-for-Excel-Users-03

本系列文章共分为三篇10个部分。已由人民邮电出版社出版,感兴趣的朋友可以在异步社区获取完整版。

从Excel到R数据分析进阶指南
这是第三篇,介绍最后三部分内容,数据统计,相关分析,回归预测及假设检验,数据导出。

8,数据统计

第八部分为数据统计,这里主要介绍描述统计,标准差,协方差和相关系数的使用方法。

8.1. 描述统计

Excel中的数据分析中提供了描述统计的功能。R中可以通过summary对数据进行描述统计。

描述统计

summary函数是进行描述统计的函数,自动生成数据的数量,均值,标准差等数据。下面的代码中对数据表进行描述统计。

#数据表描述统计
summary(df)

数据表描述统计

#特定列描述统计
summary(df$age)

单列描述统计

8.2. 计数,求和,均值

还有一些常见的计算函数,如计数,求和和计算均值等等。

#数据表计数(列数)
length(df)
[1] 12
#特定列计数
length(df$id)
[1] 8
#求和
sum(df$price)
[1] 24483

#均值
mean(df$price)
[1] 3060.375

8.3. 方差,标准差

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&#91;is.na(x)==TRUE&#93;)
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)
}

&#91;/code&#93;



&#91;code lang="r"&#93;

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

&#91;/code&#93;

<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://bluewhale.cc/wp-content/uploads/2017/06/协方差.png" alt="协方差" width="667" height="410" /></a>

Cov函数用来计算两个字段间的协方差,只能对数据表中的特定字段进行计算。




#协方差
cov(df$m_point,df$price)
[1] 18546.57

9.2. 相关系数

Excel的数据分析功能中提供了相关系数的计算功能,R中则通过cor函数完成相关分析的操作,并返回相关系数。

相关系数

cor函数用来计算数据间的相关系数,可以单独对特定数据进行计算,也可以对整个数据表中各个列进行计算。相关系数在-1到1之间,接近1为正相关,接近-1为负相关,0为不相关。


#相关系数
cor(df$m_point,df$price)
[1] 0.8916421

9.3. 回归分析

Excel中还有一个最常用分析功能是回归分析,在R中可以使用多种方法对数据完成回归分析。这里我们主要介绍四种,简单回归,多元回归,向后逐步回归和全子集回归。

回归

一元线性回归

在R中使用lm()函数对变量和目标值进行一元回归分析,并创建回归方程。R方为0.795。说明自变量可以对因变量79%的变化进行解释。


#简单线性回归
lm.sol<-lm(price~m_point,data = df)
summary(lm.sol)

&#91;/code&#93;


<a href="http://bluewhale.cc/wp-content/uploads/2017/06/简单线性回归.png"><img class="aligncenter size-full wp-image-4478" src="http://bluewhale.cc/wp-content/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)

&#91;/code&#93;


<a href="http://bluewhale.cc/wp-content/uploads/2017/06/多元线性回归.png"><img class="aligncenter size-full wp-image-4479" src="http://bluewhale.cc/wp-content/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。

9.4. 方差检验和t检验

Excel的数据分析功能中还有一个常用的功能是假设检验,其中较为常用的就是t检验。R中使用t.test函数完成t检验过程。

t检验 异方差
方差检验
我们对数据表中的age字段的数据与一组新的age数据进行t检验,看看两者间是否有显著差异。

age<-df$age
age2=c(19,16,12,17,15,17)

&#91;/code&#93;


首先使用var.test函数对两组数据进行方差检验,来确定方差是否相等。


&#91;code lang="r"&#93;
var.test(x = age,y = age2,conf.level = 0.95)

&#91;/code&#93;


<a href="http://bluewhale.cc/wp-content/uploads/2017/06/方差检验.png"><img class="aligncenter size-full wp-image-4483" src="http://bluewhale.cc/wp-content/uploads/2017/06/方差检验.png" alt="方差检验" width="663" height="237" /></a>

p-value=0.005774,小于0.05,两个总体方差不相同。进行异方差t检验。

&nbsp;

<strong>异方差t检验</strong>

建立假设
H0:年龄没有差异
H1:年龄有显著差异

使用异方差t检验对两组年龄数据进行检验,确定两组用户的年龄间是否有显著差异。



t.test(age,age2,var.equal= FALSE,alternative = "two.sided")

T检验

p-value = 0.005086小于0.05,拒绝原假设,两组年龄间有显著差异。

10,数据输出

第十部分是数据输出,处理和分析完的数据可以输出为csv格式和txt格式。

10.1. 写入csv


#输出到csv格式文件
write.csv(x = df,file = "r_test.csv")

输出到csv

10.2. 写入txt


#输出到txt格式文件
write.table(x=df,file = "r_test.txt",sep = ",")

本篇是《像Excel一样使用R进行数据分析》系列文章的最后一篇。在这个系列中我们总结出最常用的50个函数来实现excel中最常见的一些功能。感兴趣的朋友请继续关注,也欢迎给我留言进行交流。

 

—【所有文章及图片版权归 蓝鲸(王彦平)所有。欢迎转载,但请注明转自“蓝鲸网站分析博客”。】—

Speak Your Mind

*