В статистике данные очень часто группируют в соответствии с тем или иным признаком, например, полом, социальным положением, стадией болезни, местом отбора проб и т.п. В R существует специальный класс векторов - факторы (factors), которые предназначены для хранения кодов соответствующих уровней номинальных признаков. Часто уровни факторов кодируют в виде чисел. В таких случаях очень важно "проинструктировать" программу так, чтобы она "распознавала" уровни номинальной переменной от чисел как таковых.
Предположим, в эксперименте по испытанию эффективности нового медицинского препарата было задействовано 10 пациентов-добровольцев, из которых шесть пациентов принимали новый препарат, а четверо остальных - плацебо (например, таблетку активированного угля). Для обозначения членов этих двух групп мы можем использовать коды 1 (препарат) и 0 (плацебо). Соответственно, информацию о всех десяти участниках эксперимента мы могли бы сохранить в виде следующего вектора:
treatment <- c(1, 1, 1, 1, 1, 1, 0, 0, 0, 0) treatment [1] 1 1 1 1 1 1 0 0 0 0
При таком подходе, однако, программа будет "рассматривать" вектор treatment в качестве числового (проверьте при помощи команды class(treatment)). Это будет ошибкой с нашей стороны, поскольку ноль и единица обозначают лишь два уровня номинальной переменной. С таким же успехом мы могли бы использовать, например, 10 для обозначения контрольной группы пациентов (т.е. пациентов принимавших плацебо) и 110 для обозначения пациентов, принимавших испытываемый препарат. Для преобразования числового (или текстового) вектора в фактор в R существует одноименная функция factor():
treatment <- factor(treatment, levels = c(0, 1))
treatment [1] 1 1 1 1 1 1 0 0 0 0 Levels: 0 1
Обратите внимание на то, что теперь при выводе содержимого объекта treatment программа подсказывает нам, что этот объект является фактором с двумя уровнями (Levels: 0 1). Допольнительно убедиться в этом можно при помощи все той же команды class(treatment):
class(treatment))
[1] "factor"
Более надежным подходом, позволяющим не запутаться при выполнении анализа, является кодировка уровней факторов при помощи текcтовых значений, а не чисел. Например, в нашем примере можно присвоить значение yes пациентам, принимавшим препарат, и значение no пациентам из контрольной группы. Мы можем перекодировать уровни уже имеющегося фактора treatment при помощи функции levels():
Заметьте, что при выводе содержимого вектора treatment коды пациентов не заключены в двойные кавычки, как это обычно бывает в случае с текстовыми значениями. Это является одним из внешних признаков того, что мы имеем дело именно с фактором, а не с текстовым вектором, содержащим шесть значений "yes" и четыре значения "no".
--
Как это сделать?
Отправить комментарий