在 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)
    → 根据模型对象生成 方差分析表,检验自变量对因变量的显著性