如何准备数据集以在stata中使用mixlogit

如何准备数据集以在stata中使用mixlogit,stata,Stata,我计划在stata中使用mixlogit命令。该命令对如何准备数据有特定要求。下面给出了一个例子 choice speed cost group id 0 5 3 1 1 1 8 4 1 1 0 6 3 1 1 0 3 2 2 1 0

我计划在stata中使用mixlogit命令。该命令对如何准备数据有特定要求。下面给出了一个例子

    choice speed cost group  id

      0      5    3     1    1         
      1      8    4     1    1         
      0      6    3     1    1       
      0      3    2     2    1         
      0      2    2     2    1         
      1      5    4     2    1         
      0      6    4     2    1   
背景是个人根据汽车特征选择汽车。Choice是一个表示选择的二进制变量。速度、成本是其特点。Id表示个人标识符

我有一个这样的数据集

    Drug Half_life Price ID
    1      8        10    1
    2      7         6    2
其中,药物是所选药物的id,半衰期和价格是药物特征,id是个体标识符


现在的问题是我没有观察到每个人都没有选择的药物。我只有实际选择的观察结果。我应该如何准备数据集,使其看起来像第一个描述的数据集

除非您的数据具有更复杂的结构(价格因人而异,ID不是按顺序排列的),否则类似的方法可能有效:

这将使您获得以下信息:

Drug   Half_life   Price   ID   choice  
   1          8      10    1        1  
   1          8      10    2        0  
   2          7       6    1        0  
   2          7       6    2        1  
另一种方法是制作药物数据集并与用户“交叉”:

tempfile drugs

preserve
keep Drug Half_life Price
duplicates drop
save `drugs'
restore

keep Drug ID
rename Drug choice
cross using `drugs'
replace choice=0 if Drug!=choice
replace choice=1 if Drug==choice

我有一个更复杂的数据结构。首先,它是一个面板。第二,每种药物的价格因人而异。如果您不知道如何修改我的代码,为什么不在问题中添加一个更现实的数据示例?另外,给出特定数据示例所需的输出。我正在尝试修改代码。小组不是问题。显然,id不连续是个问题。需要各种各样的假设来给出解决方案。例如,如果某个人没有购买,并且价格因人而异,您如何知道他所报的价格?时间变量看起来像什么?面板是否平衡?如果你的ID有很多漏洞,那么使用第二种方法可能是最简单的。我同意。这就是为什么很难给出问题中的所有细节。我正在努力。当我弄清楚做这件事的必要步骤和需要的假设时,我会编辑这些问题。谢谢你的建议。
tempfile drugs

preserve
keep Drug Half_life Price
duplicates drop
save `drugs'
restore

keep Drug ID
rename Drug choice
cross using `drugs'
replace choice=0 if Drug!=choice
replace choice=1 if Drug==choice