R 在执行lm函数时,如何忽略NA数据?
我的问题很简单,但我尝试了很多事情后还是没能解决 我有两个数据帧R 在执行lm函数时,如何忽略NA数据?,r,linear-regression,missing-data,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 N
>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)
以适应a
和b
中的数据吗
如果我这样做,我如何忽略NA
数据
谢谢,Dan一般来说,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个案例且只剩下两个案例后,无法进行进一步的估计。如果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
默认情况下会删除丢失的数据-请参阅帮助(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,thx Gavin。实际上我的数据集很大。我只是举个例子。数据a和b都是数据框,其中列表示纬度列表,行表示经度。您能为我们提供有关您试图解决的问题的更多信息吗?您是否试图对a中的每列和b中的所有列进行回归?或者a中的每一列在b中的每一列上?(如果您希望a中的所有列都对应于b中的所有列,那么正如德温在上文中所说,您实际上是在研究多元分析…)从您的数据结构来看,您需要研究空间统计方法。请参见CRAN空间统计任务视图。这将为空间相关的数据提供更好的回归技术地图。我是否缺少一个方便的函数或方法?如果重新编辑,Spacedman-
数据。matrix()
将是上述as.matrix()
的更自然的替代方法-至少它将处理逻辑|因子->数字编码。无法处理数据帧中的真实字符数据,但是。。。