代码之家  ›  专栏  ›  技术社区  ›  Laura

忽略inf值并运行lm回归

r
  •  0
  • Laura  · 技术社区  · 5 年前

    这些是我的变量:

    > 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'
    

    我试着删除position2,然后运行回归,但我不能这样做,因为数据要大得多。所以我正在寻找一种忽略inf/na值并运行回归的方法。

    我该怎么做?

    有什么帮助吗?

    2 回复  |  直到 5 年前
        1
  •  1
  •   akrun    5 年前

    我们可以把无限值转换成 NA 它应该会起作用的

    x[is.infinite(x)] <- NA
    summary(lm(y ~ x))
    
        2
  •  0
  •   rookie    5 年前

    您需要删除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中的任何列的任何行中(即不只是在ex.return中)都可能有inf/-inf和na,则可能需要执行以下操作:

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