在R中从平坦的5列数据框架中设置4-D列联表,其中包含3个因子

时间:2013-07-09 21:52:51

标签: r contingency

我在 R 中有一个数据框。 前两列是我的总和频率“是”和“否”。 最后3列是分类因素,每个都有一个标签。

我正在尝试用这种格式制作一张4-D列联表,我不知道从哪里开始这个过程。

我的数据如下:

    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之间的属性数。排序将按顺序排列相应的列,但不一定形成3个类别的每个组合的4-D框和相应的是(已售出)和不(未售出)。平均销售率为11.4%,我想让频率成形,对这些四向突发事件进行Chi2测试,以确定从平均值中产生最强异常值的组合。我有80046种组合,基本上(19选3),这三种选择中的每一种都有各自的桶,例如,第1行来自16个单元的4-D表(2 attr x 2 attr x 2 attr x [Y,N] ]),第2行来自96个单元格的4-D表(4 attr x 6 attr x 2 attr x [Y,N])......等等。

我不确定如何将这些数据转换为一种格式,以便开始使用table()xtabs()函数,从而开始使用chi2.test。 (在连接类别和值之前,我应该回到步骤吗?)

我是R的新手,但我知道它应该在为这些大型数组编程方面做得更好。我无法访问SPSS,但如果有更容易尝试的东西,我可以访问SAS(也是新的)......

任何方向都是一个很大的帮助。

-------------------期望的输出?回复--------------------- 好吧,table命令从

获取data.frame
Category 1       Category 2       Category 3       Y/N

......成为列联表格式,对吗?但是我已经在频率格式中得到了我的“是”和“否”,其中列出了三个类别。

我是否需要更改为此单实例格式并将我的80046行表分成数百万行?或者有没有办法启动table命令,其频率为是和否已列在两列中?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可以创建一个变量,该变量给出Yes的百分比为Yes + No:查看这是否适合您(假设您的数据是样本)。

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