-2

我有一个向量:

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", data=XY) 不会读取。

cat(X) 和因子 (X) 不起作用。cat(X[1]) 或 factor(X[1]) 都不是。

4

1 回答 1

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)
     }
}

但是,这个例子没有什么意义,因为为什么只使用变量 AD?为什么不循环遍历其他变量 R、T、G 等?大概的目的是用两个协变量的所有组合来拟合模型?就像我说的,这个例子相当混乱。

更一般地说,在时尚中试穿模特是一个糟糕的主意,你根本不应该这样做。通过使用每一对可能的协变量对线性回归模型进行拟合而学到的任何东西都可能是统计噪声,也可能是信号。更不用说当您设置它时,您将使用相同的变量拟合某些模型两次(当 i = j 时),在这种情况下,您将有两个完全共线性的变量。

于 2013-10-30T02:20:44.357 回答