防风草模型上的 3 型方差分析

问题描述 投票:0回答:1

假设我创建了一个包含 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
方法创建的模型获得相同的结果?

r tidyverse anova tidymodels r-parsnip
1个回答
0
投票

显然,在配方中处理模型公式并不是一个好的做法。最好只为预处理步骤保留配方。 模型公式(包括引入交互项和虚拟变量)最好在工作流程的

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)

© www.soinside.com 2019 - 2024. All rights reserved.