【问题标题】:Ignore Inf value and run a lm Regression忽略 Inf 值并运行 lm 回归
【发布时间】:2018-11-21 21:59:06
【问题描述】:

这些是我的变量:

> dput(y)
c(-22.0713165394207, 14.0880914427811, 10.9650636244176, -1.96648890706268, 
-5.30593850426708, -7.54651916037787, 3.84914747321197, 4.4986386904214, 
1.73067625014435, 2.5585960595839, -2.72766183793304, -3.10167452216202, 
2.68853838208521, 1.12662203717498, 1.24951279248057, 3.70075666289518, 
-6.11243972144607, -6.91019769671849, 6.46767794752582, 8.84874735514293, 
2.95606352319898, 3.23883851668917, -2.61692776879569)
> dput(x)
c(`1` = 0.0520523266234464, `2` = Inf, `3` = 0.0520523266234462, 
`4` = 0.0520523266234463, `5` = 0.0520523266234463, `6` = 0.0520523266234461, 
`7` = 0.0520523266234463, `8` = 0.0520523266234466, `9` = 0.0520523266234465, 
`10` = 0.0520523266234465, `11` = 0.0520523266234465, `12` = 0.0520523266234466, 
`13` = 0.0520523266234468, `14` = 0.0520523266234466, `15` = 0.0520523266234467, 
`16` = 0.0520523266234464, `17` = 0.0520523266234463, `18` = 0.0520523266234465, 
`19` = 0.0520523266234466, `20` = 0.0520523266234463, `21` = 0.0520523266234464, 
`22` = 0.0520523266234465, `23` = 0.0520523266234464)

当我运行回归时:summary(lm(ex.return ~ ex.return.skew))

我有这个错误信息:

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  NA/NaN/Inf in 'x'

我试图删除位置 2,然后运行我的回归,但我不能这样做,因为数据要大得多。所以我正在寻找一种方法来忽略 Inf/Na 值并运行我的回归。

我该怎么做?

有什么帮助吗?

【问题讨论】:

  • 不能删除该观察是什么意思?
  • 因为,在这种特定情况下,删除第二个位置并运行回归很容易。但我的数据比这大得多。这样做是没有用的。

标签: r


【解决方案1】:

我们可以将无限值转换为NA,它应该可以工作

x[is.infinite(x)] <- NA
summary(lm(y ~ x))

【讨论】:

  • 感谢@akrun,但我的回归角度系数有 NA 值。我虽然它会工作,但它没有。我试过 `na.action=na.omit´ 但没用。
  • @Laura 创建一个逻辑索引然后忽略这些值是否有意义。即i1 &lt;- is.infinite(x); i2 &lt;- is.infinite(y); i3 &lt;- i1|i2; x1 &lt;- x[!i3]; y1 &lt;- y[!i3]; summary(lm(y1 ~ x1))
  • @akrun 这个答案不起作用,因为你不能在回归中得到 NA 值,因为你得到了前面提到的 NA 系数。请参阅我的解决方案以获取正确答案。 lm 函数总是最适合使用 data.frames 而不是单独的向量 - 请参阅我的答案。
【解决方案2】:

您需要删除 x 和 y 中的无限项,如下所示:

summary(lm(ex.return[is.finite(df$ex.return)] ~ ex.return.skew[is.finite(df$ex.return)]))

但是,最好将它们放入 data.frame 并将该 data.frame 添加到 lm 的 data 参数中,从而过滤掉 data.frame 的行。

df <- data.frame(ex.return, ex.return.skew)
summary(lm(ex.return ~ ex.return.skew, df[is.finite(df$ex.return),]))

注意 is.finite() 适用于 NA 值以及 -Inf/Inf

is.finite(c(NA, Inf, 10))
[1] FALSE FALSE  TRUE

如果在 data.frame 中任何列的任何行中存在 Inf/-Inf 和 NA 的可能性(即不仅仅是在 ex.return 中),那么您可能需要执行以下操作:

summary(lm(ex.return ~ ex.return.skew, df[is.finite(rowSums(df)),]))

【讨论】:

    猜你喜欢
    • 2018-08-14
    • 1970-01-01
    • 2011-11-05
    • 2014-05-22
    • 1970-01-01
    • 2010-11-12
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多