2

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

我有两个数据框。

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

谢谢,丹

4

2 回答 2

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 个案例并且只剩下两个案例后,少量的数据阻止了任何进一步的估计。

于 2010-11-23T18:38:52.783 回答
2

如果 a 和 b 是数据帧,并且您想将 a 中的各个值回归到 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 对象上的 summary 方法将告诉您丢弃的观察结果。

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

[编辑:哦,数据框必须全是数字,否则整个批次都会转换为字符,然后......好吧,谁知道......]

编辑:

从数据帧中获取向量的另一种方法是使用“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。

于 2010-11-23T22:15:20.453 回答