9

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

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

4 回答 4

6

您缺少的一个关键点是,当您看到诸如 之类的显着影响时x2:z,这并不意味着xzwhen相互作用x == 2,而是意味着(或您的参考水平)之间的差异与 z 相互作用。x == 2x == 1这不是与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)
于 2013-02-18T03:41:11.200 回答
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)

是你想要的吗?

于 2013-02-18T02:49:02.567 回答
0

像这样的东西可能是你需要的:

y~factor(x)+factor(x=='SomeLevel'):z
于 2013-02-18T02:54:42.860 回答
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'))
于 2013-02-18T03:03:21.647 回答