choicemodelr:数据结构错误?

时间:2017-04-25 09:17:56

标签: r bayesian choice

我希望你们中的一些人对Sermas和Colias的R包ChoiceModelR有一点经验,以估计一个Hierarchical Bayes Multinomial Logit模型。目前,我正在分析联合(测试数据)中的数据,以便为实际数据做好准备。数据文件具有所需的格式(UnitID Set Alt X_1 ... X_natts y)y是离散的。在每个选择集中,我有3个替代方案(alt:1-3)以及无选择选项(alt:4)。自变量是有效编码的(1,0,-1)。据我所知,这些数据是所需的格式。但是,我无法估计系数。如果我运行没有人口统计变量的模型,我会收到以下错误:

Error in Ops.data.frame(data[, 1], ID[i]) : 
‘==’ only defined for equally-sized data frames

使用人口统计变量我得到以下内容:

Error: number of rows in demos does not equal number of units

到目前为止,我在互联网上找不到错误解释,也不知道如何解决这个问题。我想,这是我看不到的数据文件中的一个简单错误。我已经尝试使用不同的编码,但我得到了相同的错误。这是我使用的代码:

> xcoding=c(0,0,0,0,0,0,0,0,0,0,0,0,0,0)
> mcmc = list(R = 20000, use = 10000)  
> options = list(none=FALSE, save=TRUE, keep=1)
> out = choicemodelr(data=robottest_bayes, xcoding, mcmc = mcmc, options = options)
> #with demographic variables
> out = choicemodelr(data=robottest_bayes, demos=robottest_bayes_demo, xcoding, mcmc = mcmc, options = options)

数据文件如下:

    > show(robottest_bayes)
# A tibble: 8,464 × 18
   respid  ques   alt apperance_burly apperance_intelligent apperance_pink features_car features_laundry features_compute
    <int> <int> <int>           <int>                 <int>          <int>        <int>            <int>            <int>
1       1     1     1               1                     0              0            1                0                0
2       1     1     2               0                     1              0            0                1                0
3       1     1     3               0                     0              1            0                0                1
4       1     1     4               0                     0              0            0                0                0
5       1     2     1               0                     1              0            0                0                0
6       1     2     2               0                     0              1            0                0                0
7       1     2     3               1                     0              0            0                0                0
8       1     2     4               0                     0              0            0                0                0
9       1     3     1               0                     0              1            0                0                0
10      1     3     2               1                     0              0            0                0                0
# ... with 8,454 more rows, and 9 more variables: features_dog <int>, features_vaccuum <int>, features_splines <int>,
#   brand_botpro <int>, brand_gizmobot <int>, price_10 <int>, price_11 <int>, nochoice <int>, choice <int>

> show(robottest_bayes_demo)
# A tibble: 529 × 3
   respid   sex   age
    <int> <int> <int>
1       1     0    42
2       2     0    55
3       3     0    37
4       4     0    35
5       5     1    41
6       6     1    35
7       7     0    56
8       8     0    27
9       9     1    36
10     10     1    42
# ... with 519 more rows

我非常感谢您的任何建议,并且已经感谢您花费在答案上的时间了!

贝斯茨, 迈克尔

1 个答案:

答案 0 :(得分:0)

您可以尝试从数据文件中排除无选项的行,并将脚本修改为:

options = list(none = TRUE,save = TRUE,keep = 1)

由于你有3个选择,对于被选人选择&#34;无选择选项&#34;的选择集,选择nubmer将是&#34;替代数量+ 1&#34;,即, 4. ChoiceModelR将识别出&#34; no choice选项&#34;被选中。

根据p。 5,ChoiceModelR的插图,

&#34; none:设置为TRUE以估计无参数,并且数据不包括 “无”的行(即无选择)(默认为FALSE)。&#34;

尝试是否有效。