Пытаюсь запустить ols_correlations, но продолжаю получать сообщение об ошибке

#r

#r

Вопрос:

Я пользователь Mac и в настоящее время использую R версии 1.1.463.

Пытаюсь запустить 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)
 

Я получаю одно и то же сообщение об ошибке каждый раз, когда запускаю код, даже с другим набором данных.
Я мог бы получить корреляции нулевого порядка, частичные и получастичные, используя функции cor, pcor, spcor из библиотеки ppcor, но я не уверен, почему функция ols_correlations у меня не работает. Пожалуйста, помогите.

Комментарии:

1. Я думаю, что это терпит неудачу, потому что ваша модель имеет только две переменные

Ответ №1:

Всякий раз, когда сталкиваетесь с неясным поведением / документацией, просто проверьте исходный код. В данном случае это объектно-ориентированное программирование, поэтому разобраться в нем может быть немного сложнее. Исходный код рассматриваемой функции можно увидеть здесь (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)
 

Затем следуйте инструкциям, пока не изолируете ошибку. В этом случае проблема заключается в цикле for corm2, который предполагает, что существует более 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)