---
title: "Getting Started with selection.index"
Author: "Zankrut Goyani"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Getting Started with selection.index}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

## Introduction

The `selection.index` package provides an optimized suite of tools to calculate multi-trait phenotypic, genomic, and multistage selection indices. It simplifies plant and animal breeding workflows by enabling breeders to accurately rank genotypes based on user-defined economic weights and experimental designs.

## Setup

First, load the package and the built-in phenotypic dataset. While the package supports any standard multi-environment phenotypic data, we will use the included `seldata` dataset (a built-in multi-environment trial dataset for genotypes) for this quick-start guide. 

```{r setup}
library(selection.index)

# Load the built-in phenotypic dataset
data("seldata")

# Inspect the structure of the dataset
head(seldata)
```

## The Basics

To calculate a selection index, you must specify the traits of interest, assign economic weights, and compute the genotypic and phenotypic variance-covariance matrices. 

```{r define_weights}
# Define economic weights for the 7 traits of interest
weights <- c(10, 8, 6, 4, 2, 1, 1)

# Calculate genotypic and phenotypic variance-covariance matrices
# Traits: columns 3:9, Genotypes: column 2, Replication: column 1
gmat <- gen_varcov(data = seldata[, 3:9], genotypes = seldata[, 2], replication = seldata[, 1])
pmat <- phen_varcov(data = seldata[, 3:9], genotypes = seldata[, 2], replication = seldata[, 1])
```

## Execution

With the matrices and weights defined, pass them into the primary selection function. We use `lpsi()` to compute the Combinatorial Linear Phenotypic Selection Index for all traits. Here, setting `ncomb = 7` calculates the index considering all 7 traits simultaneously.

```{r calculate_index}
# Calculate the combinatorial selection index for all 7 traits
index_results <- lpsi(
  ncomb = 7,
  pmat = pmat,
  gmat = gmat,
  wmat = as.matrix(weights),
  wcol = 1
)
```

## Results

Once the index is computed, review the genetic advance metrics and extract the final selection scores to identify the top-performing genotypes. `index_results` is a data frame containing the index coefficients (`b` columns) and various genetic metrics (GA, PRE, Delta_G, rHI).

```{r view_results}
# View the calculated index metrics for our 7-trait combination
head(index_results)

# Extract the final selection scores to rank the genotypes
scores <- predict_selection_score(
  index_results,
  data = seldata[, 3:9],
  genotypes = seldata[, 2]
)

# View the top ranked genotypes based on their selection scores
head(scores)
```
