This document presents example GRTS survey designs for a linear resource. The linear resource used in the designs is streams that comprise the Luckiamute watershed in Oregon. Four survey designs will be presented: (1) an unstratified, equal probability design; (2) a stratified, equal probability design with an oversample; (3) a stratified, unequal probability design with an oversample; and (4) a stratified, unequal probability design with an oversample and a panel structure for survey over time. The sampling frame used for the survey designs is contained in either an ESRI shapefile, an sf
object, or an sp
package object. The frame contains the coordinates for a set of line segments that define the linear resource in addition to attribute data associated with the line segments. The coordinate system for the set of points in the sampling frame is an equal area projection rather than latitude and longitude. An equal area projection is used so that calculation of distance between points is valid.
The initial step is to use the library
function to load the spsurvey
package. After the package is loaded, a message is printed to the R console indicating that the spsurvey
package was loaded successfully.
Load the spsurvey
package:
For creating a survey design using the spsurvey
package, the standard form of input regarding the resource is a simple features (sf
) object. An sf
data set for creating the survey designs in this vignette is included in the data directory of the package. The data
function is used to load the data set stored in the data directory into an object named Luck_Ash_streams
. Note that sf
objects loaded from the data sets in the data directory are stored in a format that is defined in the sf
package. See documentation for the sf
package for additional information regarding format of those objects.
Load the sf
object in the data directory:
Two attributes, stream type and Strahler stream order, will be used to define, respectively, stratum codes and unequal selection probability (multidensity) categories for the survey designs. Stream type is contained in a variable named “Per_Int”, and Strahler stream order is contained in a variable named “Strah_Cat”. For stream type, streams are classified as either perennial or intermittent. For Strahler stream order, streams are classified as either first order (“1st”), second order (“2nd”), or third order and higher (“3rd+”). The table
and addmargin
functions are used to produce a table displaying number of stream segments for each combination of values for the strata and multidensity category variables.
Finally, frame stream length is summarized for the strata and multidensity category attributes. Note that stream length measured in kilometers is contained in the variable named “Length_km”. The tapply
function is used to calculate total stream length for each combination of stream type and Strahler stream order. The addmargins
function is applied to the output from tapply
to calculate stream length for each category of stream type and Strahler stream order, and the round function is used to round value to two decimal places. Finally, the resulting cross-tabulation of sum of stream length in kilometers for Strahler stream order and stream type is displayed.
Display the initial six features in the sf
object:
head(Luck_Ash_streams)
#> Simple feature collection with 6 features and 3 fields
#> geometry type: LINESTRING
#> dimension: XY
#> bbox: xmin: -2148980 ymin: 2722288 xmax: -2126694 ymax: 2746966
#> projected CRS: NAD83 / Conus Albers
#> Per_Int Strah_Cat Length_km geometry
#> 1 Perennial 2nd 2.3261097 LINESTRING (-2128642 272228...
#> 2 Intermittent 1st 0.5785829 LINESTRING (-2137334 274498...
#> 3 Intermittent 1st 0.7796058 LINESTRING (-2129644 274406...
#> 4 Perennial 1st 1.8757176 LINESTRING (-2148980 274686...
#> 5 Intermittent 1st 1.0012245 LINESTRING (-2134217 274357...
#> 6 Perennial 1st 1.6464196 LINESTRING (-2136771 274488...
Display number of stream segments cross-classified by the strata and multidensity category variables:
with(Luck_Ash_streams, addmargins(table("Stream Type"=Per_Int, "Strahler Order"=Strah_Cat)))
#> Strahler Order
#> Stream Type 1st 2nd 3rd+ Sum
#> Intermittent 137 20 2 159
#> Perennial 104 78 88 270
#> Sum 241 98 90 429
Summarize frame stream length by stratum and multidensity category:
temp <- with(Luck_Ash_streams, tapply(Length_km, list(Per_Int, Strah_Cat), sum))
temp <- round(addmargins(temp), 2)
names(dimnames(temp)) <- list("Stream Type", "Strahler Order")
temp
#> Strahler Order
#> Stream Type 1st 2nd 3rd+ Sum
#> Intermittent 305.53 20.51 3.03 329.07
#> Perennial 200.53 133.10 159.79 493.42
#> Sum 506.06 153.61 162.82 822.49
Streams in the Luckiamute watershed are displayed in the figure below, classified by stream type and the following figure classified by Strahler order category.
Location of streams in the Luckiamute watershed classified by stream type.
Location of streams in the Luckiamute watershed classified by Strahler order category.
The first survey design is an unstratified, equal probability design. The set.seed
function is called so that, if necessary, the designs can be replicated.
The initial step is to create a list named Equaldsgn
that contains information for specifying the survey design. Since the survey design is unstratified, the list contains a single item named “None” that also is a list. The “None” list includes two items: panel, which is used to specify the sample size for each panel, and seltype, which is used to input the type of random selection for the design. For this example, panel is assigned a single value named “PanelOne” that is set equal to 50, and seltype is assigned the value “Equal”, which indicates equal probability selection.
The grts
function in the spsurvey
package is called to select the survey design. The following arguments are included in the call to grts
: (1) design: the named list of stratum design specifications, which is assigned the Equaldsgn list; (2) DesignID: name for the design, which is used to create a site ID for each site and is assigned the value “EQUAL”; (3) type.frame: the type of frame, which is assigned the value “linear” to indicate a linear resource; (4) src.frame: source of the frame, which is assigned the value “sf.object” to indicate an sf
object frame; (5) sf.object: the sf object, which is assigned the value Luck_Ash_streams
; and (6) shapefile: option to create a shapefile containing the survey design information, which is assigned FALSE.
During execution of the grts
function, messages are printed that indicate the initial number of hierarchical levels used for the GRTS grid, the current number of levels, and the final number of levels. The set of messages is printed for each stratum, and is labeled with the stratum name. For this example, the set of messages is labeled “None”, i.e., the name used in the Equaldsgn
list. Upon completion of the call to grts
, the initial six sites for the survey design and a design summary are printed. The output object created by the grts
function is assigned class “SpatialDesign”. The design summary is created using the summary
method for that class. In addition to summary
, a plot
method is available for the SpatialDesign
class. For assistance using the summary
and plot
methods, see documentation for “SpatialDesign-class” on the R help page for spsurvey
.
Call the set.seed
function so that the design can be replicated:
Create the design list:
Select the sample:
Equalsites <- grts(design=Equaldsgn,
DesignID="EQUAL",
type.frame="linear",
src.frame="sf.object",
sf.object=Luck_Ash_streams,
maxlev = 5,
shapefile=FALSE)
#>
#> Stratum: None
#> Current number of levels: 4
#> Current number of levels: 5
#> Final number of levels: 5
Print the initial six lines of the survey design:
head(Equalsites)
#> coordinates siteID xcoord ycoord mdcaty wgt stratum
#> 1 (-2120719, 2736598) EQUAL-001 -2120719 2736598 Equal 8224.881 None
#> 2 (-2150233, 2735349) EQUAL-002 -2150233 2735349 Equal 8224.881 None
#> 3 (-2127679, 2727034) EQUAL-003 -2127679 2727034 Equal 8224.881 None
#> 4 (-2129461, 2715834) EQUAL-004 -2129461 2715834 Equal 8224.881 None
#> 5 (-2122074, 2733907) EQUAL-005 -2122074 2733907 Equal 8224.881 None
#> 6 (-2138997, 2730255) EQUAL-006 -2138997 2730255 Equal 8224.881 None
#> panel EvalStatus EvalReason Per_Int Strah_Cat Length_km
#> 1 PanelOne NotEval Intermittent 1st 5.5893081
#> 2 PanelOne NotEval Perennial 2nd 0.8712123
#> 3 PanelOne NotEval Intermittent 1st 3.1007885
#> 4 PanelOne NotEval Perennial 2nd 1.2532549
#> 5 PanelOne NotEval Intermittent 1st 2.9219660
#> 6 PanelOne NotEval Perennial 3rd+ 4.6578267
Print the survey design summary:
The second survey design is a stratified, equal probability design with an oversample. The stream type attribute is used to identify strata. List Stratdsgn
is assigned design specifications. Since the survey design is stratified, Stratdsgn
includes two lists named “Perennial” and “Intermittent” that contains three items: panel, seltype, and over. Note that the names for the two lists match the levels of the stratum variable. For both lists, the values for panel and seltype are the same as the ones used for the equal probability design. The third item, over, assigns the value 50 for size of the oversample. An oversample provides additional sample sites to replace sites that cannot be used, e.g., to replace sites in the sample that are not accessible.
For this survey design, a shapefile will be used as the sampling frame. The sf
package function st_write
is used to create the shapefile. The following arguments are included in the call to grts
: (1) design: assigned the Stratdsgn list; (2) DesignID: assigned the value “STRATIFIED”; (3) type.frame: assigned the value “linear”; (4) src.frame: assigned the value “shapefile”; (5) in.shape: assigned the value “Luck_Ash_streams.shp”; (6) stratum: name of the column in the attributes data frame that identifies the stratum code for each element in the frame, which is assigned the value “Per_Int”; and (7) shapefile: assigned the value FALSE. Upon completion of the call to grts
, the initial six sites for the survey design and a design summary are printed.
Create the shapefile:
sf::st_write(Luck_Ash_streams, "Luck_Ash_streams.shp", quiet = TRUE, delete_dsn = TRUE)
#> Warning in CPL_write_ogr(obj, dsn, layer, driver,
#> as.character(dataset_options), : GDAL Error 1: Luck_Ash_streams.shp does not
#> appear to be a file or directory.
Create the design list:
Stratdsgn <- list(Perennial=list(panel=c(PanelOne=40),
seltype="Equal",
over=10),
Intermittent=list(panel=c(PanelOne=40),
seltype="Equal",
over=10))
Select the sample:
Stratsites <- grts(design=Stratdsgn,
DesignID="STRATIFIED",
type.frame="linear",
src.frame="shapefile",
in.shape="Luck_Ash_streams.shp",
maxlev = 3,
stratum="Per_Int",
shapefile=FALSE)
#>
#> Stratum: Perennial
#> Current number of levels: 3
#> Final number of levels: 3
#> Warning in grtslin(sframe, sum(n.desired), SiteBegin, shift.grid, startlev, :
#> Of the 30 grid cells from which sample points were selected,
#> 18 (60%) of the cells contained more than one sample point.
#>
#> Stratum: Intermittent
#> Current number of levels: 3
#> Final number of levels: 3
#> Warning in grtslin(sframe, sum(n.desired), SiteBegin, shift.grid, startlev, :
#> Of the 34 grid cells from which sample points were selected,
#> 13 (38.2%) of the cells contained more than one sample point.
Print the initial six lines of the survey design
head(Stratsites)
#> coordinates siteID xcoord ycoord mdcaty wgt stratum
#> 1 (-2123406, 2743141) STRATIFIED-001 -2123406 2743141 Equal 12335.55 Perennial
#> 2 (-2140634, 2742649) STRATIFIED-002 -2140634 2742649 Equal 12335.55 Perennial
#> 3 (-2119946, 2727690) STRATIFIED-003 -2119946 2727690 Equal 12335.55 Perennial
#> 4 (-2125995, 2719462) STRATIFIED-004 -2125995 2719462 Equal 12335.55 Perennial
#> 5 (-2129745, 2737805) STRATIFIED-005 -2129745 2737805 Equal 12335.55 Perennial
#> 6 (-2139012, 2734120) STRATIFIED-006 -2139012 2734120 Equal 12335.55 Perennial
#> panel EvalStatus EvalReason Strah_Cat Length_km
#> 1 PanelOne NotEval 1st 11.2514779
#> 2 PanelOne NotEval 3rd+ 0.7881177
#> 3 PanelOne NotEval 2nd 1.0195857
#> 4 PanelOne NotEval 1st 2.2349353
#> 5 PanelOne NotEval 2nd 2.6563369
#> 6 PanelOne NotEval 2nd 1.3900997
Print the survey design summary
The third survey design is a stratified, unequal probability design with an oversample. As for the second survey design, the stream type attribute is used to identify strata. Strahler order categories are used to identify multidensity categories. List Unequaldsgn
is assigned design specifications. Unequaldsgn
includes the same two lists with three items (panel, seltype, and over) as used for the stratified, equal probability design plus a value for caty.n. For both lists, panel specifies a single panel, and seltype is assigned “Unequal” to indicate unequal probability sampling. Note that the value 0 is assigned to over for the “Intermittent” stratum, i.e., no oversample. The over item could have been omitted from the list for “Intermittent”. The vector assigned to caty.n specifies sample sizes for each of the three multidensity categories. Note that the sum of values provided in caty.n must equal the value in panel.
For this survey design, an sp
package object will be used as the sampling frame. The sf
package function as_Spatial
is used to create an sp
object named Luck_Ash_streams_sp
. The following arguments are included in the call to grts
: (1) design: assigned the Unequaldsgn list; (2) DesignID: assigned the value “UNEQUAL”; (3) type.frame: assigned the value “linear”; (4) src.frame: assigned the value “sp.object” to indicate that the sampling frame is provided by an sp
object; (5) sp.object: name of the sp
object, which is assigned the shp object; (6) stratum: assigned the value “Per_Int”; (7) mdcaty: name of the column in the attributes data frame that identifies the unequal probability category for each element in the frame, which is assigned the value “Strah_Cat”; and (8) shapefile: assigned the value FALSE. Upon completion of the call to grts
, the initial six sites for the survey design and a design summary are printed.
Create the sp
object:
Luck_Ash_streams_sp <- sf::as_Spatial(Luck_Ash_streams)
#> Warning: st_crs<- : replacing crs does not reproject data; use st_transform for
#> that
proj4string(Luck_Ash_streams_sp) <- sp::CRS(st_crs(Luck_Ash_streams)$proj4string)@projargs
#> Warning in proj4string(obj): CRS object has comment, which is lost in output
Create the design list:
Unequaldsgn <- list(Perennial=list(panel=c(PanelOne=60),
seltype="Unequal",
caty.n=c("1st"=20, "2nd"=20, "3rd+"=20),
over=10),
Intermittent=list(panel=c(PanelOne=30),
seltype="Unequal",
caty.n=c("1st"=20, "2nd"=7, "3rd+"=3),
over=0))
Select the sample:
Unequalsites <- grts(design=Unequaldsgn,
DesignID="UNEQUAL",
type.frame="linear",
src.frame="sp.object",
sp.object=Luck_Ash_streams_sp,
stratum="Per_Int",
maxlev=5,
mdcaty="Strah_Cat",
shapefile=FALSE)
#>
#> Stratum: Perennial
#> Warning in grts(design = Unequaldsgn, DesignID = "UNEQUAL", type.frame = "linear", :
#> Oversample size is not proportional to category sample sizes for stratum
#> "Perennial".
#> Current number of levels: 4
#> Current number of levels: 5
#> Final number of levels: 5
#>
#> Stratum: Intermittent
#> Current number of levels: 3
#> Current number of levels: 5
#> Final number of levels: 5
#> Warning in grtslin(sframe, sum(n.desired), SiteBegin, shift.grid, startlev, :
#> Of the 29 grid cells from which sample points were selected,
#> 1 (3.4%) of the cells contained more than one sample point.
Print the initial six lines of the survey design:
head(Unequalsites)
#> coordinates siteID xcoord ycoord mdcaty wgt stratum
#> 1 (-2134315, 2732197) UNEQUAL-001 -2134315 2732197 1st 10026.548 Perennial
#> 2 (-2138928, 2731515) UNEQUAL-002 -2138928 2731515 2nd 6655.043 Perennial
#> 3 (-2116818, 2721384) UNEQUAL-003 -2116818 2721384 3rd+ 7989.511 Perennial
#> 4 (-2136367, 2738014) UNEQUAL-004 -2136367 2738014 2nd 6655.043 Perennial
#> 5 (-2129116, 2729529) UNEQUAL-005 -2129116 2729529 3rd+ 7989.511 Perennial
#> 6 (-2139905, 2723470) UNEQUAL-006 -2139905 2723470 3rd+ 7989.511 Perennial
#> panel EvalStatus EvalReason Length_km
#> 1 PanelOne NotEval 2.431217
#> 2 PanelOne NotEval 3.955503
#> 3 PanelOne NotEval 3.035346
#> 4 PanelOne NotEval 1.759316
#> 5 PanelOne NotEval 4.831711
#> 6 PanelOne NotEval 1.660109
Print the survey design summary:
summary(Unequalsites)
#> Design Summary: Number of Sites Classified by mdcaty (Multidensity Category)
#> and stratum
#>
#> stratum
#> mdcaty Perennial Intermittent Sum
#> 1st 23 19 42
#> 2nd 21 7 28
#> 3rd+ 28 4 32
#> Sum 72 30 102
#>
#>
#> Design Summary: Number of Sites Classified by panel and stratum
#>
#> stratum
#> panel Perennial Intermittent Sum
#> OverSamp 12 0 12
#> PanelOne 60 30 90
#> Sum 72 30 102
#>
#>
#> Design Summary: Number of Sites Classified by mdcaty (Multidensity Category),
#> panel, and stratum
#>
#> , , stratum = Perennial
#>
#> panel
#> mdcaty OverSamp PanelOne Sum
#> 1st 5 18 23
#> 2nd 3 18 21
#> 3rd+ 4 24 28
#> Sum 12 60 72
#>
#> , , stratum = Intermittent
#>
#> panel
#> mdcaty OverSamp PanelOne Sum
#> 1st 0 19 19
#> 2nd 0 7 7
#> 3rd+ 0 4 4
#> Sum 0 30 30
#>
#> , , stratum = Sum
#>
#> panel
#> mdcaty OverSamp PanelOne Sum
#> 1st 5 37 42
#> 2nd 3 25 28
#> 3rd+ 4 28 32
#> Sum 12 90 102
The fourth survey design is a stratified, unequal probability design with an oversample and a panel structure for survey over time. List Paneldsgn
is assigned design specifications. Analogous to the stratified, unequal probability design, Paneldsgn
includes two lists named “Perennial” and “Intermittent”. For the “Perennial” stratum, a vector identifying sample sizes for three panels is assigned to panel. For the “Intermittent” stratum, the sample size for a single panel named “Annual” is assigned to panel. The value “Unequal” is assigned to seltype for both lists, which indicates unequal selection probabilities. For both lists, the third item, caty.n, assigns sample sizes for each of the three multidensity categories. Again, note that the sum of sample sizes provided in caty.n must equal the sum of sample sizes in panel. For the “Perennial” stratum, the value 50 is assigned to over, which specifies an oversample of 50 sites. No oversample is specified for the “Intermittent” stratum, and so over is not included in the list. The grts
function attempts to distribute the oversample proportionately among sample sizes for the multidensity categories. If the oversample proportion for one or more categories is not a whole number, a warning message is printed and the proportion is rounded to the next higher integer.
For this survey design, an sf
object will be used as the sampling frame. The following arguments are included in the call to grts
: (1) design: assigned the Paneldsgn list; (2) DesignID: assigned the value “UNEQUAL”; (3) type.frame: assigned the value “linear”; (4) src.frame: assigned the value “sf.object”; (5) sf.object: the sf
object, which is assigned the value Luck_Ash_streams
; (6) stratum: assigned the value "Per=_Int“; (7) mdcaty: assigned the value”Strah_Cat"; and (8) shapefile: assigned the value FALSE. Upon completion of the call to grts
, the initial six sites for the survey design and a design summary are printed.
Create the design list:
Paneldsgn <- list(Perennial=list(panel=c(Annual=20, Year1=20, Year2=20),
seltype="Unequal",
caty.n=c("1st"=25, "2nd"=20, "3rd+"=15),
over=15),
Intermittent=list(panel=c(Annual=25),
seltype="Unequal",
caty.n=c("1st"=18, "2nd"=5, "3rd+"=2)))
Select the sample:
Panelsites <- grts(design=Paneldsgn,
DesignID="UNEQUAL",
type.frame="linear",
src.frame="sf.object",
sf.object=Luck_Ash_streams,
stratum="Per_Int",
maxlev = 5,
mdcaty="Strah_Cat",
shapefile=FALSE)
#>
#> Stratum: Perennial
#> Warning in grts(design = Paneldsgn, DesignID = "UNEQUAL", type.frame = "linear", :
#> Oversample size is not proportional to category sample sizes for stratum
#> "Perennial".
#> Current number of levels: 4
#> Current number of levels: 5
#> Final number of levels: 5
#>
#> Stratum: Intermittent
#> Current number of levels: 3
#> Current number of levels: 4
#> Current number of levels: 5
#> Final number of levels: 5
Print the initial six lines of the survey design:
head(Panelsites)
#> coordinates siteID xcoord ycoord mdcaty wgt stratum
#> 1 (-2119116, 2737481) UNEQUAL-001 -2119116 2737481 1st 8021.238 Perennial
#> 2 (-2141126, 2722237) UNEQUAL-002 -2141126 2722237 3rd+ 10652.682 Perennial
#> 3 (-2134307, 2732402) UNEQUAL-003 -2134307 2732402 1st 8021.238 Perennial
#> 4 (-2144851, 2744455) UNEQUAL-004 -2144851 2744455 1st 8021.238 Perennial
#> 5 (-2148729, 2734680) UNEQUAL-005 -2148729 2734680 1st 8021.238 Perennial
#> 6 (-2143801, 2724726) UNEQUAL-006 -2143801 2724726 3rd+ 10652.682 Perennial
#> panel EvalStatus EvalReason Length_km
#> 1 Annual NotEval 11.251478
#> 2 Annual NotEval 1.791776
#> 3 Annual NotEval 2.431217
#> 4 Annual NotEval 3.349822
#> 5 Annual NotEval 2.738611
#> 6 Annual NotEval 4.611704
Print the survey design summary:
summary(Panelsites)
#> Design Summary: Number of Sites Classified by mdcaty (Multidensity Category)
#> and stratum
#>
#> stratum
#> mdcaty Perennial Intermittent Sum
#> 1st 35 16 51
#> 2nd 23 7 30
#> 3rd+ 18 2 20
#> Sum 76 25 101
#>
#>
#> Design Summary: Number of Sites Classified by panel and stratum
#>
#> stratum
#> panel Perennial Intermittent Sum
#> Annual 20 25 45
#> OverSamp 16 0 16
#> Year1 20 0 20
#> Year2 20 0 20
#> Sum 76 25 101
#>
#>
#> Design Summary: Number of Sites Classified by mdcaty (Multidensity Category),
#> panel, and stratum
#>
#> , , stratum = Perennial
#>
#> panel
#> mdcaty Annual OverSamp Year1 Year2 Sum
#> 1st 11 8 8 8 35
#> 2nd 2 5 8 8 23
#> 3rd+ 7 3 4 4 18
#> Sum 20 16 20 20 76
#>
#> , , stratum = Intermittent
#>
#> panel
#> mdcaty Annual OverSamp Year1 Year2 Sum
#> 1st 16 0 0 0 16
#> 2nd 7 0 0 0 7
#> 3rd+ 2 0 0 0 2
#> Sum 25 0 0 0 25
#>
#> , , stratum = Sum
#>
#> panel
#> mdcaty Annual OverSamp Year1 Year2 Sum
#> 1st 27 8 8 8 51
#> 2nd 9 5 8 8 30
#> 3rd+ 9 3 4 4 20
#> Sum 45 16 20 20 101