在 R 里,如果你有一个 因子型变量,做回归或方差分析时需要把它转成数值型变量(即 虚拟变量 dummy variables*)。
这种转化规则由 对比编码(contrasts) 控制。
options(contrasts = c("contr.helmert", "contr.poly"))-
contrasts参数是一个长度 2 的向量:- 第 1 个元素:无序因子(unordered factor) 的默认对比编码方式
- 第 2 个元素:有序因子(ordered factor) 的默认对比编码方式
-
"contr.helmert":Helmert 对比编码(用前 k−1 个水平与之后的平均值作比较) -
"contr.poly":Polynomial 对比编码(适用于有序因子,生成多项式趋势)
作用:
这条语句把 R 的全局默认对比编码方式改成:
- 无序因子 → Helmert 编码
- 有序因子 → 多项式编码
这样,在后续的 aov()、lm()、glm() 里,如果你没有手动指定对比方式,就会用这个设置。
📌 注意:
op <-是为了保存原来的options,你可以用options(op)恢复默认设置。
df <- data.frame(
y = c(5.2, 5.8, 6.1, 6.3, 6.0, 6.8, 7.0, 6.9, 7.1),
group = factor(rep(c("A", "B", "C"), each = 3))
)
op <- options(contrasts = c("contr.helmert", "contr.poly"))
oneway <- aov(y ~ group, data = df)
anova(oneway)输出可能是:
Df Sum Sq Mean Sq F value Pr(>F)
group 2 2.345 1.1725 8.65 0.015 *
Residuals 6 0.812 0.1354
options(contrasts = c("contr.helmert", "contr.poly"))
→ 设置默认因子对比编码方式,影响模型设计矩阵构造方式anova(oneway)
→ 根据模型对象生成 方差分析表,检验自变量对因变量的显著性