我需要制作一个模型,该模型可以发现注册用户购买某些计划或没有计划的可能性(即,仅使用免费计划或不会做任何事情),如果他们这样做,可以在什么时间之后。 我有大约13 000行的数据,其中大约12 000行是免费用户(从未付费 - 0值),另外1 000个是在一段时间后(从1到690天)支付的,我也有一些计数和分类数据 - 国家,用户客户的数量,他使用计划的次数,计划(保费,免费,保费加)。
支付与否后的平均时间约为6.37,方差为1801.17,没有零 - 100和19012,这表明我应该使用负二项模型。
但我不确定哪种型号最合适;我正在考虑零膨胀的负二项式或障碍模型。
这是diff.time的直方图,有0而没有0数据:
我使用pscl
包尝试了这些模型:
summary(m1 <- zeroinfl(diff.time3 ~
factor(Registration.country) + factor(Plan) + Campaigns.sent +
Number.of.subscribers |
factor(Registration.country) + factor(Plan) + Campaigns.sent +
Number.of.subscribers,
data=df , link="logit",dist= "negbin"))
或与hurdle()
相同
但他们给了我一个错误:
在quantile.default(x $ residuals)中出错:如果'na.rm'为FALSE则缺少值和NaN不允许另外:警告消息:glm.fit:算法没有收敛
hurdle()
:
solve.default中的错误(as.matrix(fit_count $ hessian)):Lapack例程dgesv:系统完全是单数:U [3,3] = 0
我之前从未尝试过这些模型,因此我不确定如何解决这些错误或者我选择了正确的模型。
不幸的是,我没有机会分享我的部分数据,但我会尝试解释它们:
第一栏“计划” - 大多数数据是“免费”(约12 000),还有“收入更高”,“高级”或“高级试用”,其中“免费”和“高级试用”未支付。 第二栏“使用计划” - 约8 000行为0,1 000 - 1,3 000 - 从1到10,另外1 000从10到510 第3栏“客户”描述了用户拥有的客户数量 - 约2 000人拥有0,4 0000 - 1 - 3,3 000 - 10-200,2 000 - 200 - 1000,2 000 - 1000 - 340 000 第4栏“登记国” - 36个不同的国家,超过一半的数据是美国,其他有5到几百行。 第5列是diff.time,应该是我的因变量,正如我之前所说,大多数数据是0(12 000),其他数据是从1天到690天)
答案 0 :(得分:2)
如果您的实际数据与您发布的数据的结构类似,那么您将无法估算与您指定的模型类似的模型。我们先来看一下您在Google云端硬盘上发布的数据:
load("duom.Rdata")
table(a$diff.time3 > 0)
## FALSE TRUE
## 950 50
因此,响应有一些变化,但不是很多。您只有5%的非零,总共50个观察值。仅从这些信息来看,估计偏差减少的二元模型(brglm
)到障碍部分(零与非零)似乎更合理。
对于零截断计数部分,您可以拟合模型,但需要注意要包含哪些效果,因为只有50个自由度。您可以使用R-Forge提供的zerotrunc
包中的countreg
函数估算障碍模型的零截断部分。
你也应该清理你的因素。通过在公式中重新应用factor
函数,排除出现零的级别。但也有一个级别只有一次你不会得到有意义的结果。
table(factor(a$Plan))
## Earning much more Free Mailing Premium
## 1 950 1 24
## Premium trial
## 24
table(factor(a$Registration.country))
## australia Australia Austria Bangladesh Belgium brasil Brasil
## 1 567 7 5 56 1 53
## Bulgaria Canada
## 10 300
此外,您需要使用所有小写字母清理国家/地区级别。
之后,我将首先将二进制GLM建立为零与非零 - 并根据这些结果继续使用零截断计数部分。