我目前正在开展一个涉及估算多项Logit模型的行为建模项目。通过互联网搜索后,我遇到了mnlogit软件包,它似乎非常适合我。
我试图建模的问题可以描述如下:向客户提供5种产品,他从中挑选1或决定不挑选任何产品。这些产品因价格和交货时间而异。这些产品的价格和交货时间在所有客户中都是固定的。 因此,客户可以从6种替代品中选择1,2,3,4,5和0.替代品1代表产品1,而替代品0代表不挑选任何产品的选择。产品1和2售价1美元,产品3和4售价2美元,产品5售价1美元。另一方面,替代0成本为0.
为了模拟客户的决定,我自行生成了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。
使用这些概率和随机函数,我在表格中生成了一个“模式”列,代表了客户的选择:
最后,按照我在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