[英]How to use the * operator in lm() in R when the independent variable is a matrix
我使用lm()
拟合多个多变量线性模型
基本上,matrix1保存因变量(y),Matrix2保存因变量(x)
model.1<-lm(matrix1[, 1] ~ matrix2)
其中matrix2
具有可变数量的列,具体取决于我要在回归中使用的参数的特定组合,而matrix2
没有零值列。
该语句对于在独立变量(IV)之间没有相互作用的线性模型(例如: a0 + a1*x1 + a2*x2 ...
)的线性模型很好用,但是如果我要介绍IV手册之间的相互作用,则表明在变量之间使用运算符*( model.1 <- lm(matrix1[, 1] ~ x1 * x2 * x3)
( model.1 <- lm(matrix1[, 1] ~ x1 * x2 * x3)
)。 IV放在矩阵中时如何应用?
1) SO问题应该可以提供可重复的测试数据,但是这里我们已经使用内置的data.frame anscombe
为您完成了测试。 定义测试数据后,我们定义一个数据框,其中包含所需的列和适当的公式。 最后,我们调用lm
:
# test data
matrix1 <- as.matrix(anscombe[5:8])
matrix2 <- as.matrix(anscombe[1:4])
DF <- data.frame(matrix1[, 1, drop = FALSE], matrix2) # cols are y1, x1, x2, x3, x4
fo <- sprintf("%s ~ (.)^%d", colnames(matrix1)[1], ncol(matrix2)) # "y1 ~ (.)^4"
lm(fo, DF)
给予:
Call:
lm(formula = fo, data = DF)
Coefficients:
(Intercept) x1 x2 x3 x4 x1:x2
12.8199 -2.6037 NA NA -0.1626 0.3628
x1:x3 x1:x4 x2:x3 x2:x4 x3:x4 x1:x2:x3
NA NA NA NA NA -0.0134
x1:x2:x4 x1:x3:x4 x2:x3:x4 x1:x2:x3:x4
NA NA NA NA
2)对此的一种变体,它在Call:
给出了更好的结果Call:
lm
输出的一部分如下。 我们从上面使用DF
。 do.call
将传递fo
变量的内容而不是其名称,以便我们在输出的Call:
部分中看到该公式。 另一方面, quote(DF)
用于强制名称DF
显示而不是data.frame的内容。
lhs <- colnames(matrix1)[1]
rhs <- paste(colnames(matrix2), collapse = "*")
fo <- paste(lhs, rhs, sep = "~") # "y1~x1*x2*x3*x4"
do.call("lm", list(fo, quote(DF)))
给予:
Call:
lm(formula = "y1 ~ x1*x2*x3*x4", data = DF)
Coefficients:
(Intercept) x1 x2 x3 x4 x1:x2
12.8199 -2.6037 NA NA -0.1626 0.3628
x1:x3 x2:x3 x1:x4 x2:x4 x3:x4 x1:x2:x3
NA NA NA NA NA -0.0134
x1:x2:x4 x1:x3:x4 x2:x3:x4 x1:x2:x3:x4
NA NA NA NA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.