如何使用具有不同选择集的mnlogit用于不同的替代方案

时间:2018-02-19 05:20:23

标签: r mlogit

我有一个类似于下面的数据集,我为不同的选择设置了不同的选择。例如,对于chid=1,我们有alt1alt4,但对于chid=2,我们有alt5alt9

mode    income  alt     price   catch chid  weight
FALSE   7083    alt1    157.93  0.0678  1   10
FALSE   7083    alt2    157.93  0.2601  1   10
TRUE    7083    alt3    182.93  0.5391  1   10
FALSE   7083    alt4    157.93  0.0503  1   10
FALSE   1250    alt5    15.11   0.1049  2   20
FALSE   1250    alt6    10.53   0.1574  2   20
TRUE    1250    alt7    34.53   0.4671  2   20
FALSE   1250    alt8    15.11   0.0451  2   20
FALSE   3750    alt9    161.87  0.5333  2   20
TRUE    3750    alt10   24.33   0.2413  3   5
FALSE   3750    alt11   59.33   1.0266  3   5
FALSE   3750    alt12   161.87  0.4522  3   5
TRUE    7083    alt1    157.93  0.0678  4   2
FALSE   7083    alt2    157.93  0.2601  4   2
FALSE   7083    alt3    182.93  0.5391  4   2
FALSE   7083    alt4    157.93  0.0503  4   2
FALSE   1250    alt5    15.11   0.1049  5   40
TRUE    1250    alt6    10.53   0.1574  5   40
FALSE   1250    alt7    34.53   0.4671  5   40
FALSE   1250    alt8    15.11   0.0451  5   40
FALSE   3750    alt9    161.87  0.5333  5   40
FALSE   3750    alt10   24.33   0.2413  6   30
TRUE    3750    alt11   59.33   1.0266  6   30
FALSE   3750    alt12   161.87  0.4522  6   30
FALSE   7083    alt1    157.93  0.0678  7   25
TRUE    7083    alt2    157.93  0.2601  7   25
FALSE   7083    alt3    182.93  0.5391  7   25
FALSE   7083    alt4    157.93  0.0503  7   25
TRUE    1250    alt5    15.11   0.1049  8   20
FALSE   1250    alt6    10.53   0.1574  8   20
FALSE   1250    alt7    34.53   0.4671  8   20
FALSE   1250    alt8    15.11   0.0451  8   20
FALSE   3750    alt9    161.87  0.5333  8   20
FALSE   3750    alt10   24.33   0.2413  9   15
FALSE   3750    alt11   59.33   1.0266  9   15
TRUE    3750    alt12   161.87  0.4522  9   15
FALSE   7083    alt1    157.93  0.0678  10  8
FALSE   7083    alt2    157.93  0.2601  10  8
FALSE   7083    alt3    182.93  0.5391  10  8
TRUE    7083    alt4    157.93  0.0503  10  8
FALSE   1250    alt5    15.11   0.1049  11  6
FALSE   1250    alt6    10.53   0.1574  11  6
FALSE   1250    alt7    34.53   0.4671  11  6
TRUE    1250    alt8    15.11   0.0451  11  6
FALSE   3750    alt9    161.87  0.5333  11  6
FALSE   3750    alt10   24.33   0.2413  12  12
FALSE   3750    alt11   59.33   1.0266  12  12
TRUE    3750    alt12   161.87  0.4522  12  12
FALSE   1250    alt5    15.11   0.1049  13  15
FALSE   1250    alt6    10.53   0.1574  13  15
FALSE   1250    alt7    34.53   0.4671  13  15
FALSE   1250    alt8    15.11   0.0451  13  15
TRUE    3750    alt9    161.87  0.5333  13  15

我可以使用MNL作为每个替代品的情况。

dat1 <- fread('test_mnlogit.csv')
dat2 <- mlogit.data(data = dat1,choice = "mode", shape = "long", varying = 3:4, alt.var = "alt",chid.var = "chid")
fm <- formula(mode~-1+price+catch)
fit <- mnlogit(fm, dat2)

但是当我对以下数据类型使用类似的代码时,我得到以下错误。

Error in mnlogit(fm, dat2) : 
  Mismatch between number of rows in data and number of choices.

您可以在此处下载测试数据。

1 个答案:

答案 0 :(得分:0)

据我所知,mlogit并不处理不同的选择集。如果通用选择集包含12个替代选项,则所有情况都必须具有相同的12个选项。