首页 > 解决方案 > 尝试运行 ols_correlations 但不断遇到错误消息

问题描述

我是 Mac 用户,目前在 1.1.463 版本上运行 R。

尝试运行 ols_correlations 以获取零阶、部分和半部分相关性,但不断收到错误消息说,

Error in terms.formula(formula, data = data) :   '.' in formula and no 'data' argument

这是我运行的代码...

SATV <-  c(500, 550, 450, 400, 600, 650, 700, 550, 650, 550)
HSGPA <- c(3.0, 3.2, 2.8, 2.5, 3.2, 3.8, 3.9, 3.8, 3.5, 3.1)
FGPA <-  c(2.8, 3.0, 2.8, 2.2, 3.3, 3.3, 3.5, 3.7, 3.4, 2.9)
scholar <- data.frame(SATV, HSGPA, FGPA)
model1 <- lm(HSGPA ~SATV, data = scholar)
ols_correlations(model1)

即使使用不同的数据集,每次运行代码时都会收到相同的错误消息。我可以使用 ppcor 库中的 cor、pcor、spcor 函数获得零阶、部分和半部分相关性,但我不确定为什么 ols_correlations 函数对我不起作用。请帮忙。

标签: r

解决方案


每当遇到不清楚的行为/文档时,只需检查源代码。在这种情况下,它是面向对象的编程,因此可能有点难以弄清楚。可以在此处查看相关函数的源代码(https://github.com/rsquaredacademy/olsrr/blob/master/R/ols-correlations.R)。首先是复制错误。我做了以下事情:

SATV <-  c(500, 550, 450, 400, 600, 650, 700, 550, 650, 550)
HSGPA <- c(3.0, 3.2, 2.8, 2.5, 3.2, 3.8, 3.9, 3.8, 3.5, 3.1)
FGPA <-  c(2.8, 3.0, 2.8, 2.2, 3.3, 3.3, 3.5, 3.7, 3.4, 2.9)
scholar <- data.frame(SATV, HSGPA, FGPA)
model <- lm(HSGPA ~ SATV, data = scholar)


corm2 <- function(model) {
  
  mdata <- cordata(model)
  n     <- ncol(mdata)
  r2    <- c()
  
  for (i in 2:n) {
    out <- rtwo(i, mdata)
    r2  <- c(r2, out)
  }
  
  return(r2)
}
cordata <- function(model) {
  ols_prep_avplot_data(model)
}
rtwo <- function(i, mdata) {
  dat <- mdata[, c(-1, -i)]
  summary(lm(mdata[[1]] ~ ., data = dat))[[8]]
}
ols_prep_avplot_data <- function(model) {
  m1 <- as.data.frame(model.frame(model))[1]
  m2 <- as.data.frame(model.matrix(model))[, -1]
  as.data.frame(cbind(m1, m2))
}

corm2(model)

然后按照功能进行操作,直到隔离错误。在这种情况下,问题出在 corm2 的 for 循环中,它假设有超过 2 个自变量(如 @Abdessabour Mtk 在他的评论中建议的)。实际上,您可以使用文档中提供的示例轻松看到这一点:

library(olsrr)
model <- lm(mpg ~ disp + hp + wt + qsec, data = mtcars)
ols_correlations(model)

model <- lm(mpg ~ disp + hp + wt, data = mtcars)
ols_correlations(model)

model <- lm(mpg ~ disp + hp, data = mtcars)
ols_correlations(model)

推荐阅读