在回归模型中,是否可以仅包含一个因子的虚拟变量的交互?例如,假设我有:
x: numerical vector of 3 variables (1,2 and 3)
y: response variable
z: numerical vector
是否可以构建如下模型:
y ~ factor(x) + factor(x) : z
但仅包含与X
级别的互动?我意识到我可以为x
的每个级别创建一个单独的虚拟变量,但是如果可能的话我想简化一些事情。
非常感谢任何输入!
答案 0 :(得分:3)
您遗漏的一个关键点是,当您看到x2:z
之类的重要影响时,这并不意味着x
在z
时与x == 2
互动},这意味着 x == 2
和x == 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 == 2
与x == 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'))