原文链接:初探R之数据结构和列联表
https://mp.weixin.qq.com/s/T3C1vz5_TDIMK59JzVPy5Q从问卷研究或是实验研究中获得数据后,可以通过专门的函数导入到R中,R全面支持各种类型的数据来源,如Excel文件、SPSS文件、数据库等。而R又有哪些数据结构可以用来存储各式各样的数据呢,这是本文要学习的重点。列联表是数据分析的基础,我们以二维列联表为例演示了卡方独立性检验的操作。
数据结构
R中的数据结构有向量、矩阵、数组、数据框、列表等,我们一一介绍。
向量与标量是相对应的,标量只有一个元素,而向量的元素数目是大于或等于2个,可以理解为多维空间中的一个点。创建向量的代码如v<-c(1,2,3,5),c()函数用于结合同一类型的数据来生成向量。向量元素的获取可以有几种方式,如v[1]、v[c(1,4)]、v[c(1:3)],其中(1:3)表示生成连续的数字串,等同于(1,2,3)。
矩阵是二维数组,分别作为行变量和列变量,其中每个元素的数据类型要一致,如数值型、字符型、逻辑型。创建矩阵的代码如m<-matrix(1:10,nrow=2),矩阵中共有10个元素(数字1到10),行数为2,相应列数为5,默认是按列的填充方式(见下图)。

数组是矩阵的自然扩展,由二维变成了多维数据。创建代码如a<-array(c(1:24),c(2,3,4)),三个数组的长度分别为2、3、4,共有24个数据来填充。
数据框是R中最常处理的数据结构,它允许不同的列拥有不同的数据类型。创建代码如df<-data.frame(c1,c2,c3),df包含3列数据,c1、c2和c3的数据类型可以不同,例如c1=c(1,2),c2=c(TRUE,FALSE), c3=c("a","b")。
列表形式最为灵活,因此有时显得复杂。它的创建代码如l<-list(n1=o1,n2=o2),n1和n2是列表里对象的名称,列表中每个对象(Object1、Object2...)的类型可以随意,前面所讲几个类型、甚至可以是嵌套的列表。访问列表里的对象可以使用下标或是对象名,如l[[1]]、l[["id"]]。
以上介绍的数据结构可以用下图来直观表示(来自参考文章1)。

还有一种数据结构在R中很重要——因子,它包括名义型变量和有序型变量,数据的分析方式和呈现顺序都跟它有关。我们使用factor()函数可以把字符类型的数据列转为因子类型,例如原有数据列赋值status <- c("bad", "normal", "good", "normal"),转换操作代码status <- factor(status)。因子变量以整数向量的形式存储类别值,这里是c(1,3,2,3),因为默认是按字母顺序排列,即c("bad", "good","normal"),在其内部有映射向量表示整数与名称之间的关系。
如要转换成有序型变量,需要加上ordered=TRUE选项,数据分析时则自动会选用匹配的方法。还可以使用levels选项指定想要的排序,如levels=c("bad", "normal", "good")。
列联表
一维、二维和多维列联表的形式有点类似对应的向量、矩阵和数组,只是每个元素是单个分类变量或多个分类变量交叉重叠之后的频数,因此列联表本质上是一种频次分布表。
我们来看一个关节炎研究的例子。它是一个对照实验,分为安慰剂组和药物治疗组,它有一个指标是改善程度,有三个水平:没有改善、部分改善、明显改善。创建列联表最简单的方式是使用table()函数,或是使用带有公式风格的xtabs()函数,prop.table()函数能够将频数转换成比例,代码和结果如下。
library(vcd)
counts <- table(Arthritis$Treatment,Arthritis$Improved)
mytable <-xtabs(~Treatment+Improved,Arthritis)
# 计算边际和
addmargins(mytable)
# 按第2个变量的不同水平统计比例
prop.table(mytable,2)


我们看到明显改善的病人中有75%的人接受了药物治疗,不过这里的差异是否显著,是需要通过卡方独立性检验进行分析的。这里的前提条件是满足的,每一格的期望频数不能小于1、小于5的不能超过总数的1/5(这里最小值为14*43/84=7.17)。
我们把这里的二维列联表数据看作是多项分布的一个样本,通过计算每一格的期望值,然后假设分类变量之间不存在联系、是相互独立的,便可以采用χ2拟合优度对其独立性假设进行显著性检验。卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,偏离程度决定卡方值的大小,卡方值越大表示变量之间相互独立的可能性越小。以下代码显示,当自由度为2时,卡方值13.055已进入p<0.01的拒绝区域,因此两变量独立性假设不成立。

参考文章:
- [图书]R语言实战第二章创建数据集
- 数理统计复习笔记七——列联表的独立性检验
https://blog.csdn.net/TSzero/article/details/119208960

1379

被折叠的 条评论
为什么被折叠?



