Skip to content

Covariance Method

The covariance() method calculates the covariance between two numeric fields in the collection. Covariance measures how two variables change together, indicating the direction of their linear relationship.

Basic Syntax

typescript
covariance<K extends keyof T>(key1: K, key2: K): number

Examples

Basic Usage

typescript
import { collect } from 'ts-collect'

const data = collect([
  { x: 1, y: 2 },
  { x: 2, y: 4 },
  { x: 3, y: 6 }
])

const cov = data.covariance('x', 'y')
console.log(cov)
// Positive value indicates positive relationship

Working with Multiple Variables

typescript
interface MarketData {
  date: string
  price: number
  volume: number
  volatility: number
}

const market = collect<MarketData>([
  { date: '2024-01-01', price: 100, volume: 1000, volatility: 0.1 },
  { date: '2024-01-02', price: 102, volume: 1200, volatility: 0.15 },
  { date: '2024-01-03', price: 98, volume: 1500, volatility: 0.2 }
])

const priceVolumeCovar = market.covariance('price', 'volume')
const priceVolatilityCovar = market.covariance('price', 'volatility')

Real-world Example: E-commerce Metrics Analysis

typescript
interface SalesMetrics {
  date: string
  adSpend: number
  visitors: number
  revenue: number
  conversionRate: number
}

class MarketingAnalyzer {
  private metrics: Collection<SalesMetrics>

  constructor(metrics: SalesMetrics[]) {
    this.metrics = collect(metrics)
  }

  analyzeMetricRelationships() {
    return {
      adSpendToRevenue: {
        covariance: this.metrics.covariance('adSpend', 'revenue'),
        interpretation: this.interpretCovariance('adSpend', 'revenue')
      },
      visitorsToRevenue: {
        covariance: this.metrics.covariance('visitors', 'revenue'),
        interpretation: this.interpretCovariance('visitors', 'revenue')
      },
      visitorToConversion: {
        covariance: this.metrics.covariance('visitors', 'conversionRate'),
        interpretation: this.interpretCovariance('visitors', 'conversionRate')
      }
    }
  }

  interpretCovariance(metric1: keyof SalesMetrics, metric2: keyof SalesMetrics): string {
    const covar = this.metrics.covariance(metric1, metric2)

    if (Math.abs(covar) < 0.1) {
      return `${metric1} and ${metric2} show very weak relationship`
    }

    if (covar > 0) {
      return `${metric1} and ${metric2} tend to increase together`
    }

    return `${metric1} tends to decrease when ${metric2} increases`
  }

  getMarketingInsights(): string[] {
    const insights: string[] = []
    const adSpendRevenueCovar = this.metrics.covariance('adSpend', 'revenue')
    const visitorConversionCovar = this.metrics.covariance('visitors', 'conversionRate')

    if (adSpendRevenueCovar <= 0) {
      insights.push('Ad spend might not be efficiently driving revenue')
    }

    if (visitorConversionCovar < 0) {
      insights.push('High traffic might be impacting conversion quality')
    }

    return insights
  }
}

// Usage
const analyzer = new MarketingAnalyzer([
  {
    date: '2024-01-01',
    adSpend: 1000,
    visitors: 5000,
    revenue: 10000,
    conversionRate: 0.02
  },
  {
    date: '2024-01-02',
    adSpend: 1500,
    visitors: 7500,
    revenue: 15000,
    conversionRate: 0.018
  }
])

const analysis = analyzer.analyzeMetricRelationships()

Type Safety

typescript
interface DataPoint {
  x: number
  y: number
  label: string
}

const points = collect<DataPoint>([
  { x: 1, y: 2, label: 'A' },
  { x: 2, y: 4, label: 'B' }
])

// Type-safe covariance calculation
const covar: number = points.covariance('x', 'y')

// TypeScript enforces numeric fields
// points.covariance('x', 'label') // ✗ TypeScript error
// points.covariance('label', 'y') // ✗ TypeScript error

Return Value

  • Returns a number representing covariance where:
    • 0: Positive relationship

    • < 0: Negative relationship
    • ≈ 0: No linear relationship
  • Returns NaN for insufficient data
  • Handles undefined values
  • Requires numeric values
  • Maintains type safety
  • Unit depends on input units

Common Use Cases

1. Marketing Analysis

  • Ad spend effectiveness
  • Traffic to conversion
  • Campaign performance
  • Channel relationships
  • ROI analysis

2. Price Analysis

  • Price-demand relationship
  • Volume-price impact
  • Discount effectiveness
  • Margin analysis
  • Cost relationships

3. Performance Metrics

  • Resource utilization
  • Load relationships
  • Response patterns
  • System metrics
  • Capacity planning

4. Customer Behavior

  • Purchase patterns
  • Engagement metrics
  • Session analysis
  • Activity correlation
  • Usage relationships

5. Market Analysis

  • Market indicators
  • Trend relationships
  • Competition impact
  • Growth patterns
  • Risk assessment

Released under the MIT License.