01 мая 2012

Базовые графические возможности R: функция cdplot()



Для визуализации связи между двумя переменными, одна из которых является количественной, а другая качественной (фактором), можно использовать диаграмму размахов.  При таком подходе ось ординат соответствовала бы значениям количественной переменной. Но что если зависимой является качественная переменная? Полезной здесь может оказаться одна из базовых графических функций R - cdplot(), позволяющая совмещать на одном графике плотности вероятности для каждого уровня интересующей исследователя качественной переменной (англ. conditional density plot).

Ниже я приведу пример, заимствованный из книги Everitt & Hothorn (2010) - одного из лучших, на мой взгляд, руководств по биостатистическому анализу с использованием R. Нам потребуется пакет HSAUR2, сопровождающий эту книгу. Его легко установить при помощи команды install.packages("HSAUR2").

В состав пакета HSAUR2 входит набор данных plasma:

library(HSAUR2)
data(plasma)
summary(plasma)
   fibrinogen       globulin           ESR    
 Min.   :2.090   Min.   :28.00   ESR < 20:26  
 1st Qu.:2.290   1st Qu.:31.75   ESR > 20: 6  
 Median :2.600   Median :36.00                
 Mean   :2.789   Mean   :35.66                
 3rd Qu.:3.167   3rd Qu.:38.00                
 Max.   :5.060   Max.   :46.00

Видно, что таблица plasma содержит две количественные переменные - fibrinogen и globulin, и одну качественную переменную с двумя уровнями - ESR. Речь здесь идет о клинических данных. ESR расшифровывается как erythrocyte sedimentation rate, т.е. скорость оседания эритроцитов (СОЭ, мм/ч). Многие заболевания сопровождаются повышенными значениями СОЭ в связи с увеличением концентрации определенных белков в плазме крови, и благодаря этому СОЭ потенциально может служить критерием для диагностики таких заболеваний. Конкретное значение СОЭ у того или иного пациента не очень важно, но известно, что у здоровых людей этот показатель обычно не превышает 20 мм/ч. Поэтому в рассматриваемом исследовании СОЭ регистрировали как качественную переменную с двумя уровнями - "ESR < 20" и "ESR > 20". Вопрос заключался в том, есть ли связь между между СОЭ и концентрацией двух конкретных белков в плазме крови пациентов - фибриногена и глобулина? При отсутствии такой связи СОЭ не может служить надежным диагностическим критерием.

Метод, при помощи которого был получен ответ на приведенный выше вопрос (логистическая регрессия), я опишу в другом сообщении. Здесь же сосредоточимся на разведочном анализе данных - с помощью функции cdplot() изобразим графически зависимость вероятности наблюдения "ESR < 20" и "ESR > 20" при разных концентрациях фибриногена и глобулина. Графики для обоих белков будут изображены на одном рисунке, и поэтому для начала разобьем область графического устройства R на две части при помощи функции layout() (подробнее см. ?layout):

layout(matrix(1:2, ncol = 2))

Теперь создадим сами графики:

cdplot(ESR ~ fibrinogen, data = plasma)
cdplot(ESR ~ globulin, data = plasma)


Из полученных графиков видно, что повышение концентрации обоих белков ведет к увеличению вероятности измерения СОЭ > 20 мм/ч, особенно в случае с фибриногеном.

У функции cdplot() есть несколько управляющих аргументов, большинство из которых являются стандартными для графических функций в R. Особенно полезными могут оказаться следующие аргументы.

При помощи аргумента col можно задать текстовый вектор с названиями цветов, которые будут использованы для заливки полигонов на графике:

cdplot(ESR ~ fibrinogen, c("coral", "skyblue"), data = plasma)
cdplot(ESR ~ globulin, c("coral", "skyblue"), data = plasma)


Аргумент yaxlabels позволяет "на лету" изменить метки анализируемой зависимой переменной:

cdplot(ESR ~ fibrinogen, col = c("coral", "skyblue"),
      yaxlabels = c("< 20 mm/h", "> 20 mm/h"), data = plasma)
cdplot(ESR ~ globulin, col = c("coral", "skyblue"),
      yaxlabels = c("< 20 mm/h", "> 20 mm/h"), data = plasma)


При расчете кривых плотности вероятности функция cdplot() обращается к функции density(), которую я описывал в одном из предыдущих сообщений. Поэтому непосредственно при вызове cdplot() можно изменять некоторые параметры density(), например, величину сглаживания кривой (аргумент bw):

cdplot(ESR ~ fibrinogen, col = c("coral", "skyblue"),
      yaxlabels = c("< 20 mm/h", "> 20 mm/h"), bw = 0.9, data = plasma)
cdplot(ESR ~ globulin, col = c("coral", "skyblue"),
      yaxlabels = c("< 20 mm/h", "> 20 mm/h"), bw = 0.9, data = plasma)

Более подробно аргументы функции cdplot() описаны в ее справочном файле, доступном по команде ?cdplot.


Комментариев нет :

Отправить комментарий