Я пытаюсь вычислить коэффициент корреляции между остатками линейной регрессии и независимой переменной p
.Расчет корреляции между остатками линейной регрессии с NA и независимой переменной в R
В принципе, линейная регрессия оценивает текущие продажи в зависимости от текущей цены p
и прошлой ценой p1
. Вектор текущих цен mydf$p
имеет длину 8, но остатки представляют собой вектор длины 7, поскольку одна запись была удалена из-за значения NA
p1
.
# lag vector and pad with NAs
# Source: http://heuristically.wordpress.com/2012/10/29/lag-function-for-data-frames/
lagpad <- function(x, k) {
if (!is.vector(x))
stop('x must be a vector')
if (!is.numeric(x))
stop('x must be numeric')
if (!is.numeric(k))
stop('k must be numeric')
if (1 != length(k))
stop('k must be a single number')
c(rep(NA, k), x)[1 : length(x)]
}
mydf <- data.frame(p = c(10, 8, 10, 9, 10, 9, 10, 8))
mydf$p1 <- lagpad(mydf$p,1)
mydf$sales <- with(mydf, 200 - 15 * p + 5 * p1) + rnorm(nrow(mydf), 0,0.13)
model <- lm(data = mydf, formula = 'sales ~ p + p1')
print(summary(model))
print(cor(residuals(model), mydf$p))
# Error in cor(residuals(model), mydf$p) : incompatible dimensions
В данном конкретном случае, проста в использовании mydf$p[2:8]
вместо mydf$p
. Однако, как правило, может быть несколько строк в случайных местах, где затем удаляются NA. Как получить доступ к независимым переменным, которые фактически использовались в регрессии после удаления строк, содержащих NA?
Одна из моих попыток была основана на R documentation for lm. Я попытался получить доступ к матрице «x» через model[['x']]
, но это не сработало.