运行 R 中用户定义矩阵的 lm()

Running lm() on user defined matrix in R

我正在尝试设置一个函数,该函数将 运行 lm() 用于派生自 R 中用户定义矩阵的模型。

modelMatrix 将由用户设置,但预计结构如下: source target 1 "PVC" "AA" 2 "Aro" "AA" 3 "PVC" "Aro" 该矩阵用于允许用户在 lm 中定义依赖(目标)和独立(源)变量,并引用另一个 valuesMatrix 的列名:
PVC Ar AA [1,] -2.677875504 0.76141471 0.006114699 [2,] 0.330537781 -0.18462039 -0.265710261 [3,] 0.609826160 -0.62470233 0.715474554

我需要使用这个 modelMatrix 并生成相关数量的 lms。例如在这种情况下:
lm(AA ~ PVC + Aro)
lm(Aro ~ PVC)
我试过了,但似乎随着用户更改模型矩阵,它变得错误,我需要根据模型矩阵明确指定每个自变量。

```lm(as.formula(paste(unique(modelMatrix[,"target"])[1], "~ .",sep="")),
       data=data.frame(valuesMatrix))
```

我是否需要设置 2 个循环(1 个嵌套)来获取源字符串和目标字符串并将它们粘贴到公式中,还是我忽略了一些细节。很困惑。

理想情况下,我希望用户能够更改 modelMatrix 以包含 1 个或多个 lms 以及每个 lm 的一个或多个自变量。非常感谢您的帮助,因为我真的在这里碰壁了。 谢谢。

对于您的具体示例,此代码应该有效 -

source <- c("PVC","Aro","PVC")
target <- c("AA","AA","Aro")

modelMatrix <- data.frame(source = source, target = target)

valuesMatrix <- as.matrix(rbind(c(-2.677875504,0.76141471,0.006114699), c(0.330537781,-0.18462039,-0.265710261), 
                      c(0.609826160,-0.62470233,0.715474554)))

colnames(valuesMatrix) <- c("PVC","Aro","AA")

unique.target <- as.character(unique(modelMatrix$target))

lm.models <- lapply(unique.target, function(x) {lm(as.formula(paste(x,"~ .", sep = "")), 
      data = data.frame(valuesMatrix[,colnames(valuesMatrix) %in% 
                                       c(x,as.character(modelMatrix$source[which(modelMatrix$target==x)]))]))})

您可以使用 for 循环的想法,但 for 循环可能会非常昂贵,尤其是当您的 modelMatrix 变得非常大时。它可能看起来不那么吸引人,但 lapply 功能已针对此类工作进行了优化。唯一的其他技巧是保留执行 lm 所需的列。

您也可以提取每个 lm 的结果,但使用:

lm[[1]]lm[[2]]