r 中参数数量可变的回归函数

标签 r function arguments regression

我编写了一个函数来计算 nls 回归模型的 VIF。它看起来像这样:

function (a,b,c,d,e,f,g) {
    VIFa <- 1/(1- (R2 <- summary(lm(a ~ b + c + d + e + f + g))$r.square))
    PMa <- ifelse (sqrt(VIFa) > 2, "JE", "NI")
    VIFb <- 1/(1- (R2 <- summary(lm(b ~ a + c + d + e + f + g))$r.square))
    PMb <- ifelse (sqrt(VIFb) > 2, "JE", "NI")
    VIFc <- 1/(1- (R2 <- summary(lm(c ~ a + b + d + e + f + g))$r.square))
    PMc <- ifelse (sqrt(VIFc) > 2, "JE", "NI")
    VIFd <- 1/(1- (R2 <- summary(lm(d ~ a + b + c + e + f + g))$r.square))
    PMd <- ifelse (sqrt(VIFd) > 2, "JE", "NI")
    VIFe <- 1/(1- (R2 <- summary(lm(e ~ a + b + c + d + f + g))$r.square))
    PMe <- ifelse (sqrt(VIFe) > 2, "JE", "NI")
    VIFf <- 1/(1- (R2 <- summary(lm(f ~ a + b + c + d + e + g))$r.square))
    PMf <- ifelse (sqrt(VIFf) > 2, "JE", "NI")
    VIFg <- 1/(1- (R2 <- summary(lm(g ~ a + b + c + d + e + f))$r.square))
    PMg <- ifelse (sqrt(VIFg) > 2, "JE", "NI")
    rezultat <- data.frame(c(VIFa, VIFb, VIFc, VIFd, VIFe, VIFf, VIFg), 
                           c(PMa, PMb, PMc, PMd, PMe, PMf, PMg)) 
    names(rezultat) <- c("VIF", "Multikolinearnost")
    return(as.matrix.data.frame(rezultat))
    }

其中a、b、c、d、e、f、g是特定模型中使用的变量。 VIFa 是“a”变量的方差膨胀因子,PMa 是一个逻辑值,显示方差膨胀是否会导致模型出现重大差异(JE = 是)或否(NO = 不会)。

我的问题是如何使这个函数适合任意数量的参数? 我已经尝试使用lapply函数,但是我找不到一种方法将每个变量一次用作从属变量,并将所有其他变量用作独立变量(对于任意数量的变量)。

最佳答案

尝试以下操作:

regapply <- function(l) {
   ids <- names(l)
   n <- length(l)
   vifs <- numeric(n)
   pms <- character(n)
   for (i in seq_along(l)) {
      f <- parse(text=sprintf("%s ~ %s", ids[i], paste(ids[-i], collapse=" + ")))[[1]]
      vifs[i] <- 1/(1- (R2 <- summary(lm(f, data=l))$r.square))
      pms[i] <- ifelse (sqrt(vifs[i]) > 2, "JE", "NI")
   }
   data.frame(var=ids, vif=vifs, pm=pms)
}

在命名列表(例如数据框)上调用上述内容,例如:

regapply(iris[-5])
##            var       vif pm
## 1 Sepal.Length  7.072722 JE
## 2  Sepal.Width  2.100872 NI
## 3 Petal.Length 31.261498 JE
## 4  Petal.Width 16.090175 JE

说明:parse(text=sprintf("%s ~ %s", ids[i], Paste(ids[-i],collapse="+ ")))[[1]] 创建一系列公式。在上面的例子中,我们有:

Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width
Sepal.Width ~ Sepal.Length + Petal.Length + Petal.Width
Petal.Length ~ Sepal.Length + Sepal.Width + Petal.Width
Petal.Width ~ Sepal.Length + Sepal.Width + Petal.Length

关于r 中参数数量可变的回归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25831770/

相关文章:

r - 如何将 gganimate 与 geom_tile 一起使用?

r - data.table 连接使用一个表中的两列和另一表中的一列

javascript - 如何将参数作为函数传递并在单击按钮后调用它

r - 用户定义的函数,用于分析多个 csv、创建变量并在 R 中按组对 NA 进行计数

带参数的 JavaFX JavaScript 上行调用

javascript - 带有无限参数的构造函数是如何创建的?

reshape 相关矩阵,每对变量仅包含一次

r - 如何通过两列合并其中一列

function - "Parameter"与 "Argument"

javascript - 使用 JavaScript 转到页面并自动执行该页面上的功能