R语言-如何实现卡方检验

卡方检验

在数据统计中,卡方检验是一种很重要的方法。

通常卡方检验的应用主要为:

1、 卡方拟合优度检验

2、卡方独立性检验

本文主要通过使用自己编程的方法实现相关检验。

卡方拟合优度检验

理论:

1、我们先做出0假设:H0:总体服从假定的理论分布

2、我们再构造一个统计量:

3、当n充分大时

4、我们得到该拒绝域

代码

#Chi_square Goodness Of Fit Test
#函数说明:
#n为所得样本数据;p为理论概率
#alpha为置信水平,df为自由度
cgoft <- function(n,p){
  N <- length(n)#N为样本总容量
  sumn <- sum(n)
  XX <- 0
  for (i in 1:N) {
    XX <- XX +(n[i]-sumn*p[i])^2/(sumn*p[i])
    print(XX)
  }
  return(XX)
}
c <- qchisq(1-aplha,df)

卡方独立性检验

理论:

1、我们先做出0假设:H0:二者没有相关关系

2、我们再构造一个统计量:

3、当n充分大时

4、我们得到该拒绝域

代码

#Chi_square Independence Test
#函数说明:
#n为样本数据,表格按行排列,写成向量形式;row为表格行数
#alpha为置信水平,df为自由度
cit <- function(n,row){
  N <- length(n)
  sumn <- sum(n)
  n1 <- matrix(n,nrow=row,byrow = TRUE)
  column <- N/row
  pi <- c()
  for (i in 1:row) {
    pi[i] <- sum(n1[i,])/sumn
  }
  pj <- c()
  for (j in 1:column) {
    pj[j] <- sum(n1[,j])/sumn
  }
  XX <- 0
  print(pj)
  for (i in 1:row) {
    for (j in 1:column) {
      XX <- XX + (n1[i,j]-sumn*pi[i]*pj[j])^2/(sumn*pi[i]*pj[j])
    }
  }
  return(XX)
}
c <- qchisq(1-aplha,df)

补充:R语言实施皮尔森卡方检验

说明

检查两个数据集中的类别分量是否不同,在统计中会碰到离散型数据与计数数据,比如性别分男、女,某个问题的态度分为赞成、反对,成绩可分优良差,能力可分高中低。对这类数据的统计处理的假设检验一般用计数数据的统计方法进行非参数检验。

卡方检验主要用于两个方面,一是对总体分布进行拟合性检验,检验观查次数是否与某种理论次数相一致。

二是独立性检验,用于检验两组或者多组资料相互关联还是彼此独立。

操作示例(独立性检验)

#mtcars$am有0,1两个因素表示行,mtcars$gear 有3,4,5三个因素表示列
library(stats)
data("mtcars)
ftable = table(mtcars$am,mtcars$gear)
ftable = table(mtcars$am,mtcars$gear)
ftable = table(mtcars$am,mtcars$gear)
> ftable
     3  4  5
  0 15  4  0
  1  0  8  5
#绘制列联表的马赛克图
mosaicplot(ftable,main ="number of forward gears within automatic and manual cars",color = TRUE )

对列联表执行卡方检验,以检测自动档与手动档汽车前驱的齿轮数目是否相同:

chisq.test(ftable)
    Pearson's Chi-squared test
data:  ftable
X-squared = 20.945, df = 2, p-value = 2.831e-05
Warning message:
In chisq.test(ftable) : Chi-squared近似算法有可能不准

总结

卡方检验用于发现两个类别变量之间是否存在某种关联,最适用于数组中非成组信息的检验。使用条件:1.数据都为类别数据2.变量包括两个或者两个以上独立数据组。

H0:变量A与变量B相互独立(gear数目相同)

H1:变量A与变量B相互不独(gear数目不相同)

由图知:自动档的gear要小于手动档的gear.p-value<0.05,拒绝H0,接收H1.

样例输出了一个警告信息,此次卡方检验的结果可能不正确,这是因为列联表的个数小于5。

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

(0)

相关推荐

  • R语言wilcoxon秩和检验及wilcoxon符号秩检验的操作

    说明 wilcoxon秩和及wilcoxon符号秩检验是对原假设的非参数检验,在不需要假设两个样本空间都为正态分布的情况下,测试它们的分布是否完全相同. 操作 #利用mtcars数据 library(stats) data("mtcars") boxplot(mtcars$mpg~mtcars$am,ylab='mpg',names = c('automatic','manual)) #执行wilcoxon秩和检验验证自动档手动档数据分布是否一致 wilcox.test(mpg~am,

  • R语言 实现选取某一行的最大值

    可以先自定义函数 也可以用的时候再定义. > mat <- matrix(c(1:3,7:9,4:6), byrow = T, nc = 3) > mat [,1] [,2] [,3] [1,] 1 2 3 [2,] 7 8 9 [3,] 4 5 6 > apply(mat, 2, function(x){order(x, decreasing=T)[1]}) # 查找每一列 [1] 2 2 2 > apply(mat, 1, function(x){order(x, dec

  • R语言实现用cbind合并两列数据

    我有两个数据文件,分别只有一列,这两列数据行数一行,我想把这两列合并到一个数据文件中,方便使用. 我的两个数据文件分别是1.txt,2.txt,保存后的文件名是3.txt. // 代码如下 gow1<-read.table("1.txt",header = FALSE) gow2<-read.table("2.txt",header = FALSE) View(gow1) View(gow2) gow<-cbind(gow1,gow2) View(

  • R语言ARMA模型的参数选择说明

    AR(p)模型与MA(q)实际上是ARMA(p,q)模型的特例.它们都统称为ARMA模型,而ARMA(p,q)模型的统计性质也是AR(p)与MA(q)模型的统计性质的有机组合. 平稳系列建模 假如某个观察值序列通过序列预处理可以判定为平稳非白噪声序列,就可以利用ARMA模型对序列建模. 1.求出该观察值序列的样本自相关系数(ACF)与偏相关系数(PACF的值. 2.根据根样本自相关系数和偏自相关系数的性质,选择阶数适当的ARMA(p,q)模型进行拟合. 3.估计模型中未知参数的值 4.检验模型的

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

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

  • 解决R语言中install_github中无法安装遇到的问题

    首先,让我们来进入常规步骤 我安装的是recharts包,正常的写法呢,就是以下这个样子: install.packages("devtools") #devtools::install_github("madlogos/recharts") 第一个问题: 然而对于今天的我来说,那就太天真了,首先踏入的第一个坑: 无法打开URL'http://yihui.name/xran/src/contrib/PACKAGES' Warning in install.packa

  • R语言-使用ifelse进行数据分组

    数据分组,根据数据分析对象的特征,按照一定的数值指标,把数据分析对象划分为不同的区间部分来研究,以揭示内在的联系和规律性: 在R中,我们常用ifelse函数来进行数据的分组,跟excel中的if函数是同一种用法. ifelse(condition,TRUE,FALSE) > data <- read.table('1.csv', sep='|', header=TRUE); > > level <- ifelse( + data$cost<=20, "(0,2

  • R语言中cbind、rbind和merge函数的使用与区别

    cbind: 根据列进行合并,即叠加所有列,m列的矩阵与n列的矩阵cbind()最后变成m+n列,合并前提:cbind(a, c)中矩阵a.c的行数必需相符 rbind: 根据行进行合并,就是行的叠加,m行的矩阵与n行的矩阵rbind()最后变成m+n行,合并前提:rbind(a, c)中矩阵a.c的列数必需相符 > a <- matrix(1:12, 3, 4) > print(a) [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,

  • R语言-如何实现卡方检验

    卡方检验 在数据统计中,卡方检验是一种很重要的方法. 通常卡方检验的应用主要为: 1. 卡方拟合优度检验 2.卡方独立性检验 本文主要通过使用自己编程的方法实现相关检验. 卡方拟合优度检验 理论: 1.我们先做出0假设:H0:总体服从假定的理论分布 2.我们再构造一个统计量: 3.当n充分大时 4.我们得到该拒绝域 代码 #Chi_square Goodness Of Fit Test #函数说明: #n为所得样本数据:p为理论概率 #alpha为置信水平,df为自由度 cgoft <- fun

  • R语言关于卡方检验实例详解

    卡方检验是一种确定两个分类变量之间是否存在显着相关性的统计方法. 这两个变量应该来自相同的人口,他们应该是类似 是/否,男/女,红/绿等. 例如,我们可以建立一个观察人们的冰淇淋购买模式的数据集,并尝试将一个人的性别与他们喜欢的冰淇淋的味道相关联. 如果发现相关性,我们可以通过了解访问的人的性别的数量来计划适当的味道库存. 语法 用于执行卡方检验的函数是chisq.test(). 在R语言中创建卡方检验的基本语法是 chisq.test(data) 以下是所使用的参数的描述 data是以包含观察

  • R语言数据预处理操作——离散化(分箱)

    一.项目环境 开发工具:RStudio R:3.5.2 相关包:infotheo,discretization,smbinning,dplyr,sqldf 二.导入数据 # 这里我们使用的是鸢尾花数据集(iris) data(iris) head(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.

  • R语言的xtabs函数实例讲解

    今天在做一个列联表独立性检验的时候,总是无法处理好要求的数据类型,偶然的机会,看到了xtabs()函数,感觉很适合用来做列联表,适合将一列数据转换成列联表. shifou <- c("yes","yes","no","no") xinbie <- c("nan","nv","nan","nv") freq <- c(34,38,2

  • R语言差异检验:非参数检验操作

    非参数检验是在总体方差未知或知道甚少的情况下,利用样本数据对总体分布形态进行推断的方法.它利用数据的大小间的次序关系(秩Rank),而不是具体数值信息,得出推断结论. 它是参数检验所需要的某些条件不满足时所使用的方法. 和参数检验相比,非参数检验的优势如下: 稳健性.对总体分布的条件要求放宽 对数据类型要求不严格,适用有序分类变量 适用范围广 劣势: 没有利用实际数值,损失了部分信息,检验的有效性较差. 非参数性检验的方法非常多,基于方法的检验功效性角度,本文只涉及 双独立样本:Mann-Whi

  • 简述:我为什么选择Python而不是Matlab和R语言

    做数据分析.科学计算等离不开工具.语言的使用,目前最流行的数据语言,无非是MATLAB,R语言,Python这三种语言,但今天小编简单总结了python语言的一些特点及平常使用的工具等. 为什么Python比MATLAB.R语言好呢? 其实,这三种语言都很多数据分析师在用,但更推荐python,主要是有以下几点: 1.python易学.易读.易维护,处理速度也比R语言要快,无需把数据库切割: 2.python势头猛,众多大公司需要,市场前景广阔:而MATLAB语言比较局限,专注于工程和科学计算方

  • Python与R语言的简要对比

    数据挖掘技术日趋成熟和复杂,随着互联网发展以及大批海量数据的到来,之前传统的依靠spss.SAS等可视化工具实现数据挖掘建模已经越来越不能满足日常需求,依据美国对数据科学家(data scientist)的要求,想成为一名真正的数据科学家,编程实现算法以及编程实现建模已经是必要条件:目前很多从事数据挖掘工作的人,大多都是出身非计算机专业,本身对编程基础比较低,所以找到一门快速上手而又高效的编程语言是至关重要的,好的工具和编程语言可以起到事半功倍的效果. 目前在数据挖掘算法方面用的最多的编程语言有

  • R语言 vs Python对比:数据分析哪家强?

    什么是R语言? R语言,一种自由软件编程语言与操作环境,主要用于统计分析.绘图.数据挖掘.R本来是由来自新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼开发(也因此称为R),现在由"R开发核心团队"负责开发.R基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行.R的语法是来自Scheme. R的源代码可自由下载使用,亦有已编译的可执行文件版本可以下载,可在多种平台下运行,包括UNIX(也包括FreeBSD和Linux).W

  • R语言利用loess如何去除某个变量对数据的影响详解

    R语言介绍 R语言是用于统计分析,图形表示和报告的编程语言和软件环境. R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大学创建,目前由R语言开发核心团队开发. R语言的核心是解释计算机语言,其允许分支和循环以及使用函数的模块化编程. R语言允许与以C,C ++,.Net,Python或FORTRAN语言编写的过程集成以提高效率. R语言在GNU通用公共许可证下免费提供,并为各种操作系统(如Linux,Windows和Mac)提供预编译的二进制版本. R是一个在GNU

  • 详解R语言中生存分析模型与时间依赖性ROC曲线可视化

    R语言简介 R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. 人们通常使用接收者操作特征曲线(ROC)进行二元结果逻辑回归.但是,流行病学研究中感兴趣的结果通常是事件发生时间.使用随时间变化的时间依赖性ROC可以更全面地描述这种情况下的预测模型. 时间依赖性ROC定义 令 Mi为用于死亡率预测的基线(时间0)标量标记. 当随时间推移观察到结果时,其预测性能取决于评估时间 t.直观地说,在零时间测量的标记值应该

随机推荐