R语言-生成频数表和列联表crosstable函数介绍

列联表crosstable

列联表不仅可以用来做简单的描述性统计,还可以在机器学习中用来比较识别正确率,FPR,TPR等等数据,以便我们比较不同的ML模型 or 调参。

2x2列联表一般长下面这样:

Total Observations in Table:  143 

             | test_cancer$diagnosis
   lda.class |         0 |         1 | Row Total |
-------------|-----------|-----------|-----------|
           0 |        82 |        11 |        93 |
             |     0.882 |     0.118 |     0.650 |
             |     0.988 |     0.183 |           |
             |     0.573 |     0.077 |           |
-------------|-----------|-----------|-----------|
           1 |         1 |        49 |        50 |
             |     0.020 |     0.980 |     0.350 |
             |     0.012 |     0.817 |           |
             |     0.007 |     0.343 |           |
-------------|-----------|-----------|-----------|
Column Total |        83 |        60 |       143 |
             |     0.580 |     0.420 |           |
-------------|-----------|-----------|-----------|

创建列联表crosstable

推荐使用R中“gmodels”包的CrossTable()函数来做。

举例

## 使用knn模型做预测
knn_pred_1 = knn(train_cancer[,2:4], test_cancer[,2:4], train_cancer$diagnosis, k=1)
## 创建列联表看预测效果
CrossTable(x = knn_pred_1, y = test_cancer$diagnosis, prop.chisq = FALSE)
>
   Cell Contents
|-------------------------|
|                       N |
|           N / Row Total |
|           N / Col Total |
|         N / Table Total |
|-------------------------|

Total Observations in Table:  143 

             | test_cancer$diagnosis
  knn_pred_1 |         0 |         1 | Row Total |
-------------|-----------|-----------|-----------|
           0 |        77 |         8 |        85 |
             |     0.906 |     0.094 |     0.594 |
             |     0.928 |     0.133 |           |
             |     0.538 |     0.056 |           |
-------------|-----------|-----------|-----------|
           1 |         6 |        52 |        58 |
             |     0.103 |     0.897 |     0.406 |
             |     0.072 |     0.867 |           |
             |     0.042 |     0.364 |           |
-------------|-----------|-----------|-----------|
Column Total |        83 |        60 |       143 |
             |     0.580 |     0.420 |           |
-------------|-----------|-----------|-----------|

注意事项

在crosstable函数中,prop.chisq 这个argument默认是true,但实际上大部分使用场景不需要这个卡方概率,所以可以单独在函数中设置prop.chisq = FALSE

函数语法:

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, ...)

参数说明:

x,y:列联表的两个特征向量

digit:指定结果小数位数

prop.r:行比例是否加入

prop.c:列比例是否加入

prop.t:表比例是否加入

prop.chisq:每个单元的卡方值是否加入

chisq:卡方检验结果是否加入

频数表

频数表给出了各个特征值出现的频数,下面使用R自带的数据集“CO2”举例

head(CO2)
#得到“conc”特征的频数表
table(CO2$conc)

结果:

95 175 250 350 500 675 1000

12 12 12 12 12 12 12

补充:R--生成各种列联表

看代码吧~

library(vcd)
head(Arthritis)

table(Arthritis$Treatment,Arthritis$Improved)
with(Arthritis,table(Treatment,Improved))
mytable <- xtabs(~Treatment+Improved,data = Arthritis)
with(Arthritis,xtabs(~Treatment+Improved,data = Arthritis))

margin.table(mytable,2) # sum by row
prop.table(mytable,2)  #proportion by column
prop.table(mytable)  #proportion by total

addmargins(mytable)
addmargins(mytable,1)
addmargins(prop.table(mytable,2),1)

library(gmodels)
CrossTable(Arthritis$Treatment,Arthritis$Improved) ##SAS format

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • R语言中的fivenum与quantile()函数算法详解

    fivenum()函数: 返回五个数据:最小值.下四分位数数.中位数.上四分位数.最大值 对于奇数个数字=5,fivenum()先排序,依次返回最小值.下四分位数.中位数.上四分位数.最大值 > fivenum(c(1,12,40,23,13)) [1] 1 12 13 23 40 对于奇数个数字>5,fivenum()先排序,我们可以求取最小值,最大值,中位数.在排序中,最小值与中位数中间,若为奇数,取其中位数为下四分位数,若为偶数,取最中间两个数的平均值为下四分位数:在排序中,中位数与最大

  • R语言中assign函数和get函数的用法

    assign函数在循环时候,给变量赋值,算是比较方便 1.给变量赋值 for (i in 1:(length(rowSeq)-1)){ assign(paste("nginx_server_fields7_", i, sep = ""), nginx_server_fields7[(rowSeq[(i-1)+1]):(rowSeq[i+1]), ]) } 2.通过for循环给变量a1.a2.a3赋值 for (i in 1:3){ assign(paste(&quo

  • R语言:数据筛选match的使用详解

    数据筛选是在分析中最常用的步骤,如微生物组分析中,你的OTU表.实验设计.物种注释之间都要不断筛选,来进行数据对齐,或局部分析. 今天来详解一下此函数的用法. match match:匹配两个向量,返回x中存在的返回索引或TRUE.FALSE match函数使用格式有如下两种: 第一种方便设置参数,返回x中元素在table中的位置 match(x, table, nomatch = NA_integer_, incomparables = NULL) 第二种简洁,返回x中每个元素在table中是

  • R语言中cut()函数的用法说明

    R语言cut()函数使用 cut()切割将x的范围划分为时间间隔,并根据其所处的时间间隔对x中的值进行编码. 参数:breaks:两个或更多个唯一切割点或单个数字(大于或等于2)的数字向量,给出x被切割的间隔的个数. breaks采用fivenum():返回五个数据:最小值.下四分位数.中位数.上四分位数.最大值. labels为区间数,打标签 ordered_result 逻辑结果应该是一个有序的因素吗? 先用fivenum求出5个数,再用labels为每两个数之间,贴标签,采用(]的区间,

  • R语言-summary()函数的用法解读

    summary():获取描述性统计量,可以提供最小值.最大值.四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计等. 结果解读如下: 1. 调用:Call lm(formula = DstValue ~ Month + RecentVal1 + RecentVal4 + RecentVal6 + RecentVal8 + RecentVal12, data = trainData) 当创建模型时,以上代码表明lm是如何被调用的. 2. 残差统计量:Residuals Min 1Q M

  • R语言中c()函数与paste()函数的区别说明

    c()函数:将括号中的元素连接起来,并不创建向量 paste()函数:连接括号中的元素 例如 c(1, 2:4),结果为1 2 3 4 paste(1, 2:4),结果为"1 2" "1 3" "1 4" c(2, "and"),结果为"2" "and" paste(2, "and"),结果为"2 and" 补充:R语言中paste函数的参数sep

  • R语言中if(){}else{}语句和ifelse()函数的区别详解

    首先看看定义: # if statement if(cond) expr if(cond) cons.expr else alt.expr # ifelse function ifelse(test, yes, no) 这两个函数(R语言中都是函数)相同的地方都是根据条件返回对应的值. 区别在于: if语句的条件是个TRUE/FALSE值,如果是个长度>1的逻辑向量,只判断第一个TRUE/FALSE值:而ifelse是长度任意的逻辑向量,返回根据逻辑向量对应对的yes/no值组合的新向量 ife

  • R语言-生成频数表和列联表crosstable函数介绍

    列联表crosstable 列联表不仅可以用来做简单的描述性统计,还可以在机器学习中用来比较识别正确率,FPR,TPR等等数据,以便我们比较不同的ML模型 or 调参. 2x2列联表一般长下面这样: Total Observations in Table: 143 | test_cancer$diagnosis lda.class | 0 | 1 | Row Total | -------------|-----------|-----------|-----------| 0 | 82 | 1

  • R语言行筛选的方法之filter函数详解

    目录 1. 数据 2. 生成ID列和类型 3. 提取effect大于0.1的行 4. 提取加性效应,且effect小于0的行 5. 根据部分行名删选 6. 固定字符特征进行行筛选 总结 下面介绍一下R语言中行筛选的方法,主要介绍filter函数 1. 数据 这里,使用asreml分析中的BLUP值为例,相关的模型为: m1 = asreml(Phen ~ G , random = ~ vm(Progeny,ainv) + vm(Dam,ainv) + vm(Progeny,dinv), work

  • R语言 实现两表连接且输出不重复数据

    在做项目中遇到了如此问题,其中整理的结果表中没有会员ID信息,只有会员电话号码信息,且每一行为唯一一个会员. 另外一张member表中包含会员ID以及会员电话信息,但是这张表有重复的会员信息,也就是说一个会员在member表中多次出现,memeber表比整理的表要大很多. 说明: 1.在项目过程中,数据量较大,用到的是data.table包,需要用到SQL中的语句减少代码量,因此需要sqldf包. 2.以下例子中xx中的a1在yy中都有对应的值. 3.yy中的a1与b是一一对应的关系,不存在同一

  • R语言-计算频数和频率的操作

    首先,筛选出需要的列: data <- data2[,which(colnames(data2) %in% c("产品分类", "期数", "逾期月数"))] 产品分类 期数 逾期月数 委托贷款 24 1 委托贷款 36 1 担保贷款 24 2 委托贷款 24 2 信用贷款 36 4 担保贷款 24 3 信用贷款 24 1 委托贷款 36 3 担保贷款 24 2 现在希望得到每种产品种类在不同期数时 逾期月数的占比,使用table函数: #

  • R语言-有负下标里才能有零介绍

    1.只有负下标里才能有零 先看一个例子 >a<-c(1,2,3,4) >a[-1:1] > a[-1:1] Error in a[-1:1] : 只有负下标里才能有零 (1)只有负下标里才能有零,在这里的意思为: a[-1:0] 可行 a[0:4]也可行 a[-1:1]不可行 也就是说要么是负索引到0,或者0到正索引,但不能同时出现正负索引. (2)a[0]结果为numberic(0),结果没有意义,如 > a[0]+10.9 numeric(0) > a[1]+10.

  • R语言利用barplot()制作条形图的各种实例

    前言 函数barplot()可以绘制条形图,其格式为 barplot(height) height是一个向量或者矩阵,使用horiz=TRUE可以生成一个水平的条形图, 例子 1,用条形图统计分类变量的频数 注意条形图常用来统计分类变量每一钟元素的频数,此时可以运用table()进行处理分类变量,其可以统计分类变量的各个元素的频次.处理后的结果为table格式而barplot()可以识别table格式 table()函数可以统计列各种元素出现的次数 counts <- table(Arthrit

  • R语言常见面试题整理

    尊敬的读者,这些R语言面试题是专门设计的,以便您应对在R语言相关面试中可能会被问到的问题. 根据我的经验,良好的面试官几乎不打算在你的面试中问任何特定的问题,通常都是以如下的问题为开端进一步展开后继的问题. 什么是R语言编程? R语言是一种用于统计分析和为此目的创建图形的编程语言.不是数据类型,它具有用于计算的数据对象.它用于数据挖掘,回归分析,概率估计等领域,使用其中可用的许多软件包. R语言中的不同数据对象是什么? 它们是R语言中的6个数据对象.它们是向量,列表,数组,矩阵,数据框和表. 什

  • R语言实现操作MySQL数据库

    用R语言做数据分析时,常常需要从多种数据源取数据,其中数据库是非常常见的数据源.用R操作MySQL数据库,可以说是数据分析师必备的技能了,本文介绍RMySQL包,可以在R语言中对数据库进行增删改查的操作. 软件版本 win10 64bit r3.6.1 rstudio 1.2 RMySQL 0.10.20 安装包 install.packages('RMySQL') 创建连接 用dbConnect函数创建连接,驱动类型设置为MySQL(),用户名user.密码password.主机host.端口

  • R语言时间序列中时间年、月、季、日的处理操作

    1.年 pt<-ts(p, freq = 1, start = 2011) 2.月 pt<-ts(p,frequency=12,start=c(2011,1)) frequency=12表示以月份为单位,start 表示时间开始点,start=c(2011,1) 表示从2011年1月开始 3.季度 pt <- ts(p, frequency = 4, start = c(2011, 1)) 4.天 pt<-ts(p,frequency=7,start=c(2011,1)) 用 ts

  • R语言matrix生成矩阵的方法

    主要介绍一下利用matrix函数和rep生成矩阵 在R语言中可以使用matrix()函数来创建矩阵,其语法格式如下: matrix(data=NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) 参数含义如下: data:矩阵的元素,默认为NA,即未给出元素值的话,各项为NA nrow:矩阵的行数,默认为1: ncol:矩阵的列数,默认为1: byrow:元素是否按行填充,默认按列: dimnames:以字符型向量表示的行名及列名. re

随机推荐