首页 > 解决方案 > How does R lm choose contrasts with interaction between a categorical and continuous variables?

问题描述

If I run lm with a formula like Y ~ X1 + X2:X1 + X3:X1 where X1 is continuous and X2,X3 are categorical, I get a contrast for both levels of X2, but not X3.

The pattern is that the first categorical interaction gets both levels but not the second.

library(tidyverse)
library(magrittr)
#> 
#> Attaching package: 'magrittr'
#> The following object is masked from 'package:purrr':
#> 
#>     set_names
#> The following object is masked from 'package:tidyr':
#> 
#>     extract

df = data.frame(Frivolousness = sample(1:100, 50, replace =T))
df %<>% mutate(
  Personality=sample(c("Bad", "Good"), 50, replace = T),
  Timing=ifelse(Frivolousness %% 2 == 0 & runif(50) > 0.2, "Early", "Late")
  )
df %<>% mutate(
  Enchantedness = 11 + 
    ifelse(Personality=="Good", 0.23, -0.052)*Frivolousness -
    1.3*ifelse(Personality=="Good", 1, 0) +
    10*rnorm(50)
  )
df %<>% mutate(
  Personality = factor(Personality, levels=c("Bad", "Good")),
  Timing = factor(Timing, levels=c("Early", "Late"))
)

lm(Enchantedness ~ Personality + Timing + Timing:Frivolousness + Personality:Frivolousness, df)
#> 
#> Call:
#> lm(formula = Enchantedness ~ Personality + Timing + Timing:Frivolousness + 
#>     Personality:Frivolousness, data = df)
#> 
#> Coefficients:
#>                   (Intercept)                PersonalityGood  
#>                      15.64118                      -10.99518  
#>                    TimingLate      TimingEarly:Frivolousness  
#>                      -1.41757                       -0.05796  
#>      TimingLate:Frivolousness  PersonalityGood:Frivolousness  
#>                      -0.07433                        0.33410

lm(Enchantedness ~ Personality + Timing + Personality:Frivolousness+ Timing:Frivolousness , df)
#> 
#> Call:
#> lm(formula = Enchantedness ~ Personality + Timing + Personality:Frivolousness + 
#>     Timing:Frivolousness, data = df)
#> 
#> Coefficients:
#>                   (Intercept)                PersonalityGood  
#>                      15.64118                      -10.99518  
#>                    TimingLate   PersonalityBad:Frivolousness  
#>                      -1.41757                       -0.05796  
#> PersonalityGood:Frivolousness       TimingLate:Frivolousness  
#>                       0.27614                       -0.01636

Created on 2020-02-15 by the reprex package (v0.3.0)

标签: rlm

解决方案


我认为它被删除的原因是如果它被包括在内,将会有完美的共线性。你真的应该把轻浮作为一个回归器本身也。然后,您将看到 R 只为您提供两种交互的一个级别的结果。


推荐阅读