R中是否有一种简单的方法可以在R中具有100个参数的模型上创建线性回归?假设我们有一个包含 10 个值的向量 Y 和一个包含 10 列和 100 行的数据框 X 在数学符号中我会写Y = X[[1]] + X[[2]] + ... + X[[100]]
。如何在 R 语法中编写类似的内容?
如何在 R 中编写具有 100 个变量的线性模型公式
机器算法验证
r
2022-02-08 21:08:22
4个回答
试试这个
df<-data.frame(y=rnorm(10),x1=rnorm(10),x2=rnorm(10))
lm(y~.,df)
很好的答案!
我会添加默认情况下,调用formula
adata.frame
创建一个加法公式以将第一列回归到其他列。
因此,对于@danas.zuokas 的答案,您甚至可以这样做
lm(df)
这是正确解释的。
如果每一行是一个观察值,每一列是一个预测变量,那么是一个-长度向量和是一个矩阵 (在这种情况下),那么你可以这样做
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
和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)
其它你可能感兴趣的问题