我试图计算线性回归的残差与自变量 p
之间的相关系数 .
基本上,线性回归估计当前销售额是当前价格 p
和过去价格 p1
的函数 . 当前价格向量 mydf$p
的长度为8,但残差是长度为7的向量,因为 NA
的 NA
值已删除了一个条目 .
# 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 . 我试图通过 model[['x']]
访问"x"矩阵,但这不起作用 .
3 回答
仅当您在调用lm时指定x = T时,才会创建x矩阵 . 然后模型$ x将给出x的值(这更像是模型[['x']]的惯用语 .
lm通过完全省略缺少值的观察来处理缺失值 . 也许你想做的事情如下:
?
您可以从
model$model
获取用于拟合模型的实际数据,并从那里获取p
列:或者,
is.na(mydf$p1)
将告诉您mydf
中的哪些行p1
列p1
:通常,
is.na(x)
告诉我们x
中的元素是否为NA
:model.matrix(model)似乎就是你要找的那么你可以用[]和列号或名称选择你想要的变量