【问题标题】:Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 0 (non-NA) cases Calls: lm -> lm.fitlm.fit(x,y,offset = offset,singular.ok =singular.ok,...)中的错误:0(非 NA)案例调用:lm -> lm.fit
【发布时间】:2020-09-09 19:43:44
【问题描述】:

我正在尝试运行 R 应用程序,但收到以下 first 错误:

lm.fit 中的错误(x,y,offset = offset,singular.ok =singular.ok,...): 0(非NA)案例 调用:lm -> lm.fit

产生错误的代码是:

pppb = lm(Exchange.rate.change ~ Inflation.difference)

我是 R 新手,我真的很难找到错误,所以非常感谢任何帮助。这是一个最小的数据集:

Country Inflation.difference    Exchange.rate.change    Developed
Australia   -1.235100000e+000   -3.187000000e+000   1.000000000e+000
Austria 1.550800000e+000    1.478100000e+000    1.000000000e+000
Belgium 1.037100000e+000    3.950000000e-002    1.000000000e+000
Canada  4.610000000e-002    -1.641600000e+000   1.000000000e+000
Chile   -1.841260000e+001   -2.063290000e+001   0.000000000e+000

这是重现错误所需的最少可运行代码:

ppp = read.table("test.dat",sep="\t", header=TRUE, row.names=NULL)
attach(ppp)
Developed[Developed==1] = "Developed"
newppp = ppp[ppp$Country!="Brazil",]
attach(newppp)
developed = newppp[Developed==1,]
attach(developed)
pppb = lm(Exchange.rate.change ~ Inflation.difference)

这是我得到的第二个错误:

以下对象被 .GlobalEnv 屏蔽: 发达 以下对象被 ppp 屏蔽: 国家、发达国家、汇率变化、通货膨胀差异 以下对象被 .GlobalEnv 屏蔽: 发达 以下对象被 newppp 屏蔽: 国家、发达国家、汇率变化、通货膨胀差异 以下对象被 ppp 屏蔽: 国家、发达国家、汇率变化、通货膨胀差异
lm.fit(x, y, offset = offset,singular.ok =singular.ok, ...) 中的错误: 0(非NA)案例 调用: lm -> lm.fit 执行停止 `

【问题讨论】:

  • 我认为错误消息表明您没有任何数据可以拟合模型(或全部为 NA)。你能用你使用的数据发布一个可重复的例子吗?
  • 您的任何专栏都是 NA 吗?可以执行 dput(head(Exchange.rate.change,5)) 和 dput(head(Inflation.difference,5)) 并将输出粘贴到您的帖子中吗?
  • dput(head(Exchange.rate.change,5)) - c(-3.187, 1.4781, 0.0395, -1.6416, -20.6329) dput(head(Inflation.difference,5)) - c(-1.2351, 1.5508, 1.0371, 0.0461, -18.4126) 所以他们似乎不是NA。
  • 这是我正在使用的部分数据:Country Inflation difference Exchange rate change Developed Australia -1.235100000e+000 -3.187000000e+000 1.000000000e+000 Austria 1.550800000e+000 1.478100000e+000 1.000000000e+000 Belgium 1.037100000e+000 3.950000000e-002 1.000000000e+000
  • 为了使您的问题可重现并因此可回答,我们需要最少的、独立的代码和数据,以便我们能够在我们的机器上重现您的问题。请遵循这些简单的准则:stackoverflow.com/questions/5963269/…

标签: r linear-regression eval lm


【解决方案1】:

tl;dr 如果你只是这样做

lm(Exchange.rate.change ~ Inflation.difference, data =ppp,
      subset=Developed==1)

在读取数据后(没有任何其他代码),它似乎工作正常。

或者,如果您想对可以执行的数据进行子集化

developed <- ppp[ppp$Developed==1, ] 
## or developed <- subset(ppp, Developed == 1)
lm(Exchange.rate.change ~ Inflation.difference, data = developed)

attach(ppp)

attach() 一般推荐;相反,请使用 data= 参数

Developed[Developed==1] = "Developed"

这很奇怪(我认为不会影响后面的结果);它将数字向量转换为字符(因此内容是“已开发”或“0”)

newppp = ppp[ppp$Country!="Brazil",]

巴西实际上不在您向我们展示的数据集中,因此在这种特殊情况下这没有任何作用

attach(newppp)

attach()ing 多次会使事情变得更加混乱(这是您收到警告的来源)

developed = newppp[Developed==1,]

这就是问题所在。您工作区中Developed 的当前副本是

[1] "Developed" "Developed" "Developed" "Developed" "0"        

因为你之前的陈述。这些值都不等于 1,因此developed 现在为空(零行)。

attach(developed)
pppb = lm(Exchange.rate.change ~ Inflation.difference)

【讨论】:

  • 不确定你的意思。尝试从干净的会话开始...
猜你喜欢
  • 2014-12-12
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 2018-09-26
  • 2020-08-23
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
相关资源
最近更新 更多