Skill

Analyze Data Distributions Accurately

Skill for statistical distribution analysis - identification, multi-distribution fitting, testing, and diagnostics.

Works with githubscipypandasmatplotlibseaborn

91
Spark score
out of 100
Updated 7 months ago
Version 1.0.0
Models

Add to Favorites

Why it matters

Leverage advanced statistical methods to identify, fit, and validate probability distributions within your datasets. Gain deep insights into data characteristics for informed decision-making.

Outcomes

What it gets done

01

Perform comprehensive exploratory data analysis (EDA) including histograms, Q-Q plots, and descriptive statistics.

02

Fit and rank various continuous, discrete, heavy-tailed, and bounded distributions using goodness-of-fit tests (Kolmogorov-Smirnov, Anderson-Darling).

03

Conduct statistical tests for normality, exponentiality, and uniformity, alongside outlier detection.

04

Visualize data and best-fitting distributions for clear interpretation.

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/vb-distribution-analyzer | bash

Overview

Distribution Analyzer Agent

A skill for statistical distribution analysis - exploratory diagnostics, multi-distribution fitting ranked by AIC/BIC, normality and goodness-of-fit testing, and best-fit visualization. Use it for distributional identification, fitting, and validation specifically, not general EDA or summary statistics.

What it does

This skill covers analyzing statistical distributions - identifying, fitting, testing, and visualizing probability distributions in data, spanning parametric and non-parametric methods, goodness-of-fit tests, and advanced statistical modeling techniques. Distribution-identification strategy: start with exploratory data analysis (histograms, Q-Q plots, descriptive statistics), consider the data-generating process and domain context when choosing candidate distributions, use multiple goodness-of-fit tests (Kolmogorov-Smirnov, Anderson-Darling, Shapiro-Wilk), validate with visual diagnostics and cross-validation, and account for sample-size limits on statistical power. Key distribution families: continuous (Normal, Log-normal, Exponential, Gamma, Beta, Weibull, Pareto, Student's t), discrete (Poisson, Binomial, Negative Binomial, Geometric), heavy-tailed (Cauchy, Levy, alpha-stable), and bounded (Uniform, Beta, Triangular, truncated distributions).

A comprehensive analysis workflow is demonstrated via a class handling exploratory analysis:

import numpy as np
import pandas as pd
import scipy.stats as stats
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.optimize import minimize
from sklearn.preprocessing import StandardScaler

class DistributionAnalyzer:
    def __init__(self, data):
        self.data = np.array(data)
        self.results = {}
        
    def exploratory_analysis(self):
        """Comprehensive EDA for distribution analysis"""
        fig, axes = plt.subplots(2, 3, figsize=(15, 10))
        
        # Histogram with KDE
        axes[0,0].hist(self.data, bins=30, density=True, alpha=0.7)
        axes[0,0].plot(*stats.gaussian_kde(self.data).evaluate(np.linspace(self.data.min(), self.data.max(), 100)))
        axes[0,0].set_title('Distribution Shape')
        
        # Q-Q plots for normal and exponential
        stats.probplot(self.data, dist="norm", plot=axes[0,1])
        axes[0,1].set_title('Normal Q-Q Plot')
        
        stats.probplot(self.data, dist="expon", plot=axes[0,2])
        axes[0,2].set_title('Exponential Q-Q Plot')
        
        # Box plot and violin plot
        axes[1,0].boxplot(self.data)
        axes[1,0].set_title('Box Plot')
        
        axes[1,1].violinplot(self.data)
        axes[1,1].set_title('Violin Plot')
        
        # Empirical CDF
        sorted_data = np.sort(self.data)
        y_vals = np.arange(1, len(sorted_data) + 1) / len(sorted_data)
        axes[1,2].plot(sorted_data, y_vals, 'b-', linewidth=2)
        axes[1,2].set_title('Empirical CDF')
        
        plt.tight_layout()
        return self._get_descriptive_stats()
    
    def _get_descriptive_stats(self):
        return {
            'mean': np.mean(self.data),
            'std': np.std(self.data),
            'skewness': stats.skew(self.data),
            'kurtosis': stats.kurtosis(self.data),
            'cv': np.std(self.data) / np.mean(self.data) if np.mean(self.data) != 0 else np.inf
        }

and distribution fitting (fitting up to eight candidate distributions - normal, exponential, gamma, log-normal, beta, Weibull, Pareto, uniform - with bounded distributions handled specially, then computing Kolmogorov-Smirnov and Anderson-Darling statistics plus AIC/BIC, ranked by AIC).

Statistical testing and validation covers normality tests (Shapiro-Wilk, Jarque-Bera, D'Agostino K-squared), an exponentiality test (rate-parameter estimation followed by a KS test against the fitted exponential CDF), a uniformity test (KS test against uniform), and outlier detection via both the IQR method and a Z-score threshold of 3. Visualization and diagnostics cover a best-fit plotting method showing the top-N fitted distributions overlaid on the data histogram (labeled with AIC), a P-P plot for the single best fit, a residual plot (observed minus expected quantiles), and an AIC-comparison bar chart across the top distributions.

Expert recommendations match distribution families to data-generating processes: Normal for symmetric data from additive processes (central limit theorem applies), Log-normal for positive data from multiplicative processes with right skew, Exponential for time-to-event data with the memoryless property, Gamma for waiting time across multiple events on positive continuous data, Weibull for reliability analysis and hazard-function modeling, and Beta for proportions, percentages, or bounded [0,1] continuous data. Common mistakes to avoid: relying solely on visual analysis instead of quantitative tests, ignoring sample size when interpreting goodness-of-fit p-values, underestimating parameter-estimation uncertainty in small samples, failing to validate distributional assumptions on held-out data, and being careless with heavy-tailed distributions and extreme values. Advanced techniques cover mixture models for multimodal data, transformation techniques (Box-Cox, Yeo-Johnson) for better fits, truncated or censored distributions for bounded data, bootstrap methods for parameter confidence intervals, and cross-validation for model selection in predictive contexts.

When to use - and when NOT to

Use it when identifying, fitting, or testing the probability distribution behind a dataset - choosing candidate distributions, ranking fits by AIC or BIC, running normality or goodness-of-fit tests, or diagnosing fit quality visually. It is not a general EDA or summary-statistics tool beyond distribution work - it is scoped specifically to distributional identification, fitting, and validation.

Inputs and outputs

Given a numeric dataset, it produces exploratory diagnostic plots, a ranked list of fitted distributions with goodness-of-fit statistics (KS, AD, AIC, BIC), a battery of statistical tests (normality, exponentiality, uniformity, outliers), and best-fit comparison visualizations.

Integrations

Code samples use numpy, pandas, scipy.stats (fitting, kstest, anderson, shapiro, jarque_bera, normaltest, zscore), matplotlib/seaborn for visualization, scipy.optimize, and scikit-learn's StandardScaler.

Who it's for

Data scientists and statisticians identifying, fitting, and validating the probability distribution underlying a dataset.

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.