matlab: группировка переменных для наблюдений, которые могут быть в нескольких группах

#matlab #grouping

#matlab #группировка

Вопрос:

Я хотел бы использовать функции групповой статистики MATLAB (например, grpstats) для данных, где каждое наблюдение может быть в нескольких группах. Например, в пицце может быть {‘pepperoni’, ‘mushroom’,’onions’} или {‘пепперони’} или что-то еще, а затем я хочу, чтобы статистика группы была заполнена: все пиццы с «пепперони», все они с «грибами» и т. Д.

В качестве альтернативы, если вы знаете способ сделать это вручную, не повторяя, как идиот, это также было бы полезно.

Ответ №1:

Просто поместите повторяющиеся меры в разные строки. Например:

 store = repmat(cellstr(num2str((1:3)')), 3, 1);
type  = repmat({'pepperoni', 'mushrooms', 'onions'}, 3, 1);
type  = Type(:);
score = dataset({randn(9,3), 'taste', 'looks', 'price'});

data = [dataset(store, type) score];

grpstats(data(:,2:end), 'type')
  

Необработанные данные:

 >> data

data = 

    store      type               taste       looks       price   
    '1'        'pepperoni'        -0.19224    -0.44463    -0.50782
    '2'        'pepperoni'        -0.27407    -0.15594    -0.32058
    '3'        'pepperoni'          1.5301     0.27607    0.012469
    '1'        'mushrooms'        -0.24902    -0.26116     -3.0292
    '2'        'mushrooms'         -1.0642     0.44342    -0.45701
    '3'        'mushrooms'          1.6035     0.39189      1.2424
    '1'        'onions'             1.2347     -1.2507     -1.0667
    '2'        'onions'           -0.22963    -0.94796     0.93373
    '3'        'onions'            -1.5062    -0.74111     0.35032
  

Статистика группы:

 >> grpstats(data(:,2:end), 'type')

ans = 

                 type               GroupCount    mean_taste    mean_looks    mean_price
    pepperoni    'pepperoni'        3              0.35459      -0.10817      -0.27197  
    mushrooms    'mushrooms'        3              0.09674       0.19138      -0.74791  
    onions       'onions'           3             -0.16704      -0.97992      0.072449  
  

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

1. Спасибо — это, очевидно, работает. В качестве общего решения мне кажется неидеальным по нескольким причинам: если вы / не / фильтруете по группе, вы должны помнить, что нужно сворачивать повторы, и это может занять много памяти, если наблюдения принадлежат многим группам. Но это может быть лучшим дешевым решением.

2. @Edward Я согласен, что сначала кажется немного неудобным помещать в таблицу совершенно новую строку для этого, где в реальной базе данных вы могли бы просто добавить теги к существующим наблюдениям. Однако это стандартный способ структурирования ваших данных в большинстве статистических программ. Одна приятная вещь в этом заключается в том, что это упрощает выполнение сложного логического подмножества ваших данных. Например, что, если бы мы хотели составить матрицу гистограмм для каждой уникальной комбинации store и пиццы type ? Такая организация позволяет очень легко выполнять нарезку.