```
library(FSA) ## for psdAdd(), rcumsum(), headtail()
library(dplyr) ## for mutate(), filter()
```

A reader of Ogle (2016) asked how to compute standard errors (SE) for the various PSD indices with the usual SE equation of a proportion (i.e., \(\sqrt{\frac{p(1-p)}{n}}\). I demonstrate this calculation in this post

I will use the same Inch Lake data from the Size Structure chapter of Ogle (2016), where I used `psdAdd()`

(from `FSA`

) to add a variable with the Gabelhouse length categories and eliminated all sub-stock size fish.^{1}

^{1} this and next step is from this script) from Ogle (2016).

```
<- read.csv("http://derekogle.com/IFAR/scripts/InchLake1113.csv") |>
inchAlls mutate(gcat=psdAdd(tl,species)) |>
filter(gcat!="substock") |>
droplevels()
```

`#R| No known Gabelhouse (PSD) lengths for: Iowa Darter`

`headtail(inchAlls)`

```
#R| gearType year species tl gcat
#R| 1 fyke 2012 Black Crappie 246 quality
#R| 2 fyke 2012 Black Crappie 165 stock
#R| 3 fyke 2012 Black Crappie 330 memorable
#R| 1270 fyke 2013 Yellow Perch 348 memorable
#R| 1271 fyke 2013 Yellow Perch 135 stock
#R| 1272 fyke 2013 Yellow Perch 137 stock
```

I then computed the PSD-X values as shown in Ogle (2016). These will be the proportions (i.e., \(p\)) in the SE calculations.

`<- xtabs(~species+gcat,data=inchAlls) ) ( freq `

```
#R| gcat
#R| species stock quality preferred memorable
#R| Black Crappie 33 40 8 81
#R| Bluegill 571 199 223 43
#R| Largemouth Bass 26 36 0 0
#R| Pumpkinseed 5 2 0 0
#R| Yellow Perch 4 0 0 1
```

```
<- prop.table(freq,margin=1)*100
iPSDs <- t(apply(iPSDs,MARGIN=1,FUN=rcumsum)) ) ( PSDs
```

```
#R| gcat
#R| species stock quality preferred memorable
#R| Black Crappie 100 79.62963 54.93827 50.000000
#R| Bluegill 100 44.88417 25.67568 4.150579
#R| Largemouth Bass 100 58.06452 0.00000 0.000000
#R| Pumpkinseed 100 28.57143 0.00000 0.000000
#R| Yellow Perch 100 20.00000 20.00000 20.000000
```

The row sums from the `freq`

table are the total number of fish (that are stock size or greater) and will be \(n\) in the SE calculations.

`<- rowSums(freq) ) ( sums `

```
#R| Black Crappie Bluegill Largemouth Bass Pumpkinseed Yellow Perch
#R| 162 1036 62 7 5
```

Finally, with these two results the SE for PSD-Q may be computed.

```
<- PSDs[,"quality"]
p <- sqrt(p*(100-p)/sums)
SEs round(SEs,1)
```

```
#R| Black Crappie Bluegill Largemouth Bass Pumpkinseed Yellow Perch
#R| 3.2 1.5 6.3 17.1 17.9
```

And can be repeat for other size indices; e.g., for PSD-P.

```
<- PSDs[,"preferred"]
p <- sqrt(p*(100-p)/sums)
SEs round(SEs,1)
```

```
#R| Black Crappie Bluegill Largemouth Bass Pumpkinseed Yellow Perch
#R| 3.9 1.4 0.0 0.0 17.9
```

## References

## Reuse

## Citation

```
@online{h.ogle2016,
author = {Derek H. Ogle},
title = {Computing {SE} for {PSD} Indices},
date = {2016-12-09},
url = {https://fishr-core-team.github.io/fishR//blog/posts/2016-12-9_PSD_SE},
langid = {en}
}
```