slam十四讲第二版 pdf_第二十四讲 R语言 卡方独立性检验

9addebe04c7fdca8e026607eb20a66ac.png

“独立性检验”验证从两个变量抽出的配对观察值组是否互相独立。

卡方独立性检验主要用于两个或两个以上因素多项分类的计数资料分析,也就是研究两类变量之间的关联性和依存性问题。

卡方独立性检验可以用于四个表的独立性检验,也可用于行x列表资料的独立性检验:

独立性检验一般采用列联表的形式记录观察数据。

四格表的独立性检验:又称为2*2列联表的卡方检验。四格表资料的独立性检验用于进行两个率或两个构成比的比较,是列联表的一种最简单的形式。

行x列表资料的独立性检验:又称为RxC列联表的卡方检验。行x列表资料的独立性检验用于多个率或多个构成比的比较

1.卡方检验基础知识

卡方检验检查列联表的行和列是否在统计上显着相关。

  • 原假设(H0):两变量相互独立/各组变量间相互独立/列联表的行和列变量是独立的。
  • 备择假设(H1):两变量相互不独立/各组变量间至少有两组相互不独立/行和列变量是相关的

对于表的每个单元格,我们必须在原假设下计算期望值。

对于给定的像元,期望值的计算如下:

c5323c3455e5c5949b84dd618e0481b8.png

卡方统计量计算如下:

d0b695864ea877531f6482237a775fa4.png
  • o是观测值
  • e是期望值

将计算出的卡方统计量与临界值(从统计表中获得)进行比较, 自由度df=(r−1)(c−1),p = 0.05。

  • r是列联表中的行数
  • c是列联表中的列数

如果计算的卡方统计量大于临界值,则得出结论,行变量和列变量不是彼此独立的。这意味着它们之间存在显着关联。

请注意,当每个类别中观察到的或预期的频率太小时,此检验无效。要求样本含量应大于40且每个格子中的理论频数不应小于5。

如果您想知道对总卡方值贡献最大的单元格,只需计算每个单元格的卡方统计量,找到最大的值即可:

6d52d5b8079ab989b3b23dbc078a4c63.png

上面的公式返回每个单元格的皮尔逊残差(r)(也被称为标准化残差)

绝对标准化残差最高的单元格对总卡方得分贡献最大。

2. 数据格式:列联表

我们将使用来自STHDA的housetasks数据集:http : //www.sthda.com/sthda/RDoc/data/housetasks.txt。

# 导入数据
file_path <- "http://www.sthda.com/sthda/RDoc/data/housetasks.txt"
housetasks <- read.delim(file_path, row.names = 1)
# head(housetasks)

数据的图像显示在下面:

853513a907db020e47e6076474b946c7.png

数据是一个列联表,其中包含13个家庭任务及其在这夫妇中的分布:

  • 行是不同的任务
  • 值是完成任务的频数
  • 列的内容分别是:
    • 仅由妻子
    • 两者中任意人
    • 仅由丈夫
    • 两人共同完成

3.图形显示列联表内容

列联表可以使用功能balloonplot() [在gplots包中] 可视化。此函数绘制图形矩阵,其中每个单元格包含一个点,其大小反映了相应组件的相对大小。

要执行以下R代码,您应该安装软件包gplotsinstall.packages(“ gplots”)

library("gplots")
# 将数据转换成表格
dt <- as.table(as.matrix(housetasks))
# 2. 作图
balloonplot(t(dt), main ="housetasks", xlab ="", ylab="",
            label = FALSE, show.margins = FALSE)

2bfa6a078a6e52151e698709baff9c30.png

请注意,默认情况下,行和列的总和分别打印在底部和右边距中。可以使用参数show.margins = FALSE隐藏这些值。

也可以将列联表作为马赛克图可视化。可以使用内置R包garphics中的函数mosaicplot()完成

library("graphics")
mosaicplot(dt, shade = TRUE, las=2,
           main = "housetasks")

6430743fd7260f6cda6d7edc366a08c6.png
  • shade表示是否为图形着色
  • las = 2表示产生垂直标签列

请注意,马赛克元素的表面面积反映了其值的相对大小。

  • 蓝色表示如果数据是随机的,则观测值高于预期值
  • 红色表示如果数据是随机的,则观察值低于预期值

从这个马赛克图中可以看出,在我们的示例中,家务Laundry,Main_meal,Dinner和breakfeast(蓝色)主要由妻子完成。

还有另一个名为vcd的程序包,可用于制作马赛克图(功能mosaic())或关联图(功能asoc())。

# install.packages("vcd")
library("vcd")
#仅绘制表的一部分
assoc(head(dt, 5), shade = TRUE, las=3)

ed724fbd4bb074ab391bbfb75d3b8e1c.png

4. 卡方检验的R实现

使用函数chisq.test()可以很容易地计算卡方统计量,如下所示:

chisq <- chisq.test(housetasks)
chisq

    Pearson's Chi-squared test
data:  housetasks
X-squared = 1944.5, df = 36, p-value < 2.2e-16

在示例中,行变量和列变量在统计上显着相关(p值 < 2.2e-16)。

可以从检测结果中提取观察到的和预期的计数,如下所示:

# 观察到的频数
chisq$observed
           Wife Alternating Husband Jointly
Laundry     156          14       2       4
Main_meal   124          20       5       4
Dinner       77          11       7      13
Breakfeast   82          36      15       7
Tidying      53          11       1      57
Dishes       32          24       4      53
Shopping     33          23       9      55
Official     12          46      23      15
Driving      10          51      75       3
Finances     13          13      21      66
Insurance     8           1      53      77
Repairs       0           3     160       2
Holidays      0           1       6     153
# 预期的频数
round(chisq$expected,2)
            Wife Alternating Husband Jointly
Laundry    60.55       25.63   38.45   51.37
Main_meal  52.64       22.28   33.42   44.65
Dinner     37.16       15.73   23.59   31.52
Breakfeast 48.17       20.39   30.58   40.86
Tidying    41.97       17.77   26.65   35.61
Dishes     38.88       16.46   24.69   32.98
Shopping   41.28       17.48   26.22   35.02
Official   33.03       13.98   20.97   28.02
Driving    47.82       20.24   30.37   40.57
Finances   38.88       16.46   24.69   32.98
Insurance  47.82       20.24   30.37   40.57
Repairs    56.77       24.03   36.05   48.16
Holidays   55.05       23.30   34.95   46.70

5. 行和列变量之间的独立性

如上所述,卡方总统计量为1944.456196。

皮尔逊残差可以从函数chisq.test()的输出中提取:

round(chisq$residuals, 3)
             Wife Alternating Husband Jointly
Laundry    12.266      -2.298  -5.878  -6.609
Main_meal   9.836      -0.484  -4.917  -6.084
Dinner      6.537      -1.192  -3.416  -3.299
Breakfeast  4.875       3.457  -2.818  -5.297
Tidying     1.702      -1.606  -4.969   3.585
Dishes     -1.103       1.859  -4.163   3.486
Shopping   -1.289       1.321  -3.362   3.376
Official   -3.659       8.563   0.443  -2.459
Driving    -5.469       6.836   8.100  -5.898
Finances   -4.150      -0.852  -0.742   5.750
Insurance  -5.758      -4.277   4.107   5.720
Repairs    -7.534      -4.290  20.646  -6.651
Holidays   -7.419      -4.620  -4.897  15.556

其中round()函数表示在显示输出时,显示小数点后几位(如“3”表示显示小数点后三位)。

我们可以使用corrplot包可视化皮尔逊残差:

library(corrplot)
corrplot(chisq$residuals, is.cor = FALSE)

e89b644a7adac2dff3ee7836eba32828.png

对于给定的单元格,圆圈的大小与单元格贡献量成正比。

标准化残差的符号对于解释行和列之间的关联非常重要,如下所述。

  1. 正残差为蓝色。单元格中的正值指定相应行和列变量之间的吸引(正相关)。
  • 在上图中,很明显,列Wife和行Laundry,Main_meal之间存在关联。
  • Husband和行Repairs之间有很强的正相关关系

2.负残差为红色。表示相应的行和列变量之间存在排斥(负相关)。例如,“Wife”列与“ Repairs ”行负相关(在这个案例中可解释为“不相关”)。“ Husbank”列与“ Laundry ”行和“ Main_meal ”行之间存在负相关。

给定单元格对总卡方得分的贡献(%)计算如下:

131f8b95c00875ee595b757767d6f2b0.png

r是单元格的残差

# 每一项单元格的贡献百分比(%)
contrib <- 100*chisq$residuals^2/chisq$statistic
round(contrib, 3)
            Wife Alternating Husband Jointly
Laundry    7.738       0.272   1.777   2.246
Main_meal  4.976       0.012   1.243   1.903
Dinner     2.197       0.073   0.600   0.560
Breakfeast 1.222       0.615   0.408   1.443
Tidying    0.149       0.133   1.270   0.661
Dishes     0.063       0.178   0.891   0.625
Shopping   0.085       0.090   0.581   0.586
Official   0.688       3.771   0.010   0.311
Driving    1.538       2.403   3.374   1.789
Finances   0.886       0.037   0.028   1.700
Insurance  1.705       0.941   0.868   1.683
Repairs    2.919       0.947  21.921   2.275
Holidays   2.831       1.098   1.233  12.445
# 贡献百分比的可视化
corrplot(contrib, is.cor = FALSE)

b3f0b51974c1f3d1e759985a8b11797d.png

每个单元格对总卡方值的相对贡献值说明了列联表中行与列之间依存关系的性质。

可以看出:

  1. “Wife”列与Laundry,Main_meal,Dinner密切相关
  2. “Husband”列与“Repairs”行密切相关
  3. 该列“Jointly”与“Holidays”行关联

从上图可以看出,对卡方的贡献最大的是Wife/Laundry(7.74%),Wife/Main_meal(4.98%),Husband/Repairs(21.9%),Jointly/Holidays(12.44%)。

这些单元格对总卡方得分的贡献约为47.06%,因此占了预期值和观察值之间的大部分差异来源。

这可以在可视化下一定程度上解释结果。当列联表很大时,通过这样的视觉图案来解释可能会很复杂。在这种情况下,一个单元格对总卡方值的贡献成为确定不独立性的一种有用方法。

6. 访问由chisq.test()函数的返回值

chisq.test()函数的结果是一个包含以下组件的列表:

  • statistic:卡方检验统计量的值。
  • parameter:自由度
  • p.value:测试的p值
  • observed:观察到的计数
  • expected:预期数量

用于获取这些值的R代码的格式如下:

chisq$p.value
chisq$estimate

参考内容:http://www.sthda.com

如果您觉得我说的对您有帮助,请点赞让我感到您的支持,您的支持是我写作最大的动力~

ijournal:高颜值的期刊检索网站,助您快速找到理想目标期刊(weixin小程序也上线了哦)

投必得:全专业中英文论文润色编辑助力您的论文快速发表,点击了解业务详情

a430a150cff8ea5528f76f02ba5b0ba2.png

专栏传送门:

投必得科研软件安装使用手册;投必得:SCI期刊介绍与选择;投必得,教你写论文;投必得统计分析大讲堂;投必得科研生活解忧杂货店

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值