Answers:
尝试这个
df<-data.frame(y=rnorm(10),x1=rnorm(10),x2=rnorm(10))
lm(y~.,df)
y ~ . + .^2
。等等。
y ~ . + .:x1
会为您提供每个变量(除外x1
)与的交互x1
。等等; 你明白了。
好答案!
我想补充一点,在默认情况下,调用formula
上data.frame
创建的添加剂配方,第一列回归到别人。
因此,在@ danas.zuokas的答案中,您甚至可以
lm(df)
解释正确。
R
运算符的超载感到惊讶:)
如果每一行都是一个观测值,每一列都是一个预测变量,那么是一个长度向量,是一个矩阵(在这种情况下,),则可以使用n X n × p p = 100
Z = as.data.frame(cbind(Y,X))
lm(Y ~ .,data=Z)
如果您不想将其他列包含为预测变量,则必须X
在使用此技巧或-
在模型公式中使用它们排除之前将其从中删除。例如,如果您想排除第67个预测变量(具有相应的名称x67
),则可以编写
lm(Y ~ .-x67,data=Z)
另外,如果要包括交互等,则需要手动将其添加为(例如)
lm(Y ~ .+X[,1]*X[,2],data=Z)
或确保将其作为的列输入X
。
您也可以结合使用formula
和paste
功能。
设置数据:假设我们有一个data.frame,其中包含x1
to 的预测变量x100
和我们的因变量y
,但是还包含一个讨厌的变量asdfasdf
。而且,预测变量的排列顺序应使它们在data.frame中不连续。
Data <- data.frame(matrix(rnorm(102 * 200), ncol=102))
names(Data) <- c(paste("x", 1:50, sep=""),
"asdfasdf", "y", paste("x", 51:100, sep=""))
还要想象一下,您有一个包含预测变量名称的字符串。在这种情况下,可以使用paste
函数轻松创建grep
此字符串,但是在其他情况下,或者可以使用某些其他方法来获取此字符串。
PredictorVariables <- paste("x", 1:100, sep="")
应用方法:然后我们可以构造一个公式,如下所示:
Formula <- formula(paste("y ~ ",
paste(PredictorVariables, collapse=" + ")))
lm(Formula, Data)
collapse
参数插入+
预测变量之间formula
将字符串转换为适合该lm
函数的类公式的对象。更一般而言,当我要提供预测变量作为变量名称的向量时,我会非常定期地使用以下函数。
regression <- function(dv, ivs, data) {
# run a linear model with text arguments for dv and ivs
iv_string <- paste(ivs, collapse=" + ")
regression_formula <- as.formula(paste(dv, iv_string, sep=" ~ "))
lm(regression_formula, data)
}
例如,
regression("y", PredictorVariables, Data)