Игнорировать значение Inf и запустить регрессию lm - PullRequest
0 голосов
/ 20 ноября 2018

это мои переменные:

> 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 и выполнить регрессию.

Как я могу это сделать?

Любая помощь?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Вам необходимо удалить бесконечные элементы в 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.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

Если есть возможность Inf / -Inf и NA в любой строке любого столбца в вашем data.frame (т.е. не только в ex.return), то вам может потребоваться сделать что-то вроде:

summary(lm(ex.return ~ ex.return.skew, df[is.finite(rowSums(df)),]))
0 голосов
/ 20 ноября 2018

Мы можем преобразовать бесконечные значения в NA, и оно должно работать

x[is.infinite(x)] <- NA
summary(lm(y ~ x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...