2016-07-01 2 views
0

У меня есть большое количество предикторов, и я стараюсь делать на них всевозможные преобразования при установке надежной линейной модели. Некоторые из этих комбинаций дают вычислительно-сингулярные системы. Мне было интересно, как идентифицировать эти системы? Я попробовал следующее (обратите внимание, что это преднамеренно глупый exmaple предназначен, чтобы сделать это не в состоянии):R: игнорировать случаи, которые являются вычислительно сингулярными

xx <- data.frame(y = rnorm(100), x = (1:100), z = 2*(1:100)) 
zz <- try(rlm(y ~ x + z, data = xx)) 
Error in rlm.default(x, y, weights, method = method, wt.method = wt.method, : 
    'x' is singular: singular fits are not implemented in 'rlm' 
length(intersect(class(zz), "try-error")) == 1 
[1] TRUE 

Однако, это не работает. в том смысле, что возврат прерывает цикл, в котором он выполняется. Любые идеи относительно того, как справиться с этим? Еще раз спасибо!

+0

Я бы рекомендовал использовать 'tryCatch', а не' try' - с ним гораздо удобнее работать. – Gregor

+0

Но я не уверен, что ваш код не работает. Просто потому, что печать ошибок не означает, что он остановил цикл (вы можете использовать 'try' с' silent = TRUE', чтобы не допустить ошибки печати). Используя ваши данные, запустите 'for (i в 1: 2) { if (i == 1) zz <- try (MASS :: rlm (y ~ x + z, data = xx)); print (i) } 'будет печатать как 1, так и 2 (оба после того, как ошибка будет напечатана), таким образом, цикл не будет нарушен ошибкой. – Gregor

+0

Возможно, у вас есть ошибка в другом месте вашего цикла, а не завершена в 'try()'? – Gregor

ответ

0

Это очевидный случай многоцветности.

>library(usdm) 
>a<-as.data.frame(cbind(xx$x,xx$z)) 
>vif(a) 
    Variables VIF 
1  V1 Inf 
2  V2 Inf 

Существует многократный подход к удалению мультиколинеарности из данных. Регрессия Риджа - хороший подход для этого.

1.Please см Predictions of ridge regression in R

анализ 2.Principal компонентов. Refer Johnson & Wichern (2001). Применяемый многомерный статистический анализ (6-е издание). Prentice Hall.

+1

Спасибо! В этом примере ошибка намеренно создается, чтобы понять, что происходит. – user3236841