Welcome Data Analyses Discussion Maps
Analyses
Urban Heat All Areas Portland Tacoma King County iNaturalist City Inventories
library(tidyverse)
library(knitr)
library(kableExtra)
library(gghalves)
library(patchwork)
library(scales)

iNATURALIST

Purpose

The purpose of this page is to provide summaries of the data from the WRDM observations included in these analyses.

Data

iNaturalist data were downloaded from the Western Redcedar Dieback Map on 1.13.24.

data <- read.csv('https://raw.githubusercontent.com/jmhulbert/redhot/main/data/urban-data-modified.csv')

Wrangle Data

Remove Dead Trees

1258 trees were shared by community scientists in the WRDM project in areas with UHI data between 2020-2023.

48 dead trees were included.

data.w.dead <- data
data <- data %>% filter(field.tree.canopy.symptoms!="Tree is dead") %>% filter(field.dieback.percent<100) %>% droplevels()
data$field.other.factors...are.there.signs.or.symptoms.of.insect..diseases..or.other.damage.[data$field.other.factors...are.there.signs.or.symptoms.of.insect..diseases..or.other.damage.==""] <- "Not sure"
data$field.other.factors...are.there.signs.or.symptoms.of.insect..diseases..or.other.damage.[data$field.other.factors...are.there.signs.or.symptoms.of.insect..diseases..or.other.damage.=="Unsure"] <- "Not sure"
hoyt.data <- data.w.dead %>% filter(str_detect(place_guess, "Hoyt") |str_detect(place_guess, "hoyt"))

101 trees were added from Hoyt Arboretum.

Remove Hoyt Trees

data <- data %>% filter(!str_detect(place_guess, "Hoyt") & !str_detect(place_guess, "hoyt"))

1104 observations were included in analyses after removing dead trees and trees from hoyt.

Data Summaries

Observations

Number of Obs. Per Area

data %>% group_by(Area) %>% summarize(n.obs=n())
## # A tibble: 3 × 2
##   Area        n.obs
##   <chr>       <int>
## 1 King County   420
## 2 Portland      341
## 3 Tacoma        343

Community Scientists

Number of Obs.

users <- data %>% group_by(user_login) %>% summarize(n=n()) %>% arrange(desc(n))
users
## # A tibble: 130 × 2
##    user_login                n
##    <chr>                 <int>
##  1 jim1083                 233
##  2 michael_james_burkhow    62
##  3 alexis_mushroom          57
##  4 lyndsayf                 57
##  5 jmhulbert                46
##  6 angela_mabel             45
##  7 pdxmat                   36
##  8 dayhiker                 33
##  9 margmacd                 27
## 10 d_farmer                 25
## # ℹ 120 more rows

47 users only added one observation, but 83 users added at least two observations, including 19 who added more than 10, with one person adding as many as 233.

Number of Community Scientists

data %>% group_by(Area) %>% summarize(n.participants=n_distinct(user_id),n.obs=n())
## # A tibble: 3 × 3
##   Area        n.participants n.obs
##   <chr>                <int> <int>
## 1 King County             66   420
## 2 Portland                45   341
## 3 Tacoma                  24   343

Tree Health

Number of Obs. Per Health Category

data %>% group_by(reclassified.tree.canopy.symptoms) %>% summarize(n.obs=n())
## # A tibble: 4 × 2
##   reclassified.tree.canopy.symptoms n.obs
##   <chr>                             <int>
## 1 Dead Top                            107
## 2 Healthy                             708
## 3 Other                               139
## 4 Thinning Canopy                     150

Number of Obs. per Health Category and Area

area.obs.health <- data %>% group_by(Area,reclassified.tree.canopy.symptoms) %>% summarize(n.obs=n())
## `summarise()` has grouped output by 'Area'. You can override using the
## `.groups` argument.
area.obs.health
## # A tibble: 12 × 3
## # Groups:   Area [3]
##    Area        reclassified.tree.canopy.symptoms n.obs
##    <chr>       <chr>                             <int>
##  1 King County Dead Top                             63
##  2 King County Healthy                             236
##  3 King County Other                                58
##  4 King County Thinning Canopy                      63
##  5 Portland    Dead Top                             15
##  6 Portland    Healthy                             260
##  7 Portland    Other                                35
##  8 Portland    Thinning Canopy                      31
##  9 Tacoma      Dead Top                             29
## 10 Tacoma      Healthy                             212
## 11 Tacoma      Other                                46
## 12 Tacoma      Thinning Canopy                      56
ggplot(area.obs.health,aes(reclassified.tree.canopy.symptoms,n.obs,fill=reclassified.tree.canopy.symptoms))+facet_wrap(~Area)+geom_col()+coord_flip()+guides(fill="none")+theme_bw()+labs(x="Tree Canopy Symptoms",y="Number of Observations")+geom_text(aes(label=n.obs),nudge_y=20)

Other Factors

Signs (y/n)

data %>% group_by(field.other.factors...are.there.signs.or.symptoms.of.insect..diseases..or.other.damage.) %>% summarize(n.obs=n())
## # A tibble: 3 × 2
##   field.other.factors...are.there.signs.or.symptoms.of.insect..diseases.…¹ n.obs
##   <chr>                                                                    <int>
## 1 No                                                                         503
## 2 Not sure                                                                   481
## 3 Yes (please elaborate in Notes, add Picture if possible)                   120
## # ℹ abbreviated name:
## #   ¹​field.other.factors...are.there.signs.or.symptoms.of.insect..diseases..or.other.damage.
obs.signs <- data %>% group_by(field.other.factors...are.there.signs.or.symptoms.of.insect..diseases..or.other.damage.) %>% summarize(n.obs=n())
obs.signs
## # A tibble: 3 × 2
##   field.other.factors...are.there.signs.or.symptoms.of.insect..diseases.…¹ n.obs
##   <chr>                                                                    <int>
## 1 No                                                                         503
## 2 Not sure                                                                   481
## 3 Yes (please elaborate in Notes, add Picture if possible)                   120
## # ℹ abbreviated name:
## #   ¹​field.other.factors...are.there.signs.or.symptoms.of.insect..diseases..or.other.damage.
ggplot(obs.signs,aes(field.other.factors...are.there.signs.or.symptoms.of.insect..diseases..or.other.damage.,n.obs,fill=field.other.factors...are.there.signs.or.symptoms.of.insect..diseases..or.other.damage.))+geom_col()+coord_flip()+guides(fill="none")+theme_bw()+labs(x="Signs or Symptoms Observed",y="Number of Observations")+geom_text(aes(label=n.obs),nudge_y=15)

Factors

obs.factors <- data %>% filter(field.other.factors...are.there.signs.or.symptoms.of.insect..diseases..or.other.damage.!="No") %>% group_by(field.optional...what..other.factors..were.observed.) %>% summarize(n.obs=n())
obs.factors
## # A tibble: 14 × 2
##    field.optional...what..other.factors..were.observed.                    n.obs
##    <chr>                                                                   <int>
##  1 ""                                                                         71
##  2 "Animal damage (woodpecker/sapsucker holes, bark peeling)"                  7
##  3 "Evidence of soil compaction"                                               5
##  4 "Fungal Activitiy (mycelial fans, bleeding cankers, mushrooms at base,…    13
##  5 "Inner stem decay (rot, hollow center, etc.)"                               2
##  6 "Insect damage on trunk (holes, frass, galleries, etc.)"                   21
##  7 "Invasive plants present or growing on tree"                               24
##  8 "Mechanical damage or fire scars"                                          30
##  9 "Multiple factors (please describe in Notes)"                               8
## 10 "Needle or leaf disease (dieback, checking, blight, etc.)"                 14
## 11 "Needle or leaf disease (dieback, checking, blight, powdery mildew etc…     3
## 12 "No selection"                                                            360
## 13 "Other (please describe in Notes)"                                         33
## 14 "Top Cutting or Intensive Pruning"                                         10
ggplot(obs.factors,aes(field.optional...what..other.factors..were.observed.,n.obs,fill=field.optional...what..other.factors..were.observed.))+geom_col()+coord_flip()+guides(fill="none")+theme_bw()+labs(x="Other Factor",y="Number of Observations")+geom_text(aes(label=n.obs),nudge_y=15)