首页 文章

计算线性回归残差与NAs和R中的自变量之间的相关性

提问于
浏览
1

我试图计算线性回归的残差与自变量 p 之间的相关系数 .

基本上,线性回归估计当前销售额是当前价格 p 和过去价格 p1 的函数 . 当前价格向量 mydf$p 的长度为8,但残差是长度为7的向量,因为 NANA 值已删除了一个条目 .

# 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 回答

  • 1

    仅当您在调用lm时指定x = T时,才会创建x矩阵 . 然后模型$ x将给出x的值(这更像是模型[['x']]的惯用语 .

    lm通过完全省略缺少值的观察来处理缺失值 . 也许你想做的事情如下:

    cor(residuals(model), mydf$p[!is.na(mydf$p)])
    

  • 1

    您可以从 model$model 获取用于拟合模型的实际数据,并从那里获取 p 列:

    cor(residuals(model), model$model$p)
    

    或者, is.na(mydf$p1) 将告诉您 mydf 中的哪些行 p1p1

    cor(residuals(model), mydf$p[!is.na(mydf$p1)])
    

    通常, is.na(x) 告诉我们 x 中的元素是否为 NA

    > is.na(c(1,2,NA,4,NA,6))
    [1] FALSE FALSE  TRUE FALSE  TRUE FALSE
    
  • 1

    model.matrix(model)似乎就是你要找的那么你可以用[]和列号或名称选择你想要的变量

相关问题