使用R

时间:2016-03-30 15:05:27

标签: r regression

我需要制作一个模型,该模型可以发现注册用户购买某些计划或没有计划的可能性(即,仅使用免费计划或不会做任何事情),如果他们这样做,可以在什么时间之后。 我有大约13 000行的数据,其中大约12 000行是免费用户(从未付费 - 0值),另外1 000个是在一段时间后(从1到690天)支付的,我也有一些计数和分类数据 - 国家,用户客户的数量,他使用计划的次数,计划(保费,免费,保费加)。

支付与否后的平均时间约为6.37,方差为1801.17,没有零 - 100和19012,这表明我应该使用负二项模型。

但我不确定哪种型号最合适;我正在考虑零膨胀的负二项式或障碍模型。

这是diff.time的直方图,有0而没有0数据:

histogram of data without 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天)

1 个答案:

答案 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建立为零与非零 - 并根据这些结果继续使用零截断计数部分。