假设我创建了一个包含 2 个预测变量的
lm
模型,其中至少一个是分类变量,并且还涉及一个交互项。现在我还想获得整体交互项的显着性水平。为此,我只需使用 3 型方差分析
在此示例中,我想获取 Petal.Length:Species
的显着性水平
lm(Sepal.Length ~ Petal.Length + Species + Petal.Length:Species, data = iris) %>%
car::Anova(type = 3)
但是,这种方法似乎不适用于防风草模型:
rec <-
recipe(Sepal.Length ~ Petal.Length + Species, data = iris) %>%
step_interact(terms = ~ Species:Petal.Length)
lm_spec <-
linear_reg() %>%
set_engine("lm")
wf_2p_int <-
workflow() %>%
add_recipe(rec) %>%
add_model(lm_spec) %>%
fit(iris)
wf_2p_int %>%
extract_fit_engine() %>%
car::Anova(type = 3)
是否有任何直接的方法可以为通过
tidymodels
方法创建的模型获得相同的结果?
显然,在配方中处理模型公式并不是一个好的做法。最好只为预处理步骤保留配方。 模型公式(包括引入交互项和虚拟变量)最好在工作流程的
add_model()
步骤中处理。
使用step_interaction()处理配方中的交互会创建虚拟变量(当交互涉及至少一个分类变量时)或一个矩阵(2个数值变量),然后将其用于加法模型中。尽管这在数学上是正确的,但模型拟合对象(“lm”)将具有明显的附加模型公式(它没有任何交互项
:
)
如果您希望获得交互项的整体重要性而不是逐级获取,car::Anova()
需要检测公式中的交互项(此处为Species:Petal.Length
)
所以我会再次重写语法,这次在工作流程的
add_model()
步骤中处理模型公式:
rec <-
recipe(Sepal.Length ~ Petal.Length + Species, data = iris)
lm_spec <-
linear_reg() %>%
set_engine("lm")
wf_2p_int <-
workflow() %>%
add_recipe(rec) %>%
add_model(lm_spec, formula = Sepal.Length ~ Petal.Length + Species + Petal.Length:Species) %>%
fit(iris)
wf_2p_int %>%
extract_fit_engine() %>%
car::Anova(type = 3)