0

这些是我的变量:

> 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 值并运行我的回归。

我怎样才能做到这一点?

有什么帮助吗?

4

2 回答 2

1

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

x[is.infinite(x)] <- NA
summary(lm(y ~ x))
于 2018-11-20T17:37:02.470 回答
0

您需要删除 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-11-20T18:01:20.500 回答