我有一个矢量:
X <-c("A","B","C","D") # and Y is "Y"
Z <-c("R","T","G","U","I")
XY <- matrix(1:150, ncol = 10)
colnames(XY)<- c("Y", X, Z)
目标是:
for (i in 1: length(X)){
for (j in 1:length(X)){
lm(Y~X[i]+X[j], data=XY)
}
}
问题是:X [1] =“A”和lm(Y~“A”,数据= XY)将无法读取。
cat(X)和factor(X)不起作用。 cat(X [1])或factor(X [1])都不是。
答案 0 :(得分:2)
在R中,公式是模型的符号表示。您可以从字符串创建公式,但不能混合使用符号和字符串。例如,你可以这样做:
lm(Y~X+Z,data = XY)
或者您可以执行以下操作:
f <- as.formula(paste0("Y~",paste("X","Z",sep = "+")))
lm(formula = f,data = XY)
在您的情况下,这意味着您可能需要每次手动构建公式:
for (i in 1: length(X)){
for (j in 1:length(X)){
f <- as.formula(paste0("Y~",paste(X[i],X[j],sep = "+")))
lm(formula = f, data=XY)
}
}
但是,这个例子没什么意义,因为为什么只使用变量A-D?你为什么不循环其他变量R,T,G等?据推测,目的是使模型与两个协变量的所有组合相匹配?就像我说的那样,这个例子相当令人困惑。
更一般地说,以时尚方式拟合模型是一个可怕的想法,你根本不应该这样做。通过使用每对可能的协变量逐个拟合线性回归模型而学习的任何东西都可能是统计噪声,因为它将是信号。更不用说当你设置它时,你将使用相同的变量两次拟合一些模型(当i = j时),在这种情况下你将有两个完美的共线变量。