R语言描述性统计分析

1 目标变量为数值变量

1.1 单变量描述

1.1.1 方法云集

  1. summary() 函数
    summary()函数为由R自带基础包提供。该函数提供了最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计。
    其格式为:
summary(data1$var1)
  1. Hmisc包的describe()函数
    Hmisc包中的describe()函数可返回变量和观测的数量、缺失值和唯一值的数目、平均值、分位数,以及五个最大的值和五个最小的值。
    其格式为
library(Hmisc)
describe(data1$var1)
  1. pastecs包的stat.desc()的函数
    pastecs包中有一个名为stat.desc()的函数,它可以计算种类繁多的描述性统计量。使用格式为:
library(pastecs)
stat.desc(data,basic = TURE,desc = TURE,norm ==FALSE,p=0.95)

(1)其中的data是一个数据框。
若basic=TRUE(默认值),则计算其中所有值、空值、缺失值的数量,以及最小值、最大值、值域,还有总和。
(2)若desc=TRUE(同样也是默认值),则计算中位数、平均数、平均数的标准误、平均数置信度为95%的置信区间、方差、标准差以及变异系数。
(3)若norm=TRUE(不是默认的),则返回正态分布统计量,包括偏度和峰度(以及它们的统计显著程度)和Shapiro–Wilk正态检验结果。这里使用了p值来计算平均数的置信区间(默认置信度为0.95)

  1. psych包的describe()函数
library(psych)
describe(data1$var1)

1.2 分组描述

doBy包的summaryBy函数

R自带的基础包不够灵活,结果导出也较麻烦,建议通过doBy 包的summaryBy函数进行分组描述性统计。
其格式如下:
summaryBy(var1 + var2 + var3 ~ groupvar1 + groupvar2,data= ?, id=NULL,FUN= ?)
例子:

library(doBy)
myresult1 <- summaryBy(var1 + var2  + var3 +var4 ~ groupvar1 ,data = data1, id=NULL,mean)
   # 把结果存储在myresults1中,该结果是一个数据表。
   
myresult2 <- summaryBy ( .  ~  groupvar2 + groupvar4,data = data1, id=NULL,var)
   # . 代表所有变量
   
fun1 <- function(x){
  c(m=mean(x, na.rm=TURE), v=var(x, na.rm=TURE),q=quantile(x, na.rm=TURE), md = median(x, na.rm=TURE) ,l=length(x),sd = sd(x,na.rm = TURE))
}
   # 先定义我们需要的描述性统计量函数
myresult3 <- summaryBy(var1 + var2  + var3 +var4 ~ groupvar1 ,data = data1, FUN= fun1)

1.3 假设检验

数值变量假设检验方法较多,假设检验见以后推文

2 目标变量为分类变量

2.1 描述性统计

1 可以通过R基础包自带的table()函数对类别变量频数进行统计,得到结果以values的形式展示,可以通过as.data.frame()函数将其转为dataframe
其官方格式如下:

table(...,
      exclude = if (useNA == "no") c(NA, NaN),
      useNA = c("no", "ifany", "always"),
      dnn = list.names(...), deparse.level = 1)
# 注意:table()函数默认忽略缺失值(NA)。
# 要在频数统计中将NA视为一个有效的类别
# 请设定参数useNA="ifany"。
# deparse.level = 2表示使用原变量名作为新的行列名。

若把以上结果存储于mytable中,可以使用margin.table()和prop.table()函数分别生成边际频数和比例

margin.table(mytable)
margin.table(mytable,1)
prop.table(mytable,2) 
addmargins(mytable)
# 1表示计算行比例,2表示计算列比例。
# 你可以使用addmargins()函数为这些表格添加边际和

2 可以通过gmodels包的的CrossTable()函数可以创建二维交叉表,有以下优点,但得到的结果以list形式展示
CrossTable()函数有很多选项,可以做许多事情:计算(行、列、单元格)的百分比;指定小数位数;进行卡方、Fisher和McNemar独立性检验;计算期望和(皮尔逊、标准化、调整的
标准化)残差;将缺失值作为一种有效值;进行行和列标题的标注;生成SAS或SPSS风格的输出。
其官方示列格式如下:

CrossTable(x, y, digits=3, max.width = 5, expected=FALSE, prop.r=TRUE, prop.c=TRUE,
           prop.t=TRUE, prop.chisq=TRUE, chisq = FALSE, fisher=FALSE, mcnemar=FALSE,
           resid=FALSE, sresid=FALSE, asresid=FALSE,
           missing.include=FALSE,
           format=c("SAS","SPSS"), dnn = NULL, ...)       

示列: 对MS数据集下FIMMSE和agep,edug变量进行示列

my1 <-  table(MS$FIMMSE,MS$agep,deparse.level = 2)
my2 <- table(MS$FIMMSE,MS$agep,deparse.level = 2)
# 以上得到的结果为values形式

my1 <- as.data.fram(my1)
my2 <- as.data.fram(my2)
# 把my1,my2转换为data.frame形式,但该结果为一个长表

myr1 <- tidyr::spread(data=my1,key=MS.FIMMSE,value=Freq)
myr2 <-  tidyr::spread(data=my2,key=MS.FIMMSE,value=Freq)
# 对my1,my2进行长转宽,得到一个宽表。

my <- rbind(myr1,myr2,fill=TRUE)
# 把以上两个描述上下连接起来,用NA填充不存在的列。

以下结果为my1:转换为data.framd的表格
在这里插入图片描述

以下结果为myr1:进行长宽转换的结果
在这里插入图片描述

以下结果为my:上下连接两个分组(年龄agep,受教育程度edug)的结果
my的结果

2.2 假设检验

二维和多维列联表的假设检验多为卡方检验。其应用条件如下:
(1)数据为随机样本数据。
(2)所有的理论数T≥5并且总样本量n≥40,用Pearson卡方进行检验。
(3)如果理论数T<5但T≥1,并且n≥40,用连续性校正的卡方进行检验。
(4)如果有理论数T<1或n<40,则用Fisher’s检验。
(5)R×C表中理论数小于5的格子不能超过1/5。
(6)不能有小于1的理论数,可以通过增加样本数。列合并来实现

2.1.1 vcd包的chisq.test函数

其官方指南如下

library(grid)
library(vcd)
chisq.test(x, y = NULL, correct = TRUE,
           p = rep(1/length(x), length(x)), rescale.p = FALSE,
           simulate.p.value = FALSE, B = 2000)
 # correct = T代表使用矫正卡方检验
  1. Fisher精确检验
mytable2 <- table (var3,var4)
fisher.test(mytable)

注意:这里的fisher.test()函数可以在任意行列数大于等于2的二维列联表上使用,但不能用于2×2的列联表。

相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页