Настройка 4-D таблицы непредвиденных обстоятельств в R из плоского, 5-столбцового data.frame с 3 факторами

У меня есть фрейм данных в R. Первые два столбца — мои суммарные частоты «Да» и «Нет». Последние 3 столбца представляют собой категориальные факторы, каждый из которых имеет метку.

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

Мои данные выглядят так:

    Sold    Unsold  Label1                   Label2                 Label3
1   3330    32102   AdvancedShopper: Y       TERR_USED: Non-TREE    SPINOFF: N
2   2735    30691   HSEHLD_INCDT_BAND: 0     CLM_FREE_INCDT_CT: 0   SPINOFF: N
3   3350    29485   TERR_USED: Non-TREE      CLM_FREE_INCDT_CT: 0   SPINOFF: N
4   3864    28657   SingleMulti: N           TERR_USED: Non-TREE    SPINOFF: N
5   2691    26355   TERR_USED: Non-TREE      HSEHLD_INCDT_BAND: 0   CLM_FREE_INCDT_CT: 0
6   2396    25884   TERR_USED: Non-TREE      HSEHLD_INCDT_BAND: 0   SPINOFF: N
7   2738    25172   Channel: Owned Agency    TERR_USED: Non-TREE    SPINOFF: N
8   3203    24425   TERR_USED: Non-TREE      FULL_CVG_FLG: Y        SPINOFF: N
9   2781    24163   SingleMulti: N           CLM_FREE_INCDT_CT: 0   SPINOFF: N
10  1950    22371   AdvancedShopper: Y       CLM_FREE_INCDT_CT: 0   SPINOFF: N
11  2644    21528   TERR_USED: Non-TREE      FULL_CVG_FLG: N        SPINOFF: N
12  2278    21736   Channel: Owned Agency    SingleMulti: N         SPINOFF: N
13  2324    21648   SingleMulti: N           HSEHLD_INCDT_BAND: 0   CLM_FREE_INCDT_CT: 0
14  3108    20780   Channel: Prudent         TERR_USED: Non-TREE    SPINOFF: N
15  2491    21216   TERR_USED: Non-TREE      PRIOR_BI: High         SPINOFF: N

Я начал с 8 столбцов: 3 категории + 3 значения для каждой категории + (1) количество написанных цитат и (1) количество продаж по этим цитатам = 8. Я объединил соответствующие категории и строки значений, чтобы сформировать три столбца выше. . У меня есть 19 категорий, каждая категория имеет свое количество атрибутов от 2 до 6. Сортировка упорядочит соответствующие столбцы, но не обязательно формирует 4-D поля для каждой комбинации 3 категорий и соответствующих Да (Продано) и Нет (не продано). Средний уровень продаж составляет 11,4%, и я хотел бы привести частоты в форму, чтобы запустить тесты Chi2 для этих четырехсторонних непредвиденных обстоятельств, чтобы определить комбинации, которые создают самые сильные выбросы из среднего значения. У меня есть 80046 комбинаций, по существу (19 выбирают 3), каждый из этих трех вариантов имеет свои соответствующие сегменты, например, строка 1 взята из 4-D таблицы из 16 ячеек (2 attr x 2 attr x 2 attr x [Y,N ]), строка 2 из четырехмерной таблицы из 96 ячеек (4 атрибута x 6 атрибутов x 2 атрибута x [Y,N])... и т. д.

Я не знаю, как преобразовать эти данные в формат, чтобы начать использовать функции table() и xtabs() и, следовательно, chi2.test. (Должен ли я вернуться к шагу до объединения категорий и значений?)

Я новичок в R, но я знаю, что он должен быть намного лучше при программировании для этих больших массивов. У меня нет доступа к SPSS, но у меня есть доступ к SAS (тоже новому), если там можно попробовать что-нибудь попроще...

Любое направление - большая помощь.

------------------- Желаемый результат? ответ --------------------- Итак, команда table берет data.frame из

Category 1       Category 2       Category 3       Y/N

...в формат таблицы непредвиденных обстоятельств, верно? Но у меня уже есть ответы «Да» и «Нет» в частотном формате с перечисленными тремя категориями.

Нужно ли мне перейти на этот формат одного экземпляра и разбить мою таблицу строк 80046 на миллионы строк? Или есть способ инициировать команду table с частотами Да и Нет, уже представленными в двух столбцах?


person user2566206    schedule 09.07.2013    source источник
comment
Пожалуйста, опубликуйте ожидаемый результат для ваших образцов данных   -  person Metrics    schedule 10.07.2013


Ответы (1)


В этом случае вы можете создать переменную, которая дает процент «Да» по сравнению с «Да + Нет»: посмотрите, работает ли это для вас (предположим, что ваши данные являются образцом).

mytab <- xtabs((100*Sold/(Sold+Unsold))~Label1+Label2+Label3, data=sample)

  > mytab
, , Label3 = CLM_FREE_INCDT_CT: 0

                       Label2
Label1                  CLM_FREE_INCDT_CT: 0 FULL_CVG_FLG: N FULL_CVG_FLG: Y HSEHLD_INCDT_BAND: 0 PRIOR_BI: High SingleMulti: N
  AdvancedShopper: Y                0.000000        0.000000        0.000000             0.000000       0.000000       0.000000
  Channel: Owned Agency             0.000000        0.000000        0.000000             0.000000       0.000000       0.000000
  Channel: Prudent                  0.000000        0.000000        0.000000             0.000000       0.000000       0.000000
  HSEHLD_INCDT_BAND: 0              0.000000        0.000000        0.000000             0.000000       0.000000       0.000000
  SingleMulti: N                    0.000000        0.000000        0.000000             9.694644       0.000000       0.000000
  TERR_USED: Non-TREE               0.000000        0.000000        0.000000             9.264615       0.000000       0.000000
                       Label2
Label1                  TERR_USED: Non-TREE
  AdvancedShopper: Y               0.000000
  Channel: Owned Agency            0.000000
  Channel: Prudent                 0.000000
  HSEHLD_INCDT_BAND: 0             0.000000
  SingleMulti: N                   0.000000
  TERR_USED: Non-TREE              0.000000

, , Label3 = SPINOFF: N

                       Label2
Label1                  CLM_FREE_INCDT_CT: 0 FULL_CVG_FLG: N FULL_CVG_FLG: Y HSEHLD_INCDT_BAND: 0 PRIOR_BI: High SingleMulti: N
  AdvancedShopper: Y                8.017762        0.000000        0.000000             0.000000       0.000000       0.000000
  Channel: Owned Agency             0.000000        0.000000        0.000000             0.000000       0.000000       9.486133
  Channel: Prudent                  0.000000        0.000000        0.000000             0.000000       0.000000       0.000000
  HSEHLD_INCDT_BAND: 0              8.182253        0.000000        0.000000             0.000000       0.000000       0.000000
  SingleMulti: N                   10.321407        0.000000        0.000000             0.000000       0.000000       0.000000
  TERR_USED: Non-TREE              10.202528       10.938276       11.593311             8.472419      10.507445       0.000000
                       Label2
Label1                  TERR_USED: Non-TREE
  AdvancedShopper: Y               9.398284
  Channel: Owned Agency            9.810104
  Channel: Prudent                13.010717
  HSEHLD_INCDT_BAND: 0             0.000000
  SingleMulti: N                  11.881553
  TERR_USED: Non-TREE              0.000000

Call: xtabs(formula = (100 * Sold/(Sold + Unsold)) ~ Label1 + Label2 + 
    Label3, data = l)
Number of cases in table: 150.7815 
Number of factors: 3 
Test for independence of all factors:
    Chisq = 412.2, df = 71, p-value = 1.48e-49
    Chi-squared approximation may be incorrect
person Metrics    schedule 09.07.2013
comment
Функция table принимает - person user2566206; 10.07.2013
comment
Это работает... но теперь мне нужно взаимодействовать с результирующими значениями, которые находятся в таблице 79x97x160... Пока не совсем уверен, как это сделать, и можно ли взвесить количество проданных и непроданных котировок в этих значениях Chi2 в как-то иначе... - person user2566206; 13.07.2013
comment
Я не понял, что вы говорите; откуда у вас 79*97*160 таблиц? - person Metrics; 13.07.2013