当我执行lm功能时,如何忽略NA数据?

时间:2010-11-23 17:54:13

标签: r linear-regression missing-data

我的问题很简单,但在尝试了很多事情之后我无法解决它。

我有两个数据框。

>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数据?

谢谢,Dan

2 个答案:

答案 0 :(得分: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个案例并且只剩下两个案件后,少量数据会阻止任何进一步的估计。

答案 1 :(得分: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对象的摘要方法将告诉您有关丢弃的观察结果。

当然,忽略空间数据中可能存在的空间相关性意味着您从参数估计中得出的推论将是非常错误的。映射残差。并阅读一本关于空间统计的好书...

[编辑:哦,数据框必须是所有数字或整个批次转换为字符然后......好吧,谁知道...]

编辑:

从数据框中获取向量的另一种方法就是使用'unlist':

> 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,是Gavin。