Open navigation
OpenOpen workspace

Statistical validation

Market research tool cases

14 reference cases with 284 compared values. Each table lists the Crosstabs result, the reference result, their absolute difference and the tolerance, recomputed when this page is built.

Last updated

Scope

Automated parity evidence for the market research tools against established independent implementations; not certification or independent human review.

The summary, the other reference cases and the limits of this evidence are on Statistical validation. The same cases are machine-readable in the market research reference manifest.

All 14 cases

Rim weighting: age × sex × region margins, n = 120

Reference: ipfn 1.4.4. Method: ipfn.ipfn on the respondent-level data frame (one dimension per raking variable), convergence_rate=1e-15, rate_tolerance=0; Kish effective n = (Σw)²/Σw², efficiency = n_eff/n, design effect = n/n_eff (NumPy). Each raking factor is the returned weight divided by the base weight and is constant within a cell of the raking variables.

MetricCrosstabsReference|Δ|Tolerance
Raking factor: 18-34 / Female / North0.6140980785380.6140980785383.3 × 10−131.0 × 10−9
Raking factor: 18-34 / Female / South0.7434501382260.7434501382263.9 × 10−131.0 × 10−9
Raking factor: 18-34 / Female / West1.541608258541.541608258544.4 × 10−131.0 × 10−9
Raking factor: 18-34 / Male / North0.3412292275540.3412292275547.1 × 10−141.0 × 10−9
Raking factor: 18-34 / Male / South0.4131048854540.4131048854547.8 × 10−141.0 × 10−9
Raking factor: 18-34 / Male / West0.8566087627310.8566087627314.1 × 10−141.0 × 10−9
Raking factor: 35-54 / Female / North1.253908216161.253908216163.8 × 10−141.0 × 10−9
Raking factor: 35-54 / Female / South1.518028258361.518028258361.6 × 10−141.0 × 10−9
Raking factor: 35-54 / Female / West3.147763083853.147763083857.0 × 10−131.0 × 10−9
Raking factor: 35-54 / Male / North0.6967455964730.6967455964732.1 × 10−131.0 × 10−9
Raking factor: 35-54 / Male / South0.8435063194460.8435063194462.7 × 10−131.0 × 10−9
Raking factor: 35-54 / Male / West1.749083417071.749083417079.8 × 10−131.0 × 10−9
Raking factor: 55+ / Female / North2.05861625172.05861625173.6 × 10−131.0 × 10−9
Raking factor: 55+ / Female / South2.492237950862.492237950863.9 × 10−131.0 × 10−9
Raking factor: 55+ / Female / West5.167871266345.167871266344.2 × 10−131.0 × 10−9
Raking factor: 55+ / Male / North1.14388899421.14388899421.8 × 10−131.0 × 10−9
Raking factor: 55+ / Male / South1.384834866891.38483486692.5 × 10−131.0 × 10−9
Sum of weights1201201.1 × 10−131.0 × 10−9
Smallest weight0.3412292275540.3412292275547.1 × 10−141.0 × 10−9
Largest weight5.167871266345.167871266344.2 × 10−131.0 × 10−9
Effective sample size (Kish)80.873539068380.87353906832.9 × 10−121.0 × 10−9
Weighting efficiency (%)67.394615890367.39461589032.4 × 10−121.0 × 10−9
Design effect1.483798055361.483798055365.4 × 10−141.0 × 10−11

Rim weighting with base weights: age × sex × region margins, n = 150

Reference: ipfn 1.4.4. Method: ipfn.ipfn on the respondent-level data frame (one dimension per raking variable), convergence_rate=1e-15, rate_tolerance=0; Kish effective n = (Σw)²/Σw², efficiency = n_eff/n, design effect = n/n_eff (NumPy). Each raking factor is the returned weight divided by the base weight and is constant within a cell of the raking variables.

MetricCrosstabsReference|Δ|Tolerance
Raking factor: 18-34 / Female / North0.6039434508080.6039434508086.2 × 10−141.0 × 10−9
Raking factor: 18-34 / Female / South0.7093657266250.7093657266258.3 × 10−141.0 × 10−9
Raking factor: 18-34 / Female / West0.8264632314410.8264632314411.0 × 10−131.0 × 10−9
Raking factor: 18-34 / Male / North0.5367224945010.5367224945013.1 × 10−141.0 × 10−9
Raking factor: 18-34 / Male / South0.6304109131370.6304109131374.5 × 10−141.0 × 10−9
Raking factor: 18-34 / Male / West0.7344750681510.7344750681515.5 × 10−141.0 × 10−9
Raking factor: 35-54 / Female / North0.945470989440.945470989442.9 × 10−141.0 × 10−9
Raking factor: 35-54 / Female / South1.110509128841.110509128841.6 × 10−141.0 × 10−9
Raking factor: 35-54 / Female / West1.293824791251.293824791251.5 × 10−141.0 × 10−9
Raking factor: 35-54 / Male / North0.8402368586840.8402368586846.4 × 10−141.0 × 10−9
Raking factor: 35-54 / Male / South0.9869056929090.9869056929096.0 × 10−141.0 × 10−9
Raking factor: 35-54 / Male / West1.149817699781.149817699786.6 × 10−141.0 × 10−9
Raking factor: 55+ / Female / North1.765842464191.765842464194.0 × 10−141.0 × 10−9
Raking factor: 55+ / Female / South2.074081805242.074081805241.6 × 10−141.0 × 10−9
Raking factor: 55+ / Female / West2.416457811112.416457811111.0 × 10−141.0 × 10−9
Raking factor: 55+ / Male / North1.569298203351.569298203351.1 × 10−131.0 × 10−9
Raking factor: 55+ / Male / South1.843229459341.843229459349.8 × 10−141.0 × 10−9
Raking factor: 55+ / Male / West2.147497853482.147497853481.1 × 10−131.0 × 10−9
Sum of weights188.375188.3752.8 × 10−141.0 × 10−9
Smallest weight0.2828527546020.2828527546021.6 × 10−141.0 × 10−9
Largest weight4.123195878674.123195878672.1 × 10−131.0 × 10−9
Effective sample size (Kish)104.732300938104.7323009383.2 × 10−121.0 × 10−9
Weighting efficiency (%)69.821533958569.82153395852.2 × 10−121.0 × 10−9
Design effect1.432222902171.432222902174.4 × 10−141.0 × 10−11

MaxDiff: 7 items, 40 respondents × 7 tasks of 4 items

Reference: statsmodels 0.15.0. Method: statsmodels.discrete.conditional_models.ConditionalLogit (Newton, numerical Hessian) on the sequential best-worst design: each task contributes a best choice among the items shown (+1 dummy) and a worst choice among the remaining items (−1 dummy); the last item is the reference. Utilities are zero-centred. Counts score = (best − worst) / times shown; rescaled score = exp(u)/(exp(u)+a−1), normalised to 100, with a = 4 items per task.

MetricCrosstabsReference|Δ|Tolerance
Counts score: Battery0.3173652694610.31736526946101.0 × 10−12
Counts score: Camera0.04545454545450.045454545454501.0 × 10−12
Counts score: Design-0.0931677018634-0.093167701863401.0 × 10−12
Counts score: Price0.3537414965990.35374149659901.0 × 10−12
Counts score: Screen0.04117647058820.041176470588201.0 × 10−12
Counts score: Storage-0.486301369863-0.48630136986301.0 × 10−12
Counts score: Support-0.188571428571-0.18857142857101.0 × 10−12
Utility (zero-centred): Battery0.7101521189470.7101521189472.2 × 10−161.0 × 10−7
Utility (zero-centred): Camera0.1401855276280.14018552762801.0 × 10−7
Utility (zero-centred): Design-0.236719513528-0.2367195135282.8 × 10−171.0 × 10−7
Utility (zero-centred): Price0.8347795484520.8347795484522.2 × 10−161.0 × 10−7
Utility (zero-centred): Screen0.07007156940.070071569401.0 × 10−7
Utility (zero-centred): Storage-1.09908854988-1.099088549884.4 × 10−161.0 × 10−7
Utility (zero-centred): Support-0.419380701017-0.4193807010172.2 × 10−161.0 × 10−7
Standard error vs Support: Battery0.1796425513540.1796425472584.1 × 10−91.0 × 10−6
Standard error vs Support: Camera0.1787967559540.1787967509245.0 × 10−91.0 × 10−6
Standard error vs Support: Design0.1757118153430.1757118015451.4 × 10−81.0 × 10−6
Standard error vs Support: Price0.1869847236310.1869847183875.2 × 10−91.0 × 10−6
Standard error vs Support: Screen0.1750399334880.1750399250868.4 × 10−91.0 × 10−6
Standard error vs Support: Storage0.1867034817610.1867034783083.5 × 10−91.0 × 10−6
Probability-rescaled score: Battery21.642973538621.64297353863.6 × 10−151.0 × 10−5
Probability-rescaled score: Camera14.846485316814.846485316801.0 × 10−5
Probability-rescaled score: Design11.155421385911.155421385901.0 × 10−5
Probability-rescaled score: Price23.267649584223.267649584201.0 × 10−5
Probability-rescaled score: Screen14.105954487914.105954487901.0 × 10−5
Probability-rescaled score: Storage5.353709170455.353709170451.8 × 10−151.0 × 10−5
Probability-rescaled score: Support9.627806516099.627806516091.8 × 10−151.0 × 10−5
Log-likelihood-623.97051513-623.970515133.4 × 10−131.0 × 10−8
McFadden pseudo R²0.103199258750.1031992587501.0 × 10−10

CBC conjoint: 3 categorical attributes, 50 respondents × 8 tasks × 3 profiles

Reference: statsmodels 0.15.0. Method: statsmodels ConditionalLogit (Newton, numerical Hessian) on a treatment-coded design (first level of each attribute = 0); part-worths are zero-centred within each attribute and their standard errors come from the same linear map of the covariance matrix. Importance = part-worth range / sum of ranges. The browser engine estimates an effects-coded design.

MetricCrosstabsReference|Δ|Tolerance
Part-worth: brand = Alpha0.4911023682920.4911023682925.6 × 10−171.0 × 10−7
Part-worth: brand = Beta-0.00525582548477-0.005255825484773.1 × 10−171.0 × 10−7
Part-worth: brand = Gamma-0.485846542807-0.4858465428071.7 × 10−161.0 × 10−7
Part-worth: storage = 64GB-0.615473144225-0.6154731442252.2 × 10−161.0 × 10−7
Part-worth: storage = 128GB0.01978923304780.01978923304783.2 × 10−161.0 × 10−7
Part-worth: storage = 256GB0.5956839111770.59568391117701.0 × 10−7
Part-worth: colour = Black0.1806210415330.1806210415332.8 × 10−171.0 × 10−7
Part-worth: colour = Silver-0.180621041533-0.1806210415332.8 × 10−171.0 × 10−7
Standard error: brand = Alpha0.08863237870980.08863237844682.6 × 10−101.0 × 10−6
Standard error: brand = Beta0.08823545749620.08823545732021.8 × 10−101.0 × 10−6
Standard error: brand = Gamma0.1004813328780.1004813329375.9 × 10−111.0 × 10−6
Standard error: storage = 64GB0.0978976330420.09789763449721.5 × 10−91.0 × 10−6
Standard error: storage = 128GB0.09096899575310.09096899608243.3 × 10−101.0 × 10−6
Standard error: storage = 256GB0.08890773156810.0889077320965.3 × 10−101.0 × 10−6
Standard error: colour = Black0.06279964188740.06279964217682.9 × 10−101.0 × 10−6
Standard error: colour = Silver0.06279964188740.06279964217682.9 × 10−101.0 × 10−6
Importance (%): brand38.321519545538.321519545501.0 × 10−6
Importance (%): storage47.508501462147.508501462101.0 × 10−6
Importance (%): colour14.169978992414.16997899245.3 × 10−151.0 × 10−6
Log-likelihood-387.689636969-387.6896369695.7 × 10−141.0 × 10−8

CBC conjoint: linear price and a none option, 50 respondents × 8 tasks × 3 profiles + none

Reference: statsmodels 0.15.0. Method: statsmodels ConditionalLogit (Newton, numerical Hessian) on a treatment-coded design (first level of each attribute = 0, linear attributes as raw values, none alternative as its own constant); part-worths are zero-centred within each attribute and their standard errors come from the same linear map of the covariance matrix. Importance = part-worth range / sum of ranges. The browser engine estimates an effects-coded design.

MetricCrosstabsReference|Δ|Tolerance
Part-worth: brand = Alpha0.3021465726790.3021465726791.1 × 10−161.0 × 10−7
Part-worth: brand = Beta-0.153663703594-0.15366370359401.0 × 10−7
Part-worth: brand = Gamma-0.148482869085-0.14848286908501.0 × 10−7
Part-worth: screen = Small-0.485005619907-0.4850056199075.6 × 10−171.0 × 10−7
Part-worth: screen = Medium0.280464091010.280464091011.7 × 10−161.0 × 10−7
Part-worth: screen = Large0.2045415288970.2045415288971.4 × 10−161.0 × 10−7
Part-worth: price = 1990.6977006647420.6977006647423.3 × 10−161.0 × 10−7
Part-worth: price = 2490.2325668882470.2325668882471.4 × 10−161.0 × 10−7
Part-worth: price = 299-0.232566888247-0.2325668882471.4 × 10−161.0 × 10−7
Part-worth: price = 349-0.697700664742-0.6977006647423.3 × 10−161.0 × 10−7
Standard error: brand = Alpha0.09330310843740.09330310693741.5 × 10−91.0 × 10−6
Standard error: brand = Beta0.09663150239750.09663150150918.9 × 10−101.0 × 10−6
Standard error: brand = Gamma0.0957459744640.09574597431231.5 × 10−101.0 × 10−6
Standard error: screen = Small0.1030007635620.1030007679734.4 × 10−91.0 × 10−6
Standard error: screen = Medium0.09236898162070.09236898393572.3 × 10−91.0 × 10−6
Standard error: screen = Large0.09429219869990.09429219870161.7 × 10−121.0 × 10−6
Standard error: price = 1990.09242663719240.09242663428052.9 × 10−91.0 × 10−6
Standard error: price = 2490.03080887906410.03080887809359.7 × 10−101.0 × 10−6
Standard error: price = 2990.03080887906410.03080887809359.7 × 10−101.0 × 10−6
Standard error: price = 3490.09242663719240.09242663428052.9 × 10−91.0 × 10−6
Importance (%): brand17.419403477617.419403477601.0 × 10−6
Importance (%): screen29.253455743329.25345574331.1 × 10−141.0 × 10−6
Importance (%): price53.327140779153.32714077912.1 × 10−141.0 × 10−6
Utility per unit: price-0.0093026755299-0.00930267552995.2 × 10−181.0 × 10−8
None utility-0.569436131261-0.5694361312611.1 × 10−161.0 × 10−7
None standard error0.144802306150.144802307541.4 × 10−91.0 × 10−6
Log-likelihood-491.466648698-491.4666486981.7 × 10−131.0 × 10−8

Latent class analysis: 2 classes, 5 three-category indicators, n = 400

Reference: stepmix 3.0.0. Method: stepmix.StepMix(n_components=2, measurement='categorical', n_init=50, max_iter=5000, abs_tol=1e-13), best of 50 random starts; log-likelihood = score × n; BIC and AIC from StepMix.bic / StepMix.aic. Classes are ordered by share (largest first) on both sides, so label switching cannot affect the comparison. The browser engine runs 50 starts and stops when the relative log-likelihood gain falls below 10⁻¹⁰, which is why parameter tolerances are wider than for closed-form procedures.

MetricCrosstabsReference|Δ|Tolerance
Log-likelihood-1,954.78927357-1,954.789273411.5 × 10−71.0 × 10−5
Free parameters21210exact
BIC4,035.399302634,035.399302323.1 × 10−72.0 × 10−5
AIC3,951.578547143,951.578546833.1 × 10−72.0 × 10−5
Class 1 share (largest first)0.5269512281740.5269554478674.2 × 10−61.0 × 10−4
Class 2 share (largest first)0.4730487718260.4730445521334.2 × 10−61.0 × 10−4
Class 1: P(q1 = 1)0.7857710091730.7857622828178.7 × 10−61.0 × 10−3
Class 1: P(q1 = 2)0.1393866416790.1393854114621.2 × 10−61.0 × 10−3
Class 1: P(q1 = 3)0.07484234914810.07485230572091.0 × 10−51.0 × 10−3
Class 1: P(q2 = 1)0.6449619006640.6449560094695.9 × 10−61.0 × 10−3
Class 1: P(q2 = 2)0.2358396248470.2358444531864.8 × 10−61.0 × 10−3
Class 1: P(q2 = 3)0.1191984744890.1191995373451.1 × 10−61.0 × 10−3
Class 1: P(q3 = 1)0.7684793986580.7684844126095.0 × 10−61.0 × 10−3
Class 1: P(q3 = 2)0.1594533377810.1594497515123.6 × 10−61.0 × 10−3
Class 1: P(q3 = 3)0.07206726356090.07206583587951.4 × 10−61.0 × 10−3
Class 1: P(q4 = 1)0.5379259995430.5379239444092.1 × 10−61.0 × 10−3
Class 1: P(q4 = 2)0.3623765771950.3623828392756.3 × 10−61.0 × 10−3
Class 1: P(q4 = 3)0.0996974232620.09969321631614.2 × 10−61.0 × 10−3
Class 1: P(q5 = 1)0.673087581470.6730814154896.2 × 10−61.0 × 10−3
Class 1: P(q5 = 2)0.2229062943280.222904575951.7 × 10−61.0 × 10−3
Class 1: P(q5 = 3)0.1040061242020.1040140085617.9 × 10−61.0 × 10−3
Class 2: P(q1 = 1)0.0865386490590.08654213256873.5 × 10−61.0 × 10−3
Class 2: P(q1 = 2)0.3732174111660.3732208674233.5 × 10−61.0 × 10−3
Class 2: P(q1 = 3)0.5402439397750.5402370000096.9 × 10−61.0 × 10−3
Class 2: P(q2 = 1)0.301526064150.3015295631943.5 × 10−61.0 × 10−3
Class 2: P(q2 = 2)0.2129252331550.2129196501475.6 × 10−61.0 × 10−3
Class 2: P(q2 = 3)0.4855487026950.4855507866592.1 × 10−61.0 × 10−3
Class 2: P(q3 = 1)0.07937624889280.07936451652591.2 × 10−51.0 × 10−3
Class 2: P(q3 = 2)0.4459917885540.445998339546.6 × 10−61.0 × 10−3
Class 2: P(q3 = 3)0.4746319625540.4746371439345.2 × 10−61.0 × 10−3
Class 2: P(q4 = 1)0.1829393479660.1829384707338.8 × 10−71.0 × 10−3
Class 2: P(q4 = 2)0.1670973952240.1670886775348.7 × 10−61.0 × 10−3
Class 2: P(q4 = 3)0.6499632568110.6499728517339.6 × 10−61.0 × 10−3
Class 2: P(q5 = 1)0.1750679363490.1750703625622.4 × 10−61.0 × 10−3
Class 2: P(q5 = 2)0.2801809503160.2801833754372.4 × 10−61.0 × 10−3
Class 2: P(q5 = 3)0.5447511133350.5447462620014.9 × 10−61.0 × 10−3

Latent class analysis: 3 classes, 5 three-category indicators, n = 400

Reference: stepmix 3.0.0. Method: stepmix.StepMix(n_components=3, measurement='categorical', n_init=50, max_iter=5000, abs_tol=1e-13), best of 50 random starts; log-likelihood = score × n; BIC and AIC from StepMix.bic / StepMix.aic. Classes are ordered by share (largest first) on both sides, so label switching cannot affect the comparison. The browser engine runs 50 starts and stops when the relative log-likelihood gain falls below 10⁻¹⁰, which is why parameter tolerances are wider than for closed-form procedures.

MetricCrosstabsReference|Δ|Tolerance
Log-likelihood-1,919.24783693-1,919.24783645.3 × 10−71.0 × 10−5
Free parameters32320exact
BIC4,030.222539374,030.222538311.1 × 10−62.0 × 10−5
AIC3,902.495673863,902.49567281.1 × 10−62.0 × 10−5
Class 1 share (largest first)0.505174578210.5051785290694.0 × 10−61.0 × 10−4
Class 2 share (largest first)0.3478007524320.3478222487162.1 × 10−51.0 × 10−4
Class 3 share (largest first)0.1470246693580.1469992222152.5 × 10−51.0 × 10−4
Class 1: P(q1 = 1)0.7815278610140.7815260162491.8 × 10−61.0 × 10−3
Class 1: P(q1 = 2)0.136181946970.1361889770137.0 × 10−61.0 × 10−3
Class 1: P(q1 = 3)0.08229019201570.08228500673755.2 × 10−61.0 × 10−3
Class 1: P(q2 = 1)0.6288081687840.6288099909491.8 × 10−61.0 × 10−3
Class 1: P(q2 = 2)0.2411807808220.2411806033861.8 × 10−71.0 × 10−3
Class 1: P(q2 = 3)0.1300110503940.1300094056651.6 × 10−61.0 × 10−3
Class 1: P(q3 = 1)0.802061069080.802049720431.1 × 10−51.0 × 10−3
Class 1: P(q3 = 2)0.1178574953180.117866913429.4 × 10−61.0 × 10−3
Class 1: P(q3 = 3)0.0800814356020.08008336615021.9 × 10−61.0 × 10−3
Class 1: P(q4 = 1)0.5700342566940.5700380153913.8 × 10−61.0 × 10−3
Class 1: P(q4 = 2)0.3662288998860.36622587413.0 × 10−61.0 × 10−3
Class 1: P(q4 = 3)0.06373684341990.06373611050927.3 × 10−71.0 × 10−3
Class 1: P(q5 = 1)0.6740193916610.6740223865273.0 × 10−61.0 × 10−3
Class 1: P(q5 = 2)0.2100696580390.2100707445081.1 × 10−61.0 × 10−3
Class 1: P(q5 = 3)0.11591095030.1159068689654.1 × 10−61.0 × 10−3
Class 2: P(q1 = 1)0.05608504498070.05608614060561.1 × 10−61.0 × 10−3
Class 2: P(q1 = 2)0.2547008968880.2547145332261.4 × 10−51.0 × 10−3
Class 2: P(q1 = 3)0.6892140581320.6891993261691.5 × 10−51.0 × 10−3
Class 2: P(q2 = 1)0.1912249976340.1912360276861.1 × 10−51.0 × 10−3
Class 2: P(q2 = 2)0.1656373893340.1656599832242.3 × 10−51.0 × 10−3
Class 2: P(q2 = 3)0.6431376130310.643103989093.4 × 10−51.0 × 10−3
Class 2: P(q3 = 1)0.08964138798560.0896448873753.5 × 10−61.0 × 10−3
Class 2: P(q3 = 2)0.3351415372020.3351562263661.5 × 10−51.0 × 10−3
Class 2: P(q3 = 3)0.5752170748120.5751988862591.8 × 10−51.0 × 10−3
Class 2: P(q4 = 1)0.2196988664150.2196990666742.0 × 10−71.0 × 10−3
Class 2: P(q4 = 2)0.15971242120.1597229093221.0 × 10−51.0 × 10−3
Class 2: P(q4 = 3)0.6205887123850.6205780240041.1 × 10−51.0 × 10−3
Class 2: P(q5 = 1)0.1368150762680.1368174522762.4 × 10−61.0 × 10−3
Class 2: P(q5 = 2)0.182405975320.1824183720151.2 × 10−51.0 × 10−3
Class 2: P(q5 = 3)0.6807789484120.6807641757081.5 × 10−51.0 × 10−3
Class 3: P(q1 = 1)0.2767261561350.2767486012642.2 × 10−51.0 × 10−3
Class 3: P(q1 = 2)0.6299567222380.6299684433321.2 × 10−51.0 × 10−3
Class 3: P(q1 = 3)0.09331712162650.09328295540423.4 × 10−51.0 × 10−3
Class 3: P(q2 = 1)0.6688258571030.6688644133053.9 × 10−51.0 × 10−3
Class 3: P(q2 = 2)0.3098309442460.3098010245783.0 × 10−51.0 × 10−3
Class 3: P(q2 = 3)0.02134319865050.02133456211718.6 × 10−61.0 × 10−3
Class 3: P(q3 = 1)0.04177391158570.04177719846383.3 × 10−61.0 × 10−3
Class 3: P(q3 = 2)0.8087004121330.8087211070592.1 × 10−51.0 × 10−3
Class 3: P(q3 = 3)0.1495256762810.1495016944772.4 × 10−51.0 × 10−3
Class 3: P(q4 = 1)0.03823680601550.03818258610855.4 × 10−51.0 × 10−3
Class 3: P(q4 = 2)0.2002546228070.2002416725751.3 × 10−51.0 × 10−3
Class 3: P(q4 = 3)0.7615085711770.7615757413166.7 × 10−51.0 × 10−3
Class 3: P(q5 = 1)0.3361214948370.336125644454.1 × 10−61.0 × 10−3
Class 3: P(q5 = 2)0.5471001158650.5471294386142.9 × 10−51.0 × 10−3
Class 3: P(q5 = 3)0.1167783892980.1167449169363.3 × 10−51.0 × 10−3

Key driver analysis: 5 rating drivers, n = 250

Reference: dominance-analysis 1.1.9. Method: dominance_analysis.Dominance(objective=1).incremental_rsquare(): general dominance from scikit-learn LinearRegression R² over all 31 driver subsets (equal to the LMG / Shapley decomposition). Johnson's (2000) relative weights recomputed from the SVD of the standardized data matrix (orthogonal counterparts P·Q′, least squares in NumPy). Standardized betas and R² from statsmodels OLS on z-scored variables.

MetricCrosstabsReference|Δ|Tolerance
R²0.5226215856950.5226215856954.4 × 10−161.0 × 10−12
Standardized beta: quality0.4224780202690.4224780202693.3 × 10−161.0 × 10−10
Standardized beta: price0.273429076510.273429076512.8 × 10−161.0 × 10−10
Standardized beta: service0.2539207068630.2539207068631.3 × 10−151.0 × 10−10
Standardized beta: speed0.06889157974720.06889157974724.2 × 10−171.0 × 10−10
Standardized beta: support-0.0125625913526-0.01256259135262.0 × 10−161.0 × 10−10
General dominance (Shapley R²): quality0.2357694166490.2357694166493.9 × 10−161.0 × 10−12
General dominance (Shapley R²): price0.1233448958820.1233448958828.3 × 10−171.0 × 10−12
General dominance (Shapley R²): service0.1196873288040.1196873288047.6 × 10−161.0 × 10−12
General dominance (Shapley R²): speed0.03710532909540.03710532909541.4 × 10−171.0 × 10−12
General dominance (Shapley R²): support0.0067146152640.0067146152642.3 × 10−171.0 × 10−12
General dominance share (%): quality45.11283557845.1128355781.1 × 10−131.0 × 10−9
General dominance share (%): price23.601186644123.60118664417.1 × 10−151.0 × 10−9
General dominance share (%): service22.901336661222.90133666121.3 × 10−131.0 × 10−9
General dominance share (%): speed7.099846257987.099846257988.0 × 10−151.0 × 10−9
General dominance share (%): support1.28479485881.28479485885.8 × 10−151.0 × 10−9
Johnson relative weight: quality0.2291255848440.2291255848446.7 × 10−161.0 × 10−12
Johnson relative weight: price0.1262895711360.12628957113601.0 × 10−12
Johnson relative weight: service0.1220052947870.1220052947878.7 × 10−161.0 × 10−12
Johnson relative weight: speed0.0381417030260.0381417030261.2 × 10−161.0 × 10−12
Johnson relative weight: support0.007059431902230.007059431902232.7 × 10−171.0 × 10−12
Johnson relative weight share (%): quality43.841584640943.84158464099.2 × 10−141.0 × 10−9
Johnson relative weight share (%): price24.164629742224.16462974221.8 × 10−141.0 × 10−9
Johnson relative weight share (%): service23.344863305823.34486330581.5 × 10−131.0 × 10−9
Johnson relative weight share (%): speed7.298149190547.298149190543.0 × 10−141.0 × 10−9
Johnson relative weight share (%): support1.350773120641.350773120646.2 × 10−151.0 × 10−9

TURF: 8 items rated 1–5, top-two-box reach, weighted, n = 150

Reference: NumPy 2.5.4 (independent recomputation). Method: Exhaustive itertools.combinations search of every portfolio of 1–4 items; reach = weighted share reached by at least one item (rating ≥ 4), frequency = weighted mean number of items reaching a respondent. The best portfolio is named in each metric, so the browser engine must pick the same items.

MetricCrosstabsReference|Δ|Tolerance
Best 1-item reach: Apple0.4923281382140.4923281382143.3 × 10−161.0 × 10−12
Best 1-item frequency: Apple0.4923281382140.4923281382143.3 × 10−161.0 × 10−12
Best 2-item reach: Apple + Strawberry0.7293705448830.7293705448832.2 × 10−161.0 × 10−12
Best 2-item frequency: Apple + Strawberry0.9703999033470.9703999033473.3 × 10−161.0 × 10−12
Best 3-item reach: Apple + Mango + Strawberry0.8662558898150.8662558898152.2 × 10−161.0 × 10−12
Best 3-item frequency: Apple + Mango + Strawberry1.400447021871.400447021874.4 × 10−161.0 × 10−12
Best 4-item reach: Apple + Banana + Mango + Strawberry0.9254560831220.9254560831222.2 × 10−161.0 × 10−12
Best 4-item frequency: Apple + Banana + Mango + Strawberry1.766763320041.766763320048.9 × 10−161.0 × 10−12

NPS from a 0–10 score distribution, n = 150

Reference: SciPy 1.18.1 (independent recomputation). Method: NPS computed as the mean of +1 (9–10) / 0 (7–8) / −1 (0–6) codes; its standard error is the population standard deviation of those codes over √n (√n_eff, Kish, for weighted data), with z from scipy.stats.norm.ppf. Adjusted Wald adds ¾ promoter, 1½ passive and ¾ detractor pseudo-respondents (Rocks 2016).

MetricCrosstabsReference|Δ|Tolerance
NPS7.333333333337.333333333332.7 × 10−151.0 × 10−10
Standard error6.538546672826.5385466728201.0 × 10−10
95% CI lower (Wald)-5.48198265662-5.4819826566201.0 × 10−10
95% CI upper (Wald)20.148649323320.14864932337.1 × 10−151.0 × 10−10
Adjusted-Wald NPS7.189542483667.1895424836601.0 × 10−10
95% CI lower (adjusted Wald)-5.47309805676-5.473098056762.7 × 10−151.0 × 10−10
95% CI upper (adjusted Wald)19.852183024119.85218302413.6 × 10−151.0 × 10−10

NPS from weighted respondent scores, n = 220

Reference: SciPy 1.18.1 (independent recomputation). Method: NPS computed as the mean of +1 (9–10) / 0 (7–8) / −1 (0–6) codes; its standard error is the population standard deviation of those codes over √n (√n_eff, Kish, for weighted data), with z from scipy.stats.norm.ppf. Adjusted Wald adds ¾ promoter, 1½ passive and ¾ detractor pseudo-respondents (Rocks 2016). Weighted shares use the respondent weights.

MetricCrosstabsReference|Δ|Tolerance
NPS7.691350342257.6913503422501.0 × 10−10
Standard error5.361729864125.361729864128.9 × 10−161.0 × 10−10
95% CI lower (Wald)-2.81744708625-2.817447086254.4 × 10−161.0 × 10−10
95% CI upper (Wald)18.200147770818.200147770801.0 × 10−10
Adjusted-Wald NPS7.572120125667.572120125665.3 × 10−151.0 × 10−10
95% CI lower (adjusted Wald)-2.84872176769-2.848721767697.5 × 10−151.0 × 10−10
95% CI upper (adjusted Wald)17.99296201917.9929620193.6 × 10−151.0 × 10−10

NPS difference between two independent samples (52 vs 130 respondents)

Reference: SciPy 1.18.1 (independent recomputation). Method: NPS computed as the mean of +1 (9–10) / 0 (7–8) / −1 (0–6) codes; its standard error is the population standard deviation of those codes over √n (√n_eff, Kish, for weighted data), with z from scipy.stats.norm.ppf. Adjusted Wald adds ¾ promoter, 1½ passive and ¾ detractor pseudo-respondents (Rocks 2016). Difference B − A with SE √(SE_A² + SE_B²) and a two-sided normal p-value.

MetricCrosstabsReference|Δ|Tolerance
NPS difference (B − A)36.923076923136.92307692317.1 × 10−151.0 × 10−10
Standard error of the difference11.088566365911.088566365901.0 × 10−10
z3.329833244873.329833244874.4 × 10−161.0 × 10−10
Two-sided p-value0.0008689800952320.0008689800952323.3 × 10−191.0 × 10−12

Van Westendorp PSM: 83 respondents (3 out of order), whole-currency answers

Reference: SciPy 1.18.1 (independent recomputation). Method: Cumulative curves on the grid of distinct answers (too cheap and cheap: share answering ≥ p; expensive and too expensive: share answering ≤ p), joined by straight lines (numpy.interp); each intersection is the first crossing, solved with scipy.optimize.brentq, or the midpoint of an exact tie run. Respondents whose answers are out of order are excluded.

MetricCrosstabsReference|Δ|Tolerance
Respondents in base80800exact
Point of marginal cheapness (PMC)171701.0 × 10−9
Optimal price point (OPP)24.2524.2501.0 × 10−9
Indifference price point (IPP)23.123.101.0 × 10−9
Point of marginal expensiveness (PME)30.530.501.0 × 10−9

Gabor-Granger: 5 prices, 1–5 intent, top-two-box, partly adaptive ladders, n = 120

Reference: NumPy 2.5.4 (independent recomputation). Method: Would buy = rating ≥ 4. Blank prices are filled from each respondent's own ladder (blank below a price they would buy at → buy; blank above a price they would not → not buy; conflicting → left blank). Demand = share buying among respondents with an answer at that price; revenue = price × demand; arc elasticity = [(d₂ − d₁)/mean(d)] / [(p₂ − p₁)/mean(p)].

MetricCrosstabsReference|Δ|Tolerance
Inferred cells67670exact
Demand at 4.990.8083333333330.80833333333301.0 × 10−12
Demand at 5.990.5833333333330.58333333333301.0 × 10−12
Demand at 6.990.2750.27501.0 × 10−12
Demand at 7.990.09166666666670.091666666666701.0 × 10−12
Demand at 8.990.03333333333330.033333333333301.0 × 10−12
Revenue per respondent at 4.994.033583333334.0335833333301.0 × 10−12
Revenue per respondent at 5.993.494166666673.4941666666701.0 × 10−12
Revenue per respondent at 6.991.922251.9222501.0 × 10−12
Revenue per respondent at 7.990.7324166666670.73241666666701.0 × 10−12
Revenue per respondent at 8.990.2996666666670.29966666666701.0 × 10−12
Revenue-maximising price4.994.990exact
Arc elasticity 4.99→5.99-1.77520958084-1.7752095808401.0 × 10−10
Arc elasticity 5.99→6.99-4.6627184466-4.662718446601.0 × 10−10
Arc elasticity 6.99→7.99-7.49-7.4901.0 × 10−10
Arc elasticity 7.99→8.99-7.924-7.92401.0 × 10−10