2015-08-12 13 views
2

У меня возникла проблема с отображением правильной группировки фактор-переменной после использования MICE. Я считаю, что это вещь R, но я включил ее с мышами, чтобы быть уверенным.Отображение уровней факторов и меток в R

Итак, я запускаю мой алгоритм мышей, здесь есть snipit, как я называю, я отформатирую его в алгоритме мышей. Обратите внимание, что я хочу быть 0 для не лекарства, и 1 для да лекарства, так что я принуждать его быть фактором с уровнями 0 и 1, прежде чем запускать его

mydat$drug=factor(mydat$drug,levels=c(0,1),labels=c(0,1)) 

тогда я бегу мыши, и она работает логистическую регрессия (это значение по умолчанию) на наркотиках, а также другие переменные, подлежащие вменению.

я могу извлечь результаты одного из вмененных, когда она будет завершена по

drug=complete(imp,1)$drug 

Мы можем увидеть его

> head(drug) 
[1] 0 0 1 0 1 1 
attr(,"contrasts") 
    2 
0 0 
1 1 
Levels: 0 1 

Таким образом, данные, конечно, 0,1.

Однако, когда я делаю что-то с ним, как cbind, она меняется на 1-х и 2-х

> head(cbind(drug)) 
drug 
[1,] 1 
[2,] 1 
[3,] 2 
[4,] 1 
[5,] 2 
[6,] 2 

Даже когда я принуждать его к числовому

> head(as.numeric(drug)) 
[1] 1 1 2 1 2 2 

Я хочу сказать, что есть что-то делать с контрастами, но когда я удаляю контраст, делаю

attr(drug,"contrasts")=NULL 

Он по-прежнему показывает wi 1-го и 2-го числа, когда их вызывают и печатают другие.

Я могу получить его правильно напечатать с помощью I()

> head(I(drug)) 
[1] 0 0 1 0 1 1 
Levels: 0 1 

Таким образом, я считаю, что это вопрос, R, но я не знаю, как исправить это. Использует ли I() правильное решение, или это просто обходной путь, который здесь работает? Что на самом деле происходит за кулисами, которые делают выводным дисплеем как 1, так и 2?

Благодаря

+0

'cbind' возвращается матрица, которая не хранит факторы (она будет хранить только строки символов и числовые символы). При преобразовании в матрицу ваши факторы представлены численным кодированием, а не символьной меткой. Все факторы сохраняются как целые числа, где первый уровень равен 1, а последующие уровни соответственно нумеруются. Ваш лучший способ исправить это - избегать хранения факторов в матрицах. – Benjamin

+0

На самом деле, голова (cbind (I (лекарство))) все еще дает 1 и 2, так что это не должно быть правильным решением. – RayVelcoro

+0

Но вы все еще используете 'cbind', который отчаянно пытается вернуть матрицу. И вы не можете хранить факторы в матрице. Вы должны рассмотреть решения, которые не связаны с 'cbind'. – Benjamin

ответ

2

Факторы начинаются с первого уровня, представляемого внутренне на 1.

Ваши два варианта:

1) Регулировка по 1-индекс уровней:

as.numeric(drug) - 1 

2) Возьмите метки факторов и преобразовать в цифровой:

as.numeric(as.character(drug)) 

Некоторые люди укажут вам в сторону более быстрого варианта, который делает то же самое:

as.numeric(levels(drug))[drug] 

Я бы также подумал об использовании значений logical вместо factor.

mydat$drug = as.logical(mydat$drug) 
1

В 0s и 1s имена ваших уровней. Базовым целое число, соответствующее имен 1 и 2. Вы можете увидеть str,

str(drug) 
# Factor w/ 2 levels "0","1": 2 2 2 2 2 2 1 1 2 2 

Когда вы принуждать фактор к числовым, вы уронили имена и получить целое представление.

0

Именно так R кодирует факторы. Основополагающее числовое представление факторов всегда начинается с 1. Как вы можете видеть следующие примеры:

as.numeric(factor(c(0,1))) 
as.numeric(factor(c(A,B))) 

Не уверен, что о специфике о том, как работает MICE, но если это требует коэффициента вместо простых 0/1 числовая переменная использовать логистическую регрессию, вы всегда можете взломать результаты с чем-то вроде следующего:

as.numeric(as.character(factor(c(0,1)))) 

или в вашем конкретном случае

drug <- as.numeric(as.character(drug)) 
+1

Есть ли настройка в R, которая позволит вам начать свое факторное представление в 0 вместо 1? – RayVelcoro

+0

Я не думаю, что sothese hack-y методы, как я описал, или @Senor O, упомянутые –

Смежные вопросы