I am running separate zero-inflated negative binomial models on online review helpfulness
data (helpful_vote as DV) for 4 product categories. The specification is:
zinb helpful_vote two_sided z_width_ratio z_log_avg_attr_length z_image_count
z_log_review_length z_review_age,
inflate(i.store_id z_price z_rating z_readability_fog verified_purchase
z_log_review_length z_review_age)
vce(cluster parent_asin_id) difficult iterate(200)
store_id is a categorical brand dummy with 11 levels (top-10 brands by review count
+ "Other"), entered with i. notation in the inflate (zero) equation.
Problem 1 - non-convergence:
For some categories, the model does not converge at all. The log likelihood repeats
"(not concave)" for many iterations, stabilizes at a fixed value, and then
"convergence not achieved" is returned (or the iteration limit is hit).
Problem 2 - convergence with unidentified brand coefficients:
For other categories, Stata reports convergence (log likelihood stabilizes, no error),
but several store_id coefficients in the inflate part are extremely large
(absolute value roughly 15 to 28), and either:
- the standard error is missing (shown as "."), or
- the standard error is itself extremely large (around 12-14),
which is clearly implausible.
All other variables in the same inflate equation (price, rating, readability,
verified_purchase, review_age) have normal, interpretable coefficients and
standard errors in the same run.
What I have checked so far:
- I directly tabulated brand-level zero-vote rates in the raw data (outside the
model). Rates range smoothly from about 40% to 80% across brands in the
problematic categories. No single brand has a rate near 0% or 100%, so this
does not look like classic univariate complete/quasi-complete separation.
- Categories that behave well (normal convergence, normal SEs on the same brand
dummy) have similar sample sizes and a similarly structured brand variable
(10 brands + Other), so it is not simply "too few observations per category."
Questions:
1. Is there a standard way to formally check for quasi-separation in a
multi-predictor logit (the inflate equation here), beyond looking at
univariate zero-rates by category?
2. Given that some categories converge fine and others do not with an
essentially identical specification, what would be the most useful next
diagnostic step (e.g., dropping predictors one at a time from inflate(),
collapsing brand categories further, checking for interactions between
brand and another inflate-part variable)?
3. Is Firth's penalized/bias-reduced logistic regression, or any other
standard remedy for near-separation, applicable to the inflate part of a
zinb model in Stata? Or is there a more standard approach specifically
recommended for zero-inflated count models?
Any pointers to the right diagnostic approach, relevant Stata commands, or
literature would be appreciated.
data (helpful_vote as DV) for 4 product categories. The specification is:
zinb helpful_vote two_sided z_width_ratio z_log_avg_attr_length z_image_count
z_log_review_length z_review_age,
inflate(i.store_id z_price z_rating z_readability_fog verified_purchase
z_log_review_length z_review_age)
vce(cluster parent_asin_id) difficult iterate(200)
store_id is a categorical brand dummy with 11 levels (top-10 brands by review count
+ "Other"), entered with i. notation in the inflate (zero) equation.
Problem 1 - non-convergence:
For some categories, the model does not converge at all. The log likelihood repeats
"(not concave)" for many iterations, stabilizes at a fixed value, and then
"convergence not achieved" is returned (or the iteration limit is hit).
Problem 2 - convergence with unidentified brand coefficients:
For other categories, Stata reports convergence (log likelihood stabilizes, no error),
but several store_id coefficients in the inflate part are extremely large
(absolute value roughly 15 to 28), and either:
- the standard error is missing (shown as "."), or
- the standard error is itself extremely large (around 12-14),
which is clearly implausible.
All other variables in the same inflate equation (price, rating, readability,
verified_purchase, review_age) have normal, interpretable coefficients and
standard errors in the same run.
What I have checked so far:
- I directly tabulated brand-level zero-vote rates in the raw data (outside the
model). Rates range smoothly from about 40% to 80% across brands in the
problematic categories. No single brand has a rate near 0% or 100%, so this
does not look like classic univariate complete/quasi-complete separation.
- Categories that behave well (normal convergence, normal SEs on the same brand
dummy) have similar sample sizes and a similarly structured brand variable
(10 brands + Other), so it is not simply "too few observations per category."
Questions:
1. Is there a standard way to formally check for quasi-separation in a
multi-predictor logit (the inflate equation here), beyond looking at
univariate zero-rates by category?
2. Given that some categories converge fine and others do not with an
essentially identical specification, what would be the most useful next
diagnostic step (e.g., dropping predictors one at a time from inflate(),
collapsing brand categories further, checking for interactions between
brand and another inflate-part variable)?
3. Is Firth's penalized/bias-reduced logistic regression, or any other
standard remedy for near-separation, applicable to the inflate part of a
zinb model in Stata? Or is there a more standard approach specifically
recommended for zero-inflated count models?
Any pointers to the right diagnostic approach, relevant Stata commands, or
literature would be appreciated.

Comment