Site Index Estimation¶
Estimate area-weighted mean site index as a measure of site productivity.
Overview¶
The site_index() function calculates area-weighted mean site index from FIA condition data. Site index represents the expected height (in feet) of dominant trees at a specified base age, indicating the inherent productivity of a forest site.
import pyfia
db = pyfia.FIA("georgia.duckdb")
db.clip_by_state("GA")
# Basic site index estimation
result = pyfia.site_index(db)
# Site index by county
by_county = pyfia.site_index(db, grp_by="COUNTYCD")
Function Reference¶
site_index
¶
site_index(db: str | FIA, grp_by: str | list[str] | None = None, land_type: str = 'forest', area_domain: str | None = None, plot_domain: str | None = None, most_recent: bool = False, eval_type: str | None = None) -> DataFrame
Estimate area-weighted mean site index from FIA data.
Calculates area-weighted site index estimates using FIA's design-based estimation methods. Site index represents expected dominant tree height (in feet) at a specified base age, indicating site productivity.
Results are always grouped by SIBASE (base age) because site index values are not comparable across different base ages.
| PARAMETER | DESCRIPTION |
|---|---|
db
|
Database connection or path to FIA database.
TYPE:
|
grp_by
|
Column name(s) to group results by. Common grouping columns: Site Index Species: - 'SISP': Species code used for site index determination Forest Characteristics: - 'FORTYPCD': Forest type code - 'STDSZCD': Stand size class - 'OWNGRPCD': Ownership group Location: - 'STATECD': State FIPS code - 'COUNTYCD': County code - 'UNITCD': FIA survey unit
TYPE:
|
land_type
|
Land type to include:
TYPE:
|
area_domain
|
SQL-like filter for condition-level attributes. Examples:
TYPE:
|
plot_domain
|
SQL-like filter for plot-level attributes. Examples:
TYPE:
|
most_recent
|
If True, automatically select most recent evaluation.
TYPE:
|
eval_type
|
Evaluation type if most_recent=True. Default is 'ALL'.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
DataFrame
|
Site index estimates with columns:
|
See Also
pyfia.area : Estimate forest area pyfia.volume : Estimate tree volume
Notes
Site index estimation uses the area-weighted mean formula:
SI_mean = sum(SICOND * CONDPROP_UNADJ * ADJ_FACTOR * EXPNS) / sum(CONDPROP_UNADJ * ADJ_FACTOR * EXPNS)
This ratio-of-means estimator requires proper variance calculation accounting for covariance between numerator and denominator.
Important Considerations:
-
Base Age Comparability: Results are always grouped by SIBASE because site index values are only meaningful within the same base age. Common base ages are 25 years (southern pines) and 50 years (northern species).
-
Species Specificity: SISP indicates which species equation was used for site index determination. Different species may have different site index scales.
-
Missing Values: Conditions without site index (non-productive land, recently disturbed, etc.) are excluded from calculations.
Examples:
Basic site index estimation:
>>> from pyfia import FIA, site_index
>>> with FIA("path/to/fia.duckdb") as db:
... db.clip_by_state(37) # North Carolina
... results = site_index(db)
Site index by ownership group:
Site index by site index species:
Site index for private timberland:
County-level site index:
Source code in src/pyfia/estimation/estimators/site_index.py
539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 | |
Key Concepts¶
Base Age (SIBASE)¶
Site index values are only comparable within the same base age. Results are always grouped by SIBASE to ensure comparability.
| Base Age | Common Usage |
|---|---|
| 25 years | Southern pines, fast-growing species |
| 50 years | Northern hardwoods, slower-growing species |
Site Index Species (SISP)¶
The SISP column indicates which species' height-age equation was used to calculate site index. Different species may have different site index scales even at the same base age.
Technical Notes¶
Site index estimation uses:
CONDtable for site index values (SICOND,SIBASE,SISP)- Condition-level estimation (not tree-level like volume or TPA)
- Area-weighted mean: Each condition's site index is weighted by its proportion of plot area
- Conditions without site index (null
SICOND) are excluded
Calculation Method¶
The area-weighted mean is calculated as:
This ratio-of-means estimator follows Bechtold & Patterson (2005) methodology with proper variance calculation.
Examples¶
Statewide Site Index¶
result = pyfia.site_index(db)
print(f"Mean Site Index: {result['SI_MEAN'][0]:.1f} ft at base age {result['SIBASE'][0]}")
Site Index by County¶
result = pyfia.site_index(db, grp_by="COUNTYCD")
print(result.sort("SI_MEAN", descending=True).head(10))
Site Index by Ownership¶
result = pyfia.site_index(db, grp_by="OWNGRPCD")
# OWNGRPCD: 10=National Forest, 20=Other Federal, 30=State/Local, 40=Private
print(result)
Site Index by Forest Type¶
result = pyfia.site_index(db, grp_by="FORTYPCD")
result = pyfia.join_forest_type_names(result, db)
print(result.sort("SI_MEAN", descending=True).head(10))
Site Index by Site Index Species¶
Group by the species equation used to calculate site index:
result = pyfia.site_index(db, grp_by="SISP")
result = pyfia.join_species_names(result, db, spcd_column="SISP")
print(result)
Private Timberland Only¶
Productive Sites Only¶
Filter to high productivity sites (site class 1-3):
Multiple Grouping Variables¶
Interpreting Results¶
| Column | Description |
|---|---|
YEAR |
Inventory year |
SIBASE |
Base age in years (always included) |
SI_MEAN |
Area-weighted mean site index (feet) |
SI_SE |
Standard error of the mean |
SI_VARIANCE |
Variance of the estimate |
N_PLOTS |
Number of plots contributing to estimate |
N_CONDITIONS |
Number of conditions with site index values |
Comparison with Other Estimators¶
Unlike tree-based estimators (volume(), tpa(), mortality()), site_index():
- Uses condition-level data, not tree-level
- Has no
measureortree_typeparameters - Always groups by
SIBASE(base age) - Returns a mean value, not a total