如何在R中使用虚拟变量进行Pearson相关性检验?
作业得分与主题领域的Pearson相关系数计算(手动虚拟变量方式)
我是R语言新手,想分析作业得分score和所选主题领域area(包含Algebra、Calculus、Geometry等类别)之间的Pearson相关系数。现有数据框如下:
sc.ar <- structure(list(area = structure(c(1L, 5L, 5L, 2L, 4L, 4L, 1L, 6L, 1L, 2L, 1L, 3L, 3L, 5L, 2L, 2L, 2L, 3L, 4L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 5L, 2L, 5L, 5L, 5L, 1L, 2L, 2L, 3L, 4L, 4L, 2L, 3L, 4L, 4L, 5L, 5L, 2L, 3L, 4L, 4L, 4L, 5L), levels = c("Algebra", "Calculus", "Geometry", "Modelling", "Probability", "Other"), class = "factor"), score = c(10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 20, 20, 20, 7, 9, 9)), class = "data.frame", row.names = c(NA, -49L))
我已经试过用summary(lm(formula = score ~ area, data = sc.ar))跑结果,但看不懂。我的目标是手动创建虚拟变量,用cor()函数完成相关性计算。
具体操作步骤
- 手动创建虚拟变量
area是分类变量,没法直接和连续的score计算Pearson相关,得把每个类别转成0/1的虚拟变量——选Algebra作为基准类别,其他类别和它对比:
# 给每个非基准类别创建虚拟变量 sc.ar$calc <- ifelse(sc.ar$area == "Calculus", 1, 0) sc.ar$geo <- ifelse(sc.ar$area == "Geometry", 1, 0) sc.ar$mod <- ifelse(sc.ar$area == "Modelling", 1, 0) sc.ar$prob <- ifelse(sc.ar$area == "Probability", 1, 0) sc.ar$other <- ifelse(sc.ar$area == "Other", 1, 0)
- 计算Pearson相关系数
现在可以用cor()函数分别计算每个虚拟变量和score的相关系数,也可以直接生成完整的相关矩阵:
# 单个变量逐一计算 cor(sc.ar$score, sc.ar$calc, method = "pearson") cor(sc.ar$score, sc.ar$geo, method = "pearson") cor(sc.ar$score, sc.ar$mod, method = "pearson") cor(sc.ar$score, sc.ar$prob, method = "pearson") cor(sc.ar$score, sc.ar$other, method = "pearson") # 生成包含所有目标变量的相关矩阵 cor_matrix <- cor(sc.ar[, c("score", "calc", "geo", "mod", "prob", "other")], method = "pearson") print(cor_matrix)
- 结果解读
这里的Pearson相关系数属于点二列相关(Pearson相关的特例,适用于连续变量和二分变量的关联):
- 正数表示该类别得分整体比基准类别(Algebra)高
- 负数表示该类别得分整体比Algebra低
- 绝对值越接近1,变量间的线性关联越强
另外,你之前用lm()得到的系数,本质是各类别相对于Algebra的得分均值差异,和这里的相关系数是同一线性关系的不同表达形式。
内容的提问来源于stack exchange,提问作者MrBgarles
相关产品推荐
相关产品推荐

