2015-10-30 2 views
0

Я пытаюсь получить значения моего boxplot, но я не могу заставить его работать, когда я использую тильду formular.Получить резюме boxplot с тильдой formular

Я ощущение, что это всего лишь простой вопрос, но я использую неправильные термы, чтобы найти ответ ...


Вот что я пробовал:

numbers <- c(6, 1, 1, 1, 3, 3, 2, 3, 13, 13, 4, 7, 38, 1, 12, 9, 4, 65, 9, 23) 
groups <- c("A", "B", "D", "E", "F", "G", "B", "C", "D", "E", "F", "A", "B", "C", "D", "E", "F", "A", "B", "D") 
boxplot(numbers~groups) 
summary(numbers~groups) 

r boxplot example

Я просто получаю выход

Length Class Mode 
     3 formula call 

Как получить значения boxplot (как мин., 1. Королева Медиана и т.д.)

Вывод должен выглядеть так:

 A   B  (...) 
Min. : ? Min. : ? (...) 
1st Qu.: ? 1st Qu.: ? (...) 
Median : ? Median : ? (...) 
Mean : ? Mean : ? (...) 
3rd Qu.: ? 3rd Qu.: ? (...) 
Max. : ? Max. : ? (...) 

ответ

2

Попробуйте использовать агрегатную функцию

aggregate(numbers,list(groups),summary) 

     Group.1 x.Min. x.1st Qu. x.Median x.Mean x.3rd Qu. x.Max. 
1  A 6.000  6.500 7.000 26.000 36.000 65.000 
2  B 1.000  1.750 5.500 12.500 16.250 38.000 
3  C 1.000  1.500 2.000 2.000  2.500 3.000 
4  D 1.000  9.250 12.500 12.250 15.500 23.000 
5  E 1.000  5.000 9.000 7.667 11.000 13.000 
6  F 3.000  3.500 4.000 3.667  4.000 4.000 
7  G 3.000  3.000 3.000 3.000  3.000 3.000 
1

Я на самом деле не знаю, если вы можете сделать это с помощью тильды оператора в команде summary. Но есть альтернативы, такие как tapply:

tapply(numbers,groups,summary) 

или describeBy функцию из Psych пакета:

# install.packages("psych") 
library("psych") 
describeBy(numbers,groups,mat=TRUE) 

Выход:

item group1 vars n  mean   sd median trimmed mad min max range  skew 
11 1  A 1 3 26.000000 33.7786915 7.0 26.000000 1.4826 6 65 59 0.38452071 
12 2  B 1 4 12.500000 17.3685540 5.5 12.500000 5.9304 1 38 37 0.66132091 
13 3  C 1 2 2.000000 1.4142136 2.0 2.000000 1.4826 1 3  2 0.00000000 
14 4  D 1 4 12.250000 8.9953692 12.5 12.250000 8.1543 1 23 22 -0.06221018 
15 5  E 1 3 7.666667 6.1101009 9.0 7.666667 5.9304 1 13 12 -0.20782656 
16 6  F 1 3 3.666667 0.5773503 4.0 3.666667 0.0000 3 4  1 -0.38490018 
17 7  G 1 1 3.000000   NA 3.0 3.000000 0.0000 3 3  0   NA 
    kurtosis   se 
11 -2.333333 19.5021366 
12 -1.756576 8.6842770 
13 -2.750000 1.0000000 
14 -1.878463 4.4976846 
15 -2.333333 3.5276684 
16 -2.333333 0.3333333 
17  NA   NA 
2

Данные находятся в функции boxplot. Если вы сохраните его как объект, он будет содержать все статистические данные в матрице.

bp <- boxplot(numbers~groups) 
bp$stats 

    [,1] [,2] [,3] [,4] [,5] [,6] [,7] 
[1,] 6.0 1.0 1 1.0 1 3.0 3 
[2,] 6.5 1.5 1 6.5 5 3.5 3 
[3,] 7.0 5.5 2 12.5 9 4.0 3 
[4,] 36.0 23.5 3 18.0 11 4.0 3 
[5,] 65.0 38.0 3 23.0 13 4.0 3 

В помощи boxplot вы можете увидеть его содержит список компонентов, один из которых содержит информацию вам нужно.

статистика матрицу, каждый столбец содержит экстремум нижнего усов, нижний шарнир, медианы, верхнего шарнира и крайнего верхнего уса для одной группы/участка. Если все входы имеют одинаковый атрибут класса , то и этот компонент.

Та же статистика вычисляется с помощью функции fivenum

+0

Параметр 'агрегатного()' + 'резюме()' функция имеет преимущество, что также возвращает среднее значение, как я просил в этом вопросе. – wittich

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