Как мне превратить числовой вывод boxplot (с plot = FALSE) в нечто полезное? - PullRequest
8 голосов
/ 13 января 2012

Я успешно использую функцию boxplot для генерации ... коробочных графиков. Теперь мне нужно сгенерировать таблицы, содержащие статистику, которую boxplot вычисляет для создания графиков.

Я делаю это с помощью опции plot=FALSE.

Проблема в том, что это производит данные в довольно странном формате, с которым я просто не могу ничего поделать. Вот пример:

structure(list(stats = structure(c(178.998262143545, 182.227431564442, 
202.108456373209, 220.375358994654, 221.990406228232, 216.59986775699, 
217.054997032148, 228.509462713206, 267.070720949859, 284.832378859975, 
189.864120937198, 201.876421960518, 219.525439081472, 234.260088973545, 
279.343359793024, 209.472617639903, 209.526516071858, 214.785213079737, 
230.027361556731, 240.0647114578, 202.057148813419, 207.375619207685, 
220.093663781351, 226.246698737471, 240.343646265795), .Dim = c(5L, 
5L)), n = c(4, 6, 8, 4, 8), conf = structure(c(171.971593703341, 
232.245319043076, 196.247705331772, 260.771220094641, 201.435457751239, 
237.615420411705, 198.589545146688, 230.980881012787, 209.552007821332, 
230.635319741371), .Dim = c(2L, 5L)), out = numeric(0), group = numeric(0), 
names = c("U", "UM", "M", "LM", "L")), .Names = c("stats", "n", "conf", "out", "group", 
"names"))

Мне нужна таблица для каждой статистики - min, max, медиана и квартили - и их значений для каждой группы (те, что в «именах»).

Может ли кто-нибудь помочь мне с этим? Я очень начинающий R.

Заранее спасибо!

Ответы [ 3 ]

23 голосов
/ 13 января 2012

boxplot возвращает структуру в R, называемую list.

Список более или менее является контейнером данных, в котором вы можете ссылаться на элементы по имени.Если вы делаете A <- boxplot(...), вы можете получить доступ к names с помощью A$names, conf с A$conf и т. Д.

Итак, посмотрите boxplot файл справки ?boxplot в разделе Value: (который сообщает вам, что возвращает boxplot), мы видим, что он возвращает список со следующими компонентами:

   stats: a matrix, each column contains the extreme of the lower
          whisker, the lower hinge, the median, the upper hinge and the
          extreme of the upper whisker for one group/plot.  If all the
          inputs have the same class attribute, so will this component.
       n: a vector with the number of observations in each group.    
    conf: a matrix where each column contains the lower and upper
          extremes of the notch.    
     out: the values of any data points which lie beyond the extremes
          of the whiskers.    
   group: a vector of the same length as ‘out’ whose elements indicate
          to which group the outlier belongs.    
   names: a vector of names for the groups.

Таким образом, таблица для каждой статистики находится в A$stats, каждый столбецпринадлежит к группе и содержит минимальный, нижний квартиль, медиану, верхний квартиль и максимум.

Вы можете сделать:

A <- boxplot(...)
mytable <- A$stats
colnames(mytable)<-A$names
rownames(mytable)<-c('min','lower quartile','median','upper quartile','max')
mytable 

, который возвращает (для mytable):

                      U       UM        M       LM        L
min            178.9983 216.5999 189.8641 209.4726 202.0571
lower quartile 182.2274 217.0550 201.8764 209.5265 207.3756
median         202.1085 228.5095 219.5254 214.7852 220.0937
upper quartile 220.3754 267.0707 234.2601 230.0274 226.2467
max            221.9904 284.8324 279.3434 240.0647 240.3436

Тогда вы можете обратиться к нему как mytable['min','U'].

4 голосов
/ 13 января 2012

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

quantile (x, probs = c (0, .25, .5,.75, 1))

quantile сам по себе не работает с группами, но вы можете объединить его с aggregate, поэтому он вызывается для каждой из групп, указанных в аргументе by (должен быть список, поэтому вы можете объединить несколько факторы группировки):

aggregate (chondro$x, by = list (chondro$clusters), 
           FUN = quantile, probs = c (0, .25, .5,.75, 1))

с результатом:

   Group.1   x.0%  x.25%  x.50%  x.75% x.100%
1  matrix -11.55  -6.55   5.45  14.45  22.45
2  lacuna -11.55  -2.55   4.45  10.45  22.45
3    cell  -8.55  -1.55  11.45  15.45  20.45

Если вы действительно хотите иметь номера коробочных графиков (например, как далеко проходят усы), взгляните на ? fivenum и ? boxplot.stats.

1 голос
/ 13 января 2012

Другие ответили на конкретный вопрос о возвращаемом объекте для функции boxplot, я бы просто добавил, что если вы хотите узнать о возвращаемых объектах в целом, то вам действительно нужно узнать о списках и о том, как использовать strфункция, которая обычно дает вам гораздо более осмысленный вид объекта, чем тот, который вы показываете выше.В пакете TeachingDemos также есть функция TkListView, которая обеспечивает более интерактивное изучение списка и других объектов.Использование str и names и подмножеств (см. Справку ("[")) позволит вам почувствовать, что находится в возвращаемом объекте (страница справки для функции, которая создала объект, также является хорошим местом для начала) и как получить нужные фрагменты.

...