R线性回归问题:lm.fit(x, y, offset=offset, singular.ok=singular.ok,...)

6
我尝试使用R进行回归分析。 我已经有了以下代码,并且在导入CSV文件方面没有问题。
    dat <- read.csv('http://pastebin.com/raw.php?i=EWsLjKNN',sep=";")
dat # OK Works fine
Regdata <- lm(Y~.,na.action=na.omit, data=dat)
summary(Regdata)

然而,当我尝试回归时,它并没有起作用。我收到一个错误消息:
Erreur dans lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  aucun cas ne contient autre chose que des valeurs manquantes (NA)

所有我的CSV文件都是数字,如果“单元格”为空,我会有“NA”值。有些列不为空,有些行有时为空,带有NA值...
因此,即使有以下情况,我也不明白为什么会收到错误消息:
na.action=na.omit

PS:CSV的数据可在以下链接获取:http://pastebin.com/EWsLjKNN


你可能想要查看Faraway的(免费!)书籍:http://cran.r-project.org/doc/contrib/Faraway-PRA.pdf - Ricardo Saporta
非常感谢,推荐的书正是我所需要的 ;) - S12000
2个回答

6

您会收到此错误消息,因为您的数据框中的所有行都至少包含一个缺失值。例如,可以使用以下代码进行检查:

 apply(data,1,function(x) sum(is.na(x)))
 [1] 128 126  82  78  73  65  58  34  31  30  28  30  20  21  12  20  17  16  12  42  50 128

当你使用lm()na.action=na.omit运行回归分析时,数据框架的所有行都将被删除,没有数据可以用于回归分析。

但这并不是主要问题。如果您提供的数据包含您拥有的所有信息,则在仅具有22个观察值的情况下尝试使用165个独立变量(X变量)进行回归分析。独立变量的数量必须小于观察值的数量。


你好,感谢回答。如果我理解正确,我需要两个条件。首先是要有比列更多的行。其次是要没有缺失值。如果存在单个缺失值,则该模型不好。这是您所说的吗? - S12000
@Swiss1200 你可能会有一些缺失值,它们的数量取决于你拥有的观测数。但是你必须检查完整观测值(没有缺失值的行)的数量是否大于独立变量(列)的数量。 - Didzis Elferts
请问你能解释一下 apply(data,1,function(x) sum(is.na(x))) 的作用吗?我的数据框中没有 NA,但是 apply(data,1,function(x) sum(is.na(x))) 返回了 6 6 ... 6 - Jay Wang
@JayWong 它计算缺失值的数量。如果你得到6,那么应该会缺少一些值。 - Didzis Elferts

-2

我相信我可以为此增加一些清晰度,因为我亲身经历过这个问题,这也是我在这里的原因——除了我的问题是关于广义最小二乘模型(gls)与标准线性模型之间的区别。有些逻辑“可能”也适用于这里或类似情况。

我不否认任何人迄今所说的任何事情。人们对于他们所感知到的观察结果和R所感知到的这些事情之间可能存在一些混淆。

假设你有160多个自变量。假设你有一个单一的来源,所有数据都来自于此。你从文件、数据库等导入它。假设你有相同数量的响应变量或某些东西,满足你进行回归分析的目的。

R会告诉你有2个观察值。现在,如果你以完全相同的方式从另一个来源获得了相同的数据,那么当你在RStudio中查看全局环境时,你就有了3个观察值。

我提到这个原因是因为在数学意义上,“观察”这个术语(在这里使用)是完全可接受的。在R的术语中,它以多种方式看待观察结果。

这是我遇到的一个大问题的主要原因,它告诉我有缺失值,na.omit这个,na.action那个等等。当我看了OrchardSpray演示,并回顾了我的方法后,我弄清楚了。

重点是我们如何理解数据中的“观察”,这是一回事。R有另一个术语来描述它,而它输出错误信息的方式可能会导致额外的混淆。

你明白我的意思吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接