Skip to content

variance Method

The variance() method calculates the population variance of values in the collection. When a key is provided, it calculates the variance of values for that specific property. The variance represents the average squared deviation from the mean.

Basic Syntax

typescript
collect(items).variance(key?: keyof T): number

Examples

Basic Usage

typescript
import { collect } from 'ts-collect'

// Simple variance calculation
const numbers = collect([4, 8, 6, 2, 10])
console.log(numbers.variance())  // 8.4

// With objects
const items = collect([
  { value: 10 },
  { value: 20 },
  { value: 15 },
  { value: 25 }
])
console.log(items.variance('value'))  // 35.0

Working with Objects

typescript
interface Product {
  id: number
  price: number
  salesVolume: number
  restockDays: number
}

const products = collect<Product>([
  { id: 1, price: 100, salesVolume: 50, restockDays: 7 },
  { id: 2, price: 150, salesVolume: 30, restockDays: 5 },
  { id: 3, price: 200, salesVolume: 40, restockDays: 10 },
  { id: 4, price: 120, salesVolume: 45, restockDays: 6 }
])

// Analyze price spread
const priceVariance = products.variance('price')

// Analyze sales volume consistency
const salesVariance = products.variance('salesVolume')

Real-world Examples

Price Stability Analyzer

typescript
interface PricePoint {
  productId: string
  price: number
  date: string
  market: string
  seasonality: number
}

class PriceStabilityAnalyzer {
  constructor(private prices: Collection<PricePoint>) {}

  getMarketStability(): Map<string, number> {
    const markets = new Map<string, number>()

    this.prices
      .groupBy('market')
      .forEach((prices, market) => {
        markets.set(market, prices.variance('price'))
      })

    return markets
  }

  getSeasonalityImpact(): {
    priceVariance: number,
    seasonalityVariance: number,
    correlation: number
  } {
    return {
      priceVariance: this.prices.variance('price'),
      seasonalityVariance: this.prices.variance('seasonality'),
      correlation: this.calculateCorrelation('price', 'seasonality')
    }
  }

  private calculateCorrelation(key1: keyof PricePoint, key2: keyof PricePoint): number {
    // Implementation of correlation calculation
    return 0 // Placeholder
  }

  identifyVolatileProducts(threshold: number): string[] {
    return Array.from(
      this.prices
        .groupBy('productId')
        .entries()
    )
      .filter(([_, prices]) => prices.variance('price') > threshold)
      .map(([productId]) => productId)
  }
}

Performance Variance Analyzer

typescript
interface SalesMetric {
  salesRepId: string
  dailySales: number
  customerCount: number
  avgTicketSize: number
}

class PerformanceAnalyzer {
  constructor(private metrics: Collection<SalesMetric>) {}

  getConsistencyScores(): {
    sales: number,
    customers: number,
    ticketSize: number
  } {
    return {
      sales: this.calculateNormalizedVariance('dailySales'),
      customers: this.calculateNormalizedVariance('customerCount'),
      ticketSize: this.calculateNormalizedVariance('avgTicketSize')
    }
  }

  private calculateNormalizedVariance(key: keyof SalesMetric): number {
    const variance = this.metrics.variance(key)
    const mean = this.metrics.avg(key)
    return variance / (mean * mean) // Coefficient of variation squared
  }

  identifyInconsistentPerformers(): string[] {
    const salesVariance = this.metrics
      .groupBy('salesRepId')
      .map(metrics => ({
        id: metrics.first()?.salesRepId ?? '',
        variance: metrics.variance('dailySales')
      }))
      .sortByDesc('variance')
      .take(5)
      .pluck('id')
      .toArray()

    return salesVariance
  }
}

Advanced Usage

Inventory Variation Analyzer

typescript
interface StockLevel {
  sku: string
  quantity: number
  demandRate: number
  leadTime: number
  warehouse: string
}

class InventoryAnalyzer {
  constructor(private inventory: Collection<StockLevel>) {}

  getStockVariability(): Map<string, {
    quantityVariance: number,
    demandVariance: number,
    leadTimeVariance: number
  }> {
    const warehouseMetrics = new Map()

    this.inventory
      .groupBy('warehouse')
      .forEach((items, warehouse) => {
        warehouseMetrics.set(warehouse, {
          quantityVariance: items.variance('quantity'),
          demandVariance: items.variance('demandRate'),
          leadTimeVariance: items.variance('leadTime')
        })
      })

    return warehouseMetrics
  }

  calculateSafetyStock(sku: string): number {
    const skuData = this.inventory.where('sku', sku)
    const leadTimeVar = skuData.variance('leadTime')
    const demandVar = skuData.variance('demandRate')

    // Safety stock calculation using variance
    const avgDemand = skuData.avg('demandRate')
    const avgLeadTime = skuData.avg('leadTime')

    return Math.sqrt(
      avgLeadTime * demandVar +
      avgDemand * avgDemand * leadTimeVar
    ) * 2.33 // 99% service level
  }
}

Type Safety

typescript
interface TypedMetric {
  id: number
  value: number
  count: number
}

const metrics = collect<TypedMetric>([
  { id: 1, value: 100, count: 5 },
  { id: 2, value: 200, count: 3 }
])

// Type-safe variance calculation
const valueVariance: number = metrics.variance('value')
const countVariance: number = metrics.variance('count')

// TypeScript enforces valid keys
// metrics.variance('invalid')  // ✗ TypeScript error

Return Value

  • Returns the population variance as a number
  • Returns 0 for empty collections or single items
  • Ignores non-numeric values
  • Maintains numeric precision
  • Uses population variance formula
  • Squares the deviations from mean

Common Use Cases

1. Price Analysis

  • Price stability
  • Market volatility
  • Competitive spread
  • Regional variation
  • Seasonal fluctuation

2. Performance Metrics

  • Sales consistency
  • Productivity variation
  • Quality dispersion
  • Efficiency spread
  • Response time variation

3. Inventory Management

  • Stock level variation
  • Demand volatility
  • Lead time variation
  • Safety stock calculation
  • Order size dispersion

4. Customer Behavior

  • Purchase patterns
  • Visit frequency
  • Order size variation
  • Response variation
  • Satisfaction spread

5. Market Analysis

  • Market volatility
  • Segment variation
  • Share fluctuation
  • Growth dispersion
  • Penetration spread

6. Quality Control

  • Process variation
  • Product consistency
  • Defect spread
  • Measurement dispersion
  • Tolerance analysis

7. Risk Assessment

  • Performance risk
  • Market volatility
  • Supply variation
  • Demand uncertainty
  • Cost fluctuation

8. Operational Metrics

  • Process variation
  • Time dispersion
  • Cost spread
  • Efficiency variation
  • Resource utilization

9. Financial Analysis

  • Revenue variation
  • Cost dispersion
  • Margin spread
  • Growth volatility
  • Return variation

10. Supply Chain

  • Lead time variation
  • Order size spread
  • Delivery dispersion
  • Cost fluctuation
  • Quality variation

Released under the MIT License.