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.