使用mnlogit R包

时间:2017-07-14 19:29:30

标签: r mlogit bigdata

我目前正在开展一个涉及估算多项Logit模型的行为建模项目。通过互联网搜索后,我遇到了mnlogit软件包,它似乎非常适合我。

我试图建模的问题可以描述如下:向客户提供5种产品,他从中挑选1或决定不挑选任何产品。这些产品因价格和交货时间而异。这些产品的价格和交货时间在所有客户中都是固定的。 因此,客户可以从6种替代品中选择1,2,3,4,5和0.替代品1代表产品1,而替代品0代表不挑选任何产品的选择。产品1和2售价1美元,产品3和4售价2美元,产品5售价1美元。另一方面,替代0成本为0.

Raw Data

为了模拟客户的决定,我自行生成了7个参数。我将“价格”定义为替代的自变量,这意味着所有替代品的价格将对产品效用具有相同的权重。此外,我将'Alternative'定义为另一个特定变量,产生另外6个参数。我的目标是模拟产品的交付时间,因为每个替代品都有固定的交货时间。我使用以下表达式计算了产品的效用:

product_utility =( B_alternative [alternativeNum] * alternativeNum)+( B_price * productPrice)

其中B_alternative是我的替代参数的向量:[0,0.6,0.5,0.45,0.3,0.3],该向量的每个索引代表一个替代数字(B_alternative [0]:替代0的参数); 而B_price是我的价格参数:-0.5。

因此,我为每种产品计算的效用是:0.00; 0.10; 0.50; 0.35; 0.20; 1.00,是替代0的实用程序的第一个数字,产品5的最后一个数字。

在计算这些实用程序后,我计算了客户使用以下表达式选择第n个产品的概率:

Pn = exp(Un)/ sum(exp(U))

其中'sum(U)'是所有公用事业的总和

计算的概率(加起来为1)为:0.1097376; 0.1212788; 0.1809268; 0.1557251; 0.1340338; 0.2982978,各自的产品从0到5。

使用这些概率和随机函数,我在表格中生成了一个“模式”列,代表了客户的选择:

Data with choice column

最后,按照我在CRAN上找到的文档,我制作了这段代码来估算模型:

artificialData <- read.csv(PathToData, sep = ";")
# define model description (formula)
fm <- formula(MODE ~ PRICE - 1 | 1 | ALT)
# Define a mlogit data
TestData <- mlogit::mlogit.data(artificialData,
                                choice = "MODE", shape = "long",
                                alt.levels = c(1,2,3,4,5,0),
                                id.var = "CUSTOMER_ID")
# Estimate mnl
fit <- mnlogit::mnlogit(fm, TestData)
print(summary(fit))

但是,无论我设置什么参数,我总是会收到这两条错误消息:

  

solve.default中的错误(hessian,gradient,tol = 1e-24):Lapack   例程dgesv:系统完全是单数:U [7,7] = 0

  

在sqrt(diag(vcov(object)))中:生成NaNs

0 个答案:

没有答案