2010-11-23 85 views
2

我的問題很簡單,但嘗試了很多事情後我無法解決問題。當我執行lm函數時,如何忽略NA數據?

我有兩個數據幀。

>a 
    col1 col2 col3 col4 
1 1 2 1 4 
2 2 NA 2 3  
3 3 2 3 2  
4 4 3 4 1 

> b 
    col1 col2 col3 col4 
1 5 2 1 4  
2 2 NA 2 3  
3 3 NA 3 2  
4 4 3 4 1 

我可以做一個lm(a ~ b)以適應ab的數據?

如果我這樣做,我該如何忽略NA數據?

感謝,丹

回答

2

如果a和b是數據框,並且想要回溯b中各個值的單個值,則需要將它們轉換爲向量。例如:

> lm(as.vector(as.matrix(a))~as.vector(as.matrix(b))) 

Call: 
lm(formula = as.vector(as.matrix(a)) ~ as.vector(as.matrix(b))) 

Coefficients: 
      (Intercept) as.vector(as.matrix(b)) 
       8.418239    -0.005241 

缺少數據缺省情況下會丟失 - 請參閱help(lm)和na.action參數。 lm對象的彙總方法將告訴您關於丟棄的觀察值。

當然,忽略可能存在於空間數據中的空間相關性,意味着您根據參數估計的推論是完全錯誤的。映射殘差。並閱讀一本關於空間統計的好書...

[編輯:哦,數據幀必須是全部數字或整個很多都轉換爲字符,然後...呃,誰知道...]

編輯:

從數據幀獲得的載體的另一種方法就是使用 '不公開':

> a=data.frame(matrix(runif(16),4,4)) 
> b=data.frame(matrix(runif(16),4,4)) 
> lm(a~b) 
Error in model.frame.default(formula = a ~ b, drop.unused.levels = TRUE) : 
    invalid type (list) for variable 'a' 
> lm(unlist(a)~unlist(b)) 

Call: 
lm(formula = unlist(a) ~ unlist(b)) 

Coefficients: 
(Intercept) unlist(b) 
    0.6488  -0.3137 

我從來沒見過data.matrix之前,THX加文。

4

一般在R上的迴歸函數將只報告沒有完成的情況下的結果,所以你通常不需要做什麼特別持幣觀望的情況。你的問題似乎有點含糊,你不知道爲什麼你要在公式的左邊放一個矩陣(或者是一個data.frame?)。有能力使用lm()函數進行多變量分析,但想要這樣做的人通常會提出更具體的問題。

> lm(a$col1 ~ b$col1+b$col2 +b$col3+b$col4) 

Call: 
lm(formula = a$col1 ~ b$col1 + b$col2 + b$col3 + b$col4) 

Coefficients: 
(Intercept)  b$col1  b$col2  b$col3  b$col4 
     16   -3   NA   NA   NA 

微量的數據可以防止任何進一步的估計失去2例,只剩下兩個。

+0

其實我的數據集非常大。我只是舉一個例子。數據a和b都是數據幀,列表示緯度列表和行經度。 – didimichael 2010-11-23 18:43:16

+0

你能給我們提供更多關於你正試圖解決的問題的信息嗎?你是否試圖倒退b *中的所有*列中的每個*列?或者b中每列的每一列? (如果你想在b的on * all *列中包含* all *列,那麼正如上面的DWin所說的,你真的正在尋找一個多變量分析...) – 2010-11-23 20:27:00