Analysis of Disaster Weather Information, NOAA Database, (1950 - November 2011)

Synopsis

This assignment attempts to answer questions about the effects of severe weather events on population health and economy through analyzing data from the NOAA Storm Database. Certain key variables in the database specify data on human fatalities and injuries, and damage to property and crops, per different disaster types. Results show that tornado events have a much greater impact on human health than most of the other disaster types combined. The economic consequences are presented separately for both personal property and crops. But taken together, the event types with the greatest economic impacts are floods and hurricane/typhoons.

Supporting pdf documents for this assignment are the National Weather Service Storm Data Documentation and the National Climatic Data Center Storm Events FAQ.

Preparation Section

Load required packages

require(dplyr)
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## 
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## 
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
require(data.table)
## Loading required package: data.table
## 
## Attaching package: 'data.table'
## 
## The following objects are masked from 'package:dplyr':
## 
##     between, last
require(ggplot2)
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 3.2.5
require(grDevices)

Data Processing Section

Download file from web to working directory and save to csv file with similar file name. Set up condition statement so that compressed csv file will be downloaded to working directory during initial code run.

Load data (Data Processing Subsection)

if (!file.exists("./repdata_data_StormData.csv.bz2")) {
    FileName = "./repdata_data_StormData.csv.bz2"
    web <- "https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
    download.file(web, destfile = FileName)
}

NOAA <- read.csv("./repdata_data_StormData.csv.bz2", header=TRUE, sep=",", stringsAsFactors=FALSE)

Subsequent code runs will check if ./repdata_data_StormData.csv.bz2 already exists and ignore repetitive downloads.
Note: After ./repdata_data_StormData.csv.bz2 loads into environmental variable NOAA, take some time to explore the table and read the supporting pdf douments from the website.

Purpose (Data Processing Subsection)

The two questions to be addressed in this assignment: 1. Across the United States, which types of events are most harmful with respect to population health? 2. Across the United States, which types of events have the greatest economic consequences? For the rest of this document, these two questions will be referred to as Question 1 and Question 2.

Data Exploration (Data Processing Subsection)

Preliminary examination of the pdf support documents reveal room for human error and interpretation and changes in terminology for the past 65+ plus years. For example, The only storm data event types permitted in are listed in Table 1 of Section 2.1.1.1; this lists 48 permitted storm data event types.

eventlev <- as.factor(NOAA$EVTYPE)  ## event types
eventl <- length(levels(eventlev)) ## number of event types
print(tail(levels(eventlev), n=20))
##  [1] "WIND DAMAGE"             "WIND GUSTS"             
##  [3] "WIND STORM"              "WIND/HAIL"              
##  [5] "WINDS"                   "WINTER MIX"             
##  [7] "WINTER STORM"            "WINTER STORM HIGH WINDS"
##  [9] "WINTER STORM/HIGH WIND"  "WINTER STORM/HIGH WINDS"
## [11] "WINTER STORMS"           "Winter Weather"         
## [13] "WINTER WEATHER"          "WINTER WEATHER MIX"     
## [15] "WINTER WEATHER/MIX"      "WINTERY MIX"            
## [17] "Wintry mix"              "Wintry Mix"             
## [19] "WINTRY MIX"              "WND"

A look at the table for the event type variable “EVTYPE” shows a total of 985 event types.
This disparity can be illustrated in the example of type “Winter Weather” (permitted). The table shows HAIL instances of “Winter Weather”, but it also shows the following unpermitted instances of “Winter Storms”, “Wintry Mix”, “Winter Weather Mix”, etc.. “Wintry Mix” shows separate instances based on spelling or case.

Data Cleaning (Data Processing Subsection)

In order to more clearly analyze for Question 1 and Question 2, the event types will have to be consolidated into the permitted categories. Some nonpermitted categories seem self-explanatory (e.g. “Winter Storm/High Winds” assigned to “Winter Storms”, etc.) After reading definitions for the 48 event types, I assigned nonpermitted categories where they fit best (e.g. “Wintery Mix” to “Winter Storm”, etc.). i aslo set aside a category “Non-Event” for normal weather or non-applicable (e.g. “No Severe Weather,”Northern Lights, etc.) entries. #### Adjust Event Types

## Winter Events
gsub("^WINTER WEATHER.*|^MOD.*SNOW.*|^DRIFT.*SNOW$|^LATE.*SNOW.*|^LIGHT.*SNOW.*", "WINTER_WEATHER", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
sub("^HEAVY.*STORM$|^WINTER STORM.*|^WINT.*MIX$|.*RAIN/SNOW|^SNOW/.*|^SNOW AND.*|^GLAZE.*STORM$", "WINTER_STORM", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^SNOW.*COLD|^BLOW.*SNOW.*EXT.*|^HEAVY.*MIX$|^HEAVY SNOW AND.*|^HEAVY SNOW/.*|^HEAVY SNOW &.*", "WINTER_STORM", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^HEAVY SNOW.*RAIN$|^GLAZE.*STORM$", "WINTER_STORM", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^HIGH WIND/.*BLIZZARD.*|^HIGH WIND.*SNOW.*|^BLIZZARD AND.*|^BLIZZARD/.*|^ICE.*BLIZZARD$", "WINTER_STORM", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^FREEZING.*STORM$|^FREEZING.*SNOW$|^FALL.*SNOW.*STORM$|^FALLING.*", "WINTER_STORM", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^BLACK.*|^ICY.*ROADS$|^ICE.*|.*ICE.*STORM.*|^PAT.*ICE$", "ICE_STORM", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^SNOW.*|^HEAVY SNOW.*|^REC.*SNOW.*|^EARLY.*SNOW.*|^BLOW.*SNOW$|^FIRST.*SNOW$|^HEA.*WET.*SNOW$", "HEAVY_SNOW", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^MONTH.*SNOW.*|^MOUNT.*SNOW.*|^ACC.*SNOW.*|^SEAS.*SNOW.*|^NEAR.*SNOW$|UNUS.*SNOW$|^COLD.*SNOW$", "HEAVY_SNOW", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^AVA.*", "AVALANCHE", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub(".*LAKE.*SNOW.*", "LAKE_EFFECT_SNOW", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub(".*BLIZZ.*", "BLIZZARD", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Wildfire Events
gsub("^GRASS.*|^WILD.*|^BRUSH.*|^FOREST.*", "WILDFIRE", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub(".*SMOKE$", "DENSE_SMOKE", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Volcanic Events
gsub("^VOLCANIC.*", "VOLCANIC_ASH", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Debris Flow Events
gsub("^MUD.*|^LAND.*", "DEBRIS_FLOW", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Flood Events
gsub("^URBAN.*FL.*D.*|.*COASTAL.*FLOOD.*|^TIDAL.*FLOOD.*|.*CSTL.*FLOOD.*|^COASTAL.*", "COASTAL_FLOOD", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub(".*FLASH.*FLOO.*|.*FLOOD.*FLASH.*|^RAPID.*WATER$", "FLASH_FLOOD", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^LAKE.*FLOOD$", "LAKESHORE_FLOOD", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^FLOOD.*|^URBAN.*SMALL.*|^SM.*STREAM.*|^DAM.*", "FLOOD", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Marine Events
gsub(".*WA.*SPOUT.*", "WATERSPOUT", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^MAR.*HIGH.*WIND$", "MARINE_HIGH_WIND", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^MAR.*STRONG.*WIND$", "MARINE_STRONG_WIND", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^MAR.*HAIL$", "MARINE_HAIL", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^MAR.*ST.*M.*WIND$", "MARINE_THUNDERSTORM_WIND", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("BEACH.*ERO.*|^AST.*HIGH.*|^BLOW.*TIDE.*|^STORM.*SURGE.*|^HIGH.*TIDES.*", "STORM_SURGE_TIDE", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub(".*H.*SURF.*|.*WAVE.*|.*MISHAP.*|.*ACCIDENT.*|.*SEAS.*", "HIGH_SURF", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^H.*SEAS.*|^HIGH.*WATER$|^H.*SWELLS$", "HIGH_SURF", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^RIP.*CUR.*", "RIP_CURRENT", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^AST.*LOW.*", "ASTRONOMICAL_LOW_TIDE", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Heavy Rain Events
gsub("^RAIN.*|^HIGH WIND.*RAIN.*|^RECORD.*RAINFALL$|^HEAVY.*PREC.*ION$|^REC.*PREC.*ION$|^LOC.*RAIN$|^PROL.*RAIN$|^ROCK.*|^COLD.*COND.*", "HEAVY_RAIN", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^H.*VY.*RAIN.*|^HEAVY.*SHOW.*|^MONTH.*RAIN.*|^MONTH.*PREC.*|^UNSEAS.*RAIN$|^EAR.*RAIN$|^EXT.*WET$|^WET.*|^ABN.*WET$|^SUM.*JUL.*11$", "HEAVY_RAIN", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Thunderstorm Events
gsub(".*TSTM.*|^THU.*|^TORRENTIAL.*|^WHIRL.*|^METRO.*|^SUMMARY.*", "THUNDERSTORM_WIND", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^DOWNBURST.*|^GUSTNADO.*|^.*MIC.*BURST.*|^SEVERE.*THUND.*|^TUNDER.*|^APACHE.*|^DROWN.*", "THUNDERSTORM_WIND", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Tropical Events
gsub("^TROPICAL.*ST.*|^COASTAL.*STORM.*", "TROPICAL_STORM", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^TROP.*DEPR.*", "TROPICAL_DEPRESSION", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Tornado Events
gsub("^TORNADO.*|^TORNDAO.*|^COLD.*TORNADO$", "TORNADO", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^FUNNEL.*|^COLD.*FUNNEL.*|.*WALL.*", "FUNNEL_CLOUD", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Lightning Events
gsub(".*LIG.*ING.*", "LIGHTNING", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Hail Events
gsub("^HAIL.*|^NON SEV.*HAIL$|^SMALL.*HAIL$|^WIND/HAIL$", "HAIL", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Dust Events
gsub("^DUST.*STORM.*|^HIGH.*DUST.*|^SAHARAN.*|^BLOW.*DUST$", "DUST_STORM", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^DUST.*DEV.*", "DUST_DEVIL", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Wind Events
gsub("^HIGH WIND.*SEAS*|^HIGH WIND.*TIDES.*|^HIGH WIND.*FLOOD.*", "MARINE_HIGH_WIND", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^HIGH.*WIND.*|GRADIENT WINDS|^SEVERE.*TURB.*|^NON-SEVERE.*|^HIGH$", "HIGH_WIND", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^STRONG.*WIND.*|^GUSTY.*WIND$|^GUSTY.*WINDS$|^W.*ND$|^WIND.*DAM.*|^ WIND$|^WINDS$|^WIND STORM$", "STRONG_WIND", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^GRAD.*WIND.*|STORM FORCE WINDS|WIND ADVISORY|WIND GUSTS|^HIGH WIND.*|^GUSTY.*RAIN$", "STRONG_WIND", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Hurricane Events
gsub("^HURRICANE.*|^TYPH.*|^REMNANTS.*", "HURRICANE_TYPHOON", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Fog Events
gsub("^GLAZE$|^FREEZING.*FOG$|^GLAZE.*ICE$|^ICE.*FOG$", "FREEZING_FOG", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub(".*DENSE.*FOG$|^FOG.*|VOG", "DENSE_FOG", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Heat Events
gsub("^HEAT.*WAVE.*|^HOT.*|^HEAT$|^RECORD.*WARM.*|^WARM.*COND.*|^PROL.*WARM.*|^MILD.*", "HEAT", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^WARM.*WEATHER|^VERY.*WARM$|^ABN.*WARM.*|^UNSEASON.*WARM.*|^UNUSUAL.*WARM.*|^TEMP.*RECORD$", "HEAT", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^REC.*HIGH.*TEMP.*|^REC.*HIGH$|^REC.*TEMP.*|^REC.*HEAT.*|EXCESSIVE|^HIGH.*TEMP.*REC.*", "EXCESSIVE_HEAT", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^EXCESSIVE.*HEAT.*|^EXTREME.*HEAT$|^RED.*FLAG.*|^UNSEAS.*HOT$|^HEAT.*BURST$", "EXCESSIVE_HEAT", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^VERY.*DRY$|^DRY.*|^DROUGHT.*|^DRIEST.*|^ABN.*DRY$|^EXC.*DRY$|^BELOW.*PRECIP.*", "DROUGHT", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^RECORD LOW RAINFALL$|^REC.*DRY.*|H.*DROUGHT$|^UNSEAS.*DRY$", "DROUGHT", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Cold Events
gsub("^FROST.*|.*FREEZE$|^DAMAG.*FREEZE$|^MIXED.*|^FIR.*FROST|^FREE.*SPRAY$", "FROST_FREEZE", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^EARLY.*FROST$|EARLY FREEZE$|^COLD.*FROST$", "FROST_FREEZE", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub(".*FREEZING.*RAIN.*|^FREEZING.*DRIZZLE.*|^SLEET.*|^WET.*SNOW$", "SLEET", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^COLD.*TEMP.*|^COLD.*WIND.*", "COLD_WIND_CHILL", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^COLD$|^HYP.*|^PROLONG.*COLD.*|.*WIND CHILL.*|^LOW.*TEMP.*", "COLD_WIND_CHILL", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^COLD.*WAVE$|^COLD.*WEATHER$|^UNSEAS.*COOL.*|^UNSEAS.*COLD.*|^MONTH.*TEMP.*", "COLD_WIND_CHILL", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^BITTER.*WIND.*|^REC.*COLD.*|^REC.*COOL$|^REC.*LOW$|^UNUS.*COLD$", "EXTREME_COLD_WIND_CHILL", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^EX.*COLD.*|^EX.*CHILL.*|^SEV.*COLD$", "EXTREME_COLD_WIND_CHILL", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Stragglers
gsub("^M.*FLOOD.*$|^BREAK.*|^RIVER.*|^STREAM.*|^STREET.*|^RURAL.*|^LOCAL.*|^HIGHWAY.*|^BEACH.*", "FLOOD", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("^GUSTY.*$|^DEEP.*", "HAIL", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("OTHER", "OTHER", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
## Non-Events
gsub("^NO.*WEATHER$|^NORM.*PRECIP.*|^SOUTH.*|^NONE$|^COOL.*|^NORTH.*|^LACK.*SNOW$", "NONEVENT", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE
gsub("\\?", "NONEVENT", NOAA$EVTYPE, ignore.case = TRUE) -> NOAA$EVTYPE ## special character deletion

The NOAA table is huge and we really only need certain variables to compute effect on population health and economy. We will work with a smaller subset of the NOAA table called miniNOAA

Extract Necessary Variables & Records

miniNOAA <- select(NOAA, c(EVTYPE, 23:28)) %>% mutate(ttl=FATALITIES+INJURIES+PROPDMG+CROPDMG) %>% filter(ttl>0)  ## Necessary variables, and nonzero records
mininames <- names(miniNOAA)

We’ve selected the following columns from the original NOAA table: EVTYPE, FATALITIES, INJURIES, PROPDMG, PROPDMGEXP, CROPDMG, CROPDMGEXP, ttl. The variables for fatalities and injuries will be added together into a new variable called “Pophealth”. The columns for property and crop damage will also be adjusted to compute the total by the proper multiple (e.g. hundreds, thousands, etc.). Unclear multiples were discounted (e.g. “+”, “0”, etc.).

Data Computation (Data Processing Subsection)

## Population Health
pop <- mutate(miniNOAA, Pophealth=FATALITIES+INJURIES) %>% select(EVTYPE, Pophealth) %>% filter(Pophealth>0)

## Property Damage
prop <- filter(miniNOAA, PROPDMG>0) %>% select(c(EVTYPE, PROPDMG, PROPDMGEXP)) %>% mutate(PropTtl=PROPDMG*0)
pb <- subset(prop, PROPDMGEXP=="B") %>% mutate(PropTtl=PROPDMG*1000000000+PropTtl)
pm <- subset(prop, PROPDMGEXP=="M") %>% mutate(PropTtl=PROPDMG*1000000+PropTtl)
pt <- subset(prop, PROPDMGEXP=="K") %>% mutate(PropTtl=PROPDMG*1000+PropTtl)
ph <- subset(prop, PROPDMGEXP=="H") %>% mutate(PropTtl=PROPDMG*100+PropTtl)
prop <- rbind(pb,pm,ph,pt)
## crop Damage
crop <- filter(miniNOAA, CROPDMG>0) %>% select(c(EVTYPE, CROPDMG, CROPDMGEXP)) %>% mutate(CropTtl=CROPDMG*0)
cb <- subset(crop, CROPDMGEXP=="B") %>% mutate(CropTtl=CROPDMG*1000000000+CropTtl)
cm <- subset(crop, CROPDMGEXP=="M") %>% mutate(CropTtl=CROPDMG*1000000+CropTtl)
ct <- subset(crop, CROPDMGEXP=="K") %>% mutate(CropTtl=CROPDMG*1000+CropTtl)
ch <- subset(crop, CROPDMGEXP=="H") %>% mutate(CropTtl=CROPDMG*100+CropTtl)
crop <- rbind(cb,cm,ch,ct)

Results Section

Plot Population Health (Results Section)

pop1 <- ggplot(pop, aes(EVTYPE, Pophealth))
pop1 + coord_flip() + stat_summary(fun.y = sum, geom = "bar", color = "orangered", alpha = .75) + labs(title="Effect on Population Health") + labs(x="Event Types", y="Combined Fatalities & Injuries") 

The event type with the greatest impact on population health is clearly Tornado events.

Plot Property Damage (Results Section)

prop1 <- ggplot(prop, aes(EVTYPE, PropTtl))
prop1 + coord_flip() + stat_summary(fun.y = sum, geom = "bar", color = "green4", alpha = .75) + labs(title="Economic Consequences (Prsonal Property)") + labs(x="Event Types", y="Total Property Damage") 

Plot Crop Damage (Results Section)

crop1 <- ggplot(crop, aes(EVTYPE, CropTtl))
crop1 + coord_flip() + stat_summary(fun.y = sum, geom = "bar", color = "mediumorchid", alpha = .75) + labs(title="Economic Consequences (Crops)") + labs(x="Event Types", y="Total Crop Damage") 

The event types with the greatest economic impact to personal property are floods, followed by hurricane/tyhpoons and tornadoes. The event types with the greatest economic impact to crops are drought, followed by floods, hurricane/tyhpoons, and ice storms.