R - 在回归中仅与一个因子水平相互作用

时间:2013-02-18 02:45:12

标签: r lm

在回归模型中,是否可以仅包含一个因子的虚拟变量的交互?例如,假设我有:

x: numerical vector of 3 variables (1,2 and 3)
y: response variable
z: numerical vector

是否可以构建如下模型:

y ~ factor(x) + factor(x) : z

但仅包含与X级别的互动?我意识到我可以为x的每个级别创建一个单独的虚拟变量,但是如果可能的话我想简化一些事情。

非常感谢任何输入!

4 个答案:

答案 0 :(得分:3)

您遗漏的一个关键点是,当您看到x2:z之类的重要影响时,这并不意味着xz时与x == 2互动},这意味着 x == 2x == 1 之间的差异(或者您的参考级别)与z的交互。它不是与x进行交互的z级别,而是为x设置的对比之一。

因此对于具有默认治疗对比的3级因子:

df <- data.frame(x = sample(1:3, 10, TRUE), y = rnorm(10), z = rnorm(10))
df$x <- factor(df$x)
contrasts(df$x)
  2 3
1 0 0
2 1 0
3 0 1

如果你真的认为只有第一个对比很重要,你可以创建一个新的变量,将x == 2x == 1进行比较,并忽略x == 3

df$x_1vs2 <- NA
df$x_1vs2[df$x == 1] <- 0
df$x_1vs2[df$x == 2] <- 1
df$x_1vs2[df$x == 3] <- NA

然后使用它运行回归:

lm(y ~ x_1vs2 + x_1vs2:z)

答案 1 :(得分:0)

X <- data.frame(x = sample(1:3, 10, TRUE), y = rnorm(10), z = rnorm(10))
lm(y ~ factor(x) + factor(x):z, data=X)

这是你想要的吗?

答案 2 :(得分:0)

这样的事情可能就是你所需要的:

y~factor(x)+factor(x=='SomeLevel'):z

答案 3 :(得分:0)

如果x已经被编码为数据中的一个因素,例如

y ~ x + I(x=='some_level'):z

或者,如果您的数据框中x是数字类型,那么

y ~ as.factor(x) + I(as.factor(x)=='some_level'):z

或者只对数据的某些子集进行建模尝试:

lm(y ~ as.factor(x) + as.factor(x):z, data = subset(df, x=='some_level'))