• Java实现卡方检验


    前言

    关于卡方分布的介绍,可以通过与皮尔逊相关比较,能有一个更清晰的认识。

    引用《行为科学统计》一书中的话:

    独立性卡方检验与皮尔逊相关都是用来评估两个变量间关系的统计技术。从研究中得到的数据类型,决定了应该使用着两个统计过程中的哪一个。
    当两个变量都由数值组成时,应使用皮尔逊相关评估变量间的关系;另一个方面,如果数据是由将个体归类到类别中而得到的,应使用独立性卡方检验。
    
    • 1
    • 2

    举例来说:

    1.研究人员想要知道身高和年龄的关系,通过样本最终会的到两组数值,分别对应身高和年龄这两个变量,此时应该使用皮尔逊相关,因为这两个变量:身高和年龄,对应的是具体的数值。

    2.研究人员想要知道吃辣程度和省份的关系,通过样本只能得到频数统计,因为‘吃辣程度’和‘省份’对应的是类别,而没用数值,所以此时就应该使用卡方检验

    卡方分布的特征

    卡方值是通过计算期望值和真实值差值的平方和得来的,因此它永远都是大于等于0的值,这同时说明卡方分布是正偏态的。
    卡方 = ∑ ( d − e ) 2 e ,其中 d 代表真实值, e 为期望值 卡方={\sum\frac{(d-e)^2}{e}} ,其中d代表真实值,e为期望值 卡方=e(de)2,其中d代表真实值,e为期望值
    从公式也可以看出,卡方值越大,说明差异性越大,在卡方分布上就越靠近右侧,那么它的临界区域就位于卡方分布的右侧,因此卡方检验也是个单侧检验

    例子数据

    150个10岁儿童的样本的自尊与学习成绩的频数分布:

    自尊水平-高自尊水平-中自尊水平-低
    学习成绩-高173211
    学习成绩-低134334
    代码实现
    maven
    	
    	
    		org.apache.commons
    		commons-math3
    		3.6.1
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    计算方法
    
    package com.math.statistics;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.commons.math3.distribution.ChiSquaredDistribution;
    
    /***
     * 卡方检验
     * @author miaoyibo
     *
     */
    public class ChiSquaredTest {
    	
    	private double[][] data;
    	
    	private int free;
    
    	ChiSquaredDistribution cs;
    	
    	public ChiSquaredTest(double[][] data) {
    		this.data = data;
    		free=(data.length-1)*(data[0].length-1);
    		cs=new ChiSquaredDistribution(free);
    	}
    	
    	public double calculateChisquare() {
    		double sum=0;
    		Map col_data=new HashMap<>();
    		Map row_data=new HashMap<>();
    		for(int i=0;i data, int key, double v) {
    		Double d1 = data.get(key);
    		if(d1!=null) {
    			data.put(key, d1+v);
    		}else {
    			data.put(key, v);
    		}
    	}
    	
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    例子数据结果
    public static void main(String[] args) {
    		double[][] data= {{17,32,11},{13,43,34}};
    		ChiSquaredTest ct=new ChiSquaredTest(data);
    		//卡方值
    		System.out.println(ct.calculateChisquare());
    		//P值
    		System.out.println(ct.getPValue());
    
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    参考

    [1]《行为科学统计》

    [2] https://javadoc.io/doc/org.apache.commons/commons-math3/latest/index.html

  • 相关阅读:
    Filter过滤器
    2022年,你的数据库还没有上云吗?
    接口相关注解组合
    Unity Input System最简单使用
    在IDEA中使用Git
    ruoyi自动生成代码步骤
    vue2 - 基于Export2Excel.js导出Excel案例(js-xlsx插件二次封装使用)
    动态链接库Dll的编写与使用
    MySQL十种锁,一篇文章带你全解析
    单例模式--Java
  • 原文地址:https://blog.csdn.net/miaoyibo12/article/details/127861904