2013-12-21 60 views
1

我想要計算線性迴歸殘差與自變量p之間的相關係數。計算線性迴歸殘差與NAs和自變量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。我試圖通過model[['x']]訪問「x」矩陣,但是這不起作用。

回答

1

你可以用來從model$model擬合模型的實際數據,並從那裏p柱:

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

另外,is.na(mydf$p1)會告訴你這mydf行在列的NAp1

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

如果您在您的來電LM指定X = T X矩陣只被創建。然後模型$ x會給你x的值(這是比較習慣的模型[['x']]。

lm通過完全忽略缺少值的觀察來處理缺失值。這樣做:

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

1

model.matrix(模型)似乎是你正在尋找 什麼然後,你可以選擇你想用[]的變量和列編號或名稱