Skip to content
    Back to Tools
    Analysis & Visualisation

    R (tidyverse, ggplot2, shiny)

    Written by Viktor KvantSenior Web Analyst

    Unmatched for statistical analysis and beautiful visualisations. R's tidyverse ecosystem makes exploratory data analysis a joy. Robin Signals supports R analytics natively.

    R's statistical computing capabilities remain superior to Python's for three specific domains: Bayesian inference, survival analysis, and publication-quality visualisation. If your analytics work involves any of these — and senior web analytics work increasingly does — R isn't optional, it's essential. The tidyverse provides the data manipulation foundation, but R's value lies in the specialised statistical packages that have no Python equivalent of equal maturity.

    Bayesian A/B testing in R produces decision-ready outputs that frequentist methods can't match. Using bayesAB or rstanarm: model your conversion data as Beta-Binomial, compute the full posterior distribution of the difference between variants, extract P(B > A), the expected loss of each decision, and the probability of achieving your minimum practical significance. The posterior predictive distribution gives you credible intervals for future performance. Present these to stakeholders as: '93% probability that Variant B improves conversion by 1.5-4.2%, with an expected loss of €200/month if we're wrong.' This is a decision framework, not a p-value.

    The survival package is R's most underutilised tool for web analytics. Kaplan-Meier curves visualise time-to-conversion or time-to-churn with right-censoring handled correctly. Cox proportional hazards regression identifies which user characteristics accelerate or delay the event of interest: survfit(Surv(days_to_convert, converted) ~ channel + device + session_count_bucket). The hazard ratios are directly interpretable: 'organic search users convert at 1.8x the rate of social users, controlling for device and engagement.' This is rigorous causal reasoning that retention cohort tables can't provide.

    ggplot2 is not just 'nice charts'. The grammar of graphics ensures that every visual encoding is intentional: position encodes the primary comparison, colour encodes the grouping variable, size encodes magnitude, facets encode conditional distributions. This grammar prevents the common dashboard anti-pattern of encoding information decoratively rather than analytically. A well-designed ggplot2 chart makes the analytical finding self-evident; a poorly designed Looker Studio chart hides it behind interaction layers.

    Shiny for internal analytics dashboards is R's operational value proposition. Build reactive dashboards with drill-down, filtering, and statistical computation on-demand — entirely in R, without JavaScript, without a frontend team, without a BI platform license. Deploy on Shiny Server (self-hosted) or Posit Connect (managed). Replacing Looker Studio dashboards with Shiny apps offers interactive survival curves, Bayesian posterior plots, and segmentation that updates with parameter changes. The analytical depth is incomparable.

    R Markdown and Quarto produce reproducible analytical documents that combine prose, code, statistical output, and visualisations. For recurring reports — weekly analytics summaries, monthly A/B test reviews, quarterly business reviews — parameterised R Markdown templates generate the entire document from code. Change the date range parameter, re-render, and the report updates with fresh data, recalculated statistics, and regenerated charts. This eliminates the monthly ritual of copying numbers into slides.

    R's integration with BigQuery (bigrquery package) and Arrow (arrow package for Parquet I/O) means it fits into the modern data stack alongside Python, not instead of it. Use R for statistical analysis and visualisation. Use Python for ML pipelines and data engineering. Use SQL and dbt for transformation. The tools are complementary, and senior analysts should be fluent in all three.

    Statistical advantages

    • bayesAB and rstanarm produce decision-ready Bayesian test results
    • survival package handles time-to-event analysis with proper censoring
    • ggplot2 grammar of graphics enforces analytically rigorous visualisation
    • Shiny enables interactive statistical dashboards without frontend skills
    • R Markdown / Quarto automates reproducible analytical reporting
    • Specialised packages (lme4, brms, prophet) have no Python equivalents of equal quality

    Practical considerations

    • Production deployment more complex than Python (no native cloud function support)
    • Smaller general-purpose ecosystem — data engineering is better in Python
    • Memory management requires attention with large event datasets
    • Fewer ML deployment options compared to scikit-learn → MLflow → Vertex AI pipeline

    The verdict

    Irreplaceable for Bayesian experimentation, survival analysis, and publication-quality visualisation. Use alongside Python and SQL — not instead of them. The strongest analytical teams are trilingual: R for statistics, Python for engineering, SQL for transformation.

    Author

    Viktor Kvant

    Senior Web Analyst specialising in data ownership, advanced tracking implementations, and translating data into strategic business value.

    Connect on LinkedIn