Accurate sample size calculation is crucial for reliable emission reduction quantification. This guide implements CDM-compliant sampling methodologies with 95/5 confidence/precision requirements, ensuring the 5% imprecision is factored into emission reduction calculations as per Art. 5 para. 1 let. c No 4 CO2 Ordinance.

Quick Start

curl -X POST https://api.emerging.eco/v1/sampling \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "projectId": "did:ixo:project/789",
    "population": 5000,
    "confidence": 0.95,
    "precision": 0.05,
    "expectedMean": 0.8,
    "expectedSD": 0.2,
    "dropoutRate": 0.15,
    "stratification": {
      "enabled": true,
      "strata": [
        {"name": "urban", "weight": 0.6},
        {"name": "rural", "weight": 0.4}
      ]
    }
  }'

Core Requirements

Data Models

Sample Design

{
  "designId": "sample-123",
  "projectId": "did:ixo:project/789",
  "parameters": {
    "confidence": 0.95,
    "precision": 0.05,
    "population": 5000,
    "calculatedSize": 357,
    "adjustedSize": 420,
    "dropoutRate": 0.15,
    "erCoverage": 0.85
  },
  "stratification": {
    "method": "proportional",
    "strata": [{
      "name": "urban",
      "population": 3000,
      "sampleSize": 252,
      "mean": 0.8,
      "sd": 0.2
    }, {
      "name": "rural",
      "population": 2000,
      "sampleSize": 168,
      "mean": 0.75,
      "sd": 0.25
    }]
  },
  "verification": {
    "status": "approved",
    "verifier": "did:ixo:validator/456",
    "timestamp": "2024-02-20T10:00:00Z"
  }
}

Sample Size Calculator

from emerging import CDMCalculator, StratificationEngine

# Initialize CDM calculator
calculator = CDMCalculator()

# Calculate base sample size
base_size = calculator.compute_base_size(
    mean=0.8,
    sd=0.2,
    confidence=0.95,
    precision=0.05
)

# Adjust for finite population
adjusted_size = calculator.adjust_for_population(
    base_size=base_size,
    population=5000
)

# Account for dropout
final_size = calculator.adjust_for_dropout(
    sample_size=adjusted_size,
    dropout_rate=0.15
)

# Stratify if needed
stratification = StratificationEngine()
strata_sizes = stratification.allocate(
    total_size=final_size,
    strata=[
        {"name": "urban", "weight": 0.6},
        {"name": "rural", "weight": 0.4}
    ]
)

Random Selection

from emerging import RandomSelector

selector = RandomSelector(seed=20240220)

# Generate random sample
sample = selector.select(
    population_list="household_registry.csv",
    sample_size=420,
    stratification={
        "column": "region",
        "sizes": strata_sizes
    }
)

# Validate selection
validation = selector.validate_randomness(
    selected_sample=sample,
    confidence=0.95
)

Monitoring & Adaptation

from emerging import SampleMonitor

monitor = SampleMonitor("did:ixo:project/789")

# Analyze current data
stats = monitor.analyze_current_period(
    start_date="2024-01-01",
    end_date="2024-01-31"
)

# Recalculate sample size
new_size = monitor.recalculate_size(
    current_mean=stats.mean,
    current_sd=stats.sd
)

# Check if adjustment needed
if monitor.requires_adjustment(new_size):
    adjustment = monitor.generate_adjustment_plan()

External Verification

from emerging import VerificationSubmission

submission = VerificationSubmission(
    project_id="did:ixo:project/789"
)

# Prepare project list
project_list = submission.prepare_project_list(
    active_projects=True,
    planned_projects=True
)

# Submit for sampling
response = submission.submit_to_foen(
    project_list=project_list,
    monitoring_period="2024-Q1"
)

Error Handling

400
error

Invalid sampling parameters

422
error

Insufficient population data

409
error

Conflicting stratum definitions

Best Practices

Sample Design

  • Document all assumptions
  • Justify stratification choices
  • Consider seasonal variations
  • Plan for dropouts
  • Maintain stratum independence

Data Quality

  • Validate input parameters
  • Monitor dropout rates
  • Track response rates
  • Document non-responses
  • Verify random selection

Adaptation

  • Regular recalculation
  • Document changes
  • Update stratification
  • Maintain precision levels
  • Track ER coverage

Verification

  • Prepare FOEN submissions
  • Document selection process
  • Maintain project lists
  • Track verification status
  • Archive supporting data

Next Steps

Survey Integration

Apply sampling to surveys

SUM Integration

Sensor deployment sampling

CDM Tools

Official calculators

Verification Guide

FOEN submission process

Sample Size Adaptation

Monitoring Period Updates

from emerging import AdaptiveSampling

adaptive = AdaptiveSampling(project_id="did:ixo:project/789")

# Analyze current monitoring data
current_stats = adaptive.analyze_period(
    start_date="2024-01-01",
    end_date="2024-01-31"
)

# Recalculate using actual data
new_sample_size = adaptive.recalculate(
    actual_mean=current_stats.mean,
    actual_sd=current_stats.sd,
    current_dropout_rate=current_stats.dropout_rate
)

# Generate adaptation plan if needed
if adaptive.requires_adjustment(new_sample_size):
    plan = adaptive.create_adjustment_plan(
        current_size=current_stats.sample_size,
        required_size=new_sample_size,
        implementation_date="2024-03-01"
    )

Dropout Management

# Configure with realistic dropout rate
calculator = CDMCalculator(
    base_confidence=0.95,
    base_precision=0.05,
    dropout_buffer=0.15  # 15% dropout rate
)

# Track actual dropouts
dropout_analysis = calculator.analyze_dropouts(
    historical_data="2023",
    current_period="2024-Q1"
)

# Adjust sample size if needed
adjusted_size = calculator.compensate_for_dropouts(
    current_size=400,
    actual_dropout_rate=dropout_analysis.rate
)

FOEN Submission Process

from emerging import FOENSubmission

submission = FOENSubmission(project_id="did:ixo:project/789")

# Prepare project list for random selection
project_list = submission.prepare_list(
    active_projects=True,
    planned_projects=True,
    monitoring_period="2024-Q2"
)

# Submit for random sampling
response = submission.submit_to_foen(
    project_list=project_list,
    er_coverage_percentage=0.85,  # Document ER coverage
    supporting_data={
        "mean_justification": "historical_data.pdf",
        "sd_calculation": "variance_analysis.pdf"
    }
)

Was this page helpful?