运用卡方检验(独立性检验)来分析问卷的两个问题之间的关联性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jining11/article/details/81750225

卡方检验是以χ2分布为基础的一种常用假设检验方法,它的零假设H0是:观察频数与期望频数没有差别。

该检验的基本思想是:首先假设H0成立,基于此前提计算出χ2值,它表示观察值与理论值之间的偏离程度。根据χ2分布及自由度可以确定在H0假设成立的情况下获得当前统计量及更极端情况的概率P。如果P值很小(一般认为是小于5%),说明观察值与理论值偏离程度太大,应当拒绝零假设,表示比较资料之间有显著差异;否则就不能拒绝零假设,尚不能认为样本所代表的实际情况和理论假设有差别。

χ2是观察频数与期望频数之间距离的一种度量指标,也是假设成立与否的度量指标。如果χ2值“小”,研究者就倾向于不拒绝H0;如果χ2值大,就倾向于拒绝H0。至于χ2在每个具体研究中究竟要大到什么程度才能拒绝H0,则要借助于卡方分布求出所对应的P值来确定。

首先先来看一下原始的问卷:

每个选项对应Excel表中的数据格式分别是1、 2、 3···

首先设法建立列联表

library(dplyr)
library(ggplot2)
survey <- read.csv("1.csv")
degree <- c('A.十分期待', 'B.比较期待', 'C.期待', 'D.无感觉', 'E.不期待')
time <- c('A.1小时以内', 'B.1~2小时', 'C.2~3小时', 'D.3~4小时', 'E.无所谓')
table1 <- survey %>% select(X18.您对这门课的期待程度, X22.您期望每周用于完成本课程作业的时间是)
names(table1)[1] = '期待程度'
names(table1)[2] = '花费时间'
table1[,1] = degree[table1[,1]]
table1[,2] = time[table1[,2]]
table1 %>% table

 table1为:

            花费时间
期待程度     A.1小时以内 B.1~2小时 C.2~3小时 D.3~4小时 E.无所谓
  A.十分期待          12        29        21         6        7
  B.比较期待           6        15         9         1        1
  C.期待               3         2         1         0        1
  D.无感觉             0         1         0         0        0

没有人选不期待(这个选项听起来太冷漠了),所以就没有显示出来。为什么要在前面加上ABC呢,因为不加的效果就像下面一样,由于列联表行和列的向量是按字典序排列的,因而毫无逻辑顺序。

                        花费时间
            期待程度     1~2小时 1小时以内 2~3小时 3~4小时 无所谓
                比较期待      15         6       9       1      1
                期待           2         3       1       0      1
                十分期待      29        12      21       6      7
                无感觉         1         0       0       0      0

画一个对比图。

table1 %>% as.data.frame %>% ggplot(aes(x = 期待程度, y = 1, fill = 花费时间)) + geom_bar(stat = 'identity') + 
ylab('人数') + 
labs(title = "对比图")+
theme(plot.title=element_text(hjust=0.5))

然后简单粗暴地检验独立性。

table1 %>% table %>% chisq.test
	Pearson's Chi-squared test

data:  .
X-squared = 7.9067, df = 12, p-value = 0.7924

Warning message:
In chisq.test(.) : Chi-squared approximation may be incorrect

结果是期待程度和花费时间是独立的。但是有报错是怎么回事。哦,原来卡方检验是有条件的。

卡方分布本身是连续型分布,但是在分类资料的统计分析中,显然频数只能以整数形式出现,因此计算出的统计量是非连续的。只有当样本量比较充足时,才可以忽略两者的差异,否则将可能导致较大的偏差具体而言,一般认为对于卡方检验中的每一个单元格,要求其最小期望频数均大于1,且至少有4/5的单元格期望频数大于5,此时使用卡方分布计算出的概率值才是准确的。如果数据不符合要求,可以采用确切概率法进行概率的计算。

四格表资料的卡方检验:用于进行两个率或两个构成比的比较,要求样本含量应大于40且每个格子中的理论频数不应小于5。当样本含量大于40但理论频数有小于5的情况时卡方值需要校正,当样本含量小于40时只能用确切概率法计算概率。

行×列表资料的卡方检验:用于多个率或多个构成比的比较,要求每个格子中的理论频数T均大于5或1<T<5的格子数不超过总格子数的1/5。当有T<1或1<T<5的格子较多时,可采用并行并列、删行删列、增大样本含量的办法使其符合行×列表资料卡方检验的应用条件。而多个率的两两比较可采用行×列表分割的办法。

这样看来,我必须要调整一下table了。

经过不断尝试,我发现table要一直化简到这样才可以:

table1 <- subset(table1, 期待程度!= 'D.无感觉'&期待程度!= 'C.期待'&花费时间!='E.无所谓'&花费时间!='D.3~4小时')
table1 %>% table
            花费时间
期待程度     A.1小时以内 B.1~2小时 C.2~3小时
  A.十分期待          12        29        21
  B.比较期待           6        15         9

画出的图表是这样的:

> table1 %>% table %>% chisq.test

	Pearson's Chi-squared test

data:  .
X-squared = 0.14119, df = 2, p-value = 0.9318

大体可以看出,在选定的数据集下,期待程度是独立的属性。

但这样还有许多的数据没有用上,那有没有什么办法来整体分析一下这些属性呢?

我想到了将数据放大这种方案。

table2 <- table1 %>% table
table2 = table2*500
table2[table2==0] = 5
> table2
            花费时间
期待程度     A.1小时以内 B.1~2小时 C.2~3小时 D.3~4小时 E.无所谓
  A.十分期待        6000     14500     10500      3000     3500
  B.比较期待        3000      7500      4500       500      500
  C.期待            1500      1000       500         5      500
  D.无感觉             5       500         5         5        5
 table2 %>% chisq.test

	Pearson's Chi-squared test

data:  .
X-squared = 3873.7, df = 12, p-value < 2.2e-16

从上图可以看出,p值非常小,可以得出期待程度是非独立的这一结论。

小tips:

  • alt+-可以召唤 <-
  • ctrl+shift+m可以召唤 %>%

猜你喜欢

转载自blog.csdn.net/jining11/article/details/81750225