1.描述性统计分析
(1)方法云集
通过summary,sapply()计算描述性统计量
-
vars<-c("mpg","hp","wt")
-
vars
-
head(mtcars[vars])
-
#通过summary()函数来获取描述性统计量
-
summary(mtcars[vars])
-
#sapply()函数,格式:sapply(x,FUN,options)x:数据框或矩阵;FUN:为任意的函数;options:若被指定,则将被传递给FUN
-
#通过sapply()计算描述性统计量
-
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))
-
}
-
sapply(mtcars[vars],mystats)
通过Hmisc包中的describe()函数计算描述性统计量
-
library(Hmisc)
-
describe(mtcars[vars])
通过pastecs包中的stat.desc()函数计算描述性统计量
格式:stat.desc(x,basic=TRUE,desc=TRUE,norm=FALSE,p=0.95)
x |
是一个数据框或时间序列 |
basic=TRUE |
计算其中所有值、空值、缺失值的数量
以及最小值 、最大值、值域还有总和 |
desc=TRUE |
计算中位数、平均数、平均数的标准误,
平均数置信度为95%的置信区间、方差、标准差以及变异系数 |
norm=TRUE |
返回正态统计量,包括信度和峰度(以及它们的统计显著程度)
及Shapiro-Wilk正态检验结果 |
p |
|
-
library(pastecs)
-
stat.desc(mtcars[vars])
通过psych包中的describe()计算描述性统计量
可计算非缺失值的数量、平均数、标准差、中位数、截尾均值、绝对中位差、最小值、最大值、值域、偏度、峰度和平均值的标准误
-
library(psych)
-
describe(mtcars[vars])
(2)分组计算描述性统计量
使用aggregate()分组获取描述性统计量
注意:aggregate()仅允许在每次调用中使用平均数、标准差这样的单返回值函数
-
aggregate(mtcars[vars],by=list(am=mtcars$am),mean)
-
aggregate(mtcars[vars],by=list(am=mtcars$am),sd)
使用by()分组计算描述性统计量
by(data,INDICES,FUN)
-
dstats<-function(x)(c(mean=mean(x),sd=sd(x)))
-
by(mtcars[vars],mtcars$am,dstats)
使用doBy包中的summaryBy()分组计算概述统计量
-
library(doBy)
-
summaryBy(mpg+hp+wt~am,data=mtcars,FUN=mystats)
使用psych包中的describe.by()分组计算概述统计量
-
library(psych)
-
describeBy(mtcars[vars],mtcars$am)
使用reshape包分组计算概述统计量
-
library(reshape)
-
dstats<-function(x)(c(n=length(x),mean=mean(x),sd=sd(x)))
-
dfm<-melt(mtcars,measure.vasrs=c("mpg","hp","wt"),id.vars=c("am","cyl"))
-
cast(dfm,am+cyl+variable~.,dstats)
2.频数表和列联表
(1)生成频数表
用于创建和处理列联表的函数
函数 |
描述 |
table(var1,var2,…,varN) |
使用N个类别变量(因子)
创建一个N维列联表 |
xtabs(forula,data) |
根据一个公式和一个矩阵或数据框创建一个N维列联表 |
prop.table(table,margins) |
依margins定义的边际列表中条目表示为分数形式 |
margin.table(table,margins) |
依margins定义的边际列表计算表中条目的和 |
addmargins(table,margins) |
将概述边margins放入表中 |
ftable(table) |
创建一个紧凑的”平铺“式列联表 |
|
|
(2)一维列联表
eg
-
install.packages("vcd")
-
library(vcd)
-
mytable<-with(Arthritis,table(Improved))
-
mytable
-
#使用prop.table()将频数转化为比例值:
-
prop.table(mytable)
-
#使用prop.table()*100转化为百分比
-
prop.table(mytable)*100
(3)二维列联表
table()
格式:
table(A,B)#A是行变量,B是列变量
xtabs(~A+B,data=mydata)#其中mydata是一个矩阵或数据框;要进行交叉分类的变量应出现在公式的右侧(即~符号的右方),以+作为分隔符
eg:
-
mytable<-xtabs(~Treatment+Improved,data=Arthritis)
-
mytable
-
#可以使用margin.table()和prop.table()函数分别生成边际频数和比例
-
margin.table(mytable,1) #下标1指代table()语句中的第一个变量
-
prop.table(mytable,1)
-
#列和列比例可以这样计算
-
margin.table(mytable,2)#下标2指代table()语句中的第二个变量
-
prop.table(mytable,2)
-
#各单元所占比例可用如下语句获取
-
prop.table(mytable)
-
#可使用addmargins()函数为表格添加边际和;使用addmargins()时,默认行为是为表中所有的变量创建边际和
-
addmargins(mytable)
-
addmargins(prop.table(mytable))
-
#仅添加各行的和
-
addmargins(prop.table(mytable,1),2)
-
#仅添加各列的和
-
addmargins(prop.table(mytable,2),1)
注意:table()函数默认忽略缺失值(NA),要在频数统计中将NA视为一个有效的类别,请设定参数useNA="ifany"
使用CrossTable生成二维列联表
-
install.packages("gmodels")
-
library(gmodels)
-
CrossTable(Arthritis$Treatment,Arthritis$Improved)
(4)多维列联表
table()
xtabs()
margin.table()
prop.table()
addmargins()
ftable()
eg:
-
mytable<-xtabs(~Treatment+Sex+Improved,data=Arthritis)
-
mytable
|
请发表评论