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