Skip to main content
U.S. flag

An official website of the United States government

Here’s how you know

Dot gov

Official websites use .gov
A .gov website belongs to an official government organization in the United States.

HTTPS

Secure .gov websites use HTTPS
A lock (LockA locked padlock) or https:// means you’ve safely connected to the .gov website. Share sensitive information only on official, secure websites.

    • Environmental Topics
    • Air
    • Bed Bugs
    • Cancer
    • Chemicals, Toxics, and Pesticide
    • Emergency Response
    • Environmental Information by Location
    • Health
    • Land, Waste, and Cleanup
    • Lead
    • Mold
    • Radon
    • Research
    • Science Topics
    • Water Topics
    • A-Z Topic Index
    • Laws & Regulations
    • By Business Sector
    • By Topic
    • Compliance
    • Enforcement
    • Laws and Executive Orders
    • Regulations
    • Report a Violation
    • Environmental Violations
    • Fraud, Waste or Abuse
    • About EPA
    • Our Mission and What We Do
    • Headquarters Offices
    • Regional Offices
    • Labs and Research Centers
    • Planning, Budget, and Results
    • Organization Chart
    • EPA History

Breadcrumb

  1. Home
  2. Causal Analysis/Diagnosis Decision Information System (CADDIS)

R Script: Classify Response Shape

# Perform graphical classification of response shape

unimod.test <- function(mnr, ubnd, lbnd) {

     # Find the maximum and minimum predicted mean probabilities
     lmax <- max(mnr)
     lmin <- min(mnr)

     # Find index locations for these probabilities
     imax <- match(lmax, mnr)
     imin <- match(lmin, mnr)

     x.out <- F
     y.out <- F

     # Compare mean predicted probability to the left of maximum point
     # with upper confidence bound. Store a T in x.out if
     # any point in the mean response deviates from the
     # upper confidence limit
     if (imax > 1) {
           x.out <- sum(lmax == pmax(lmax, ubnd[1:(imax-1)])) > 0
     }

     # Store a T in y.out if any point in the mean probability
     # to the right of the maximum point deviates from the upper
     # confidence limit
     if (imax < length(ubnd)) {
           y.out <- sum(lmax == pmax(lmax,
           ubnd[(imax+1):length(ubnd)])) > 0
     }

     # Perform same set of tests for lower confidence limit
     a.out <- F
     b.out <- F
     if (imin > 1) {
           a.out <- sum(lmin == pmin(lmin, lbnd[1:(imin-1)])) > 0
     }
     if (imin < length(lbnd)) {
           b.out <- sum(lmin == pmin(lmin,
           lbnd[(imin+1):length(lbnd)])) > 0
     }

     # The information on where the mean curve deviates from the
     # confidence limits tells us its curve shape...
     if (x.out & y.out) {
           return("Unimodal")
     }
     if (a.out & b.out) {
          return("Concave up")
     }
     if (x.out | b.out) {
          return("Increasing")
     }
     if (y.out | a.out) {
          return("Decreasing")
     }
     if (! (x.out | y.out | a.out | b.out)) {
          return(NA)
     }
}

tolcl <- rep("", times = length(taxa.names))
for (i in 1:length(taxa.names)) {
     predres <- predict(modlist.gam[[i]], type= "link", se.fit = T)

     # Compute upper and lower 90% confidence limits
     up.bound.link <- predres$fit + 1.65*predres$se.fit
     low.bound.link <- predres$fit - 1.65*predres$se.fit
     mean.resp.link <- predres$fit

     # Convert from logit transformed values to probability.
     up.bound <- exp(up.bound.link)/(1+exp(up.bound.link))
     low.bound <- exp(low.bound.link)/(1+exp(low.bound.link))
     mean.resp <- exp(mean.resp.link)/(1+exp(mean.resp.link))

     # unimod.test requires that the responses be sorted by
     # the value of the environmental variable.
     iord <- order(dfmerge$temp)

     tolcl[i] <- unimod.test(mean.resp[iord], up.bound[iord],
     low.bound[iord])
}

names(tolcl) <- taxa.names
print(tolcl)

Causal Analysis/Diagnosis Decision Information System (CADDIS)

  • CADDIS Home
    • About CADDIS
    • Frequent Questions
    • Publications
    • Recent Additions
    • Related Links
    • CADDIS Glossary
  • Volume 1: Stressor Identification
    • About Causal Assessment
    • Getting Started
    • Step 1. Define the Case
    • Step 2. List Candidate Causes
    • Step 3. Evaluate Data from the Case
    • Step 4. Evaluate Data from Elsewhere
    • Step 5. Identify Probable Causes
  • Volume 2: Sources, Stressors and Responses
    • About Sources
      • Urbanization
    • About Stressors
  • Volume 3: Examples and Applications
    • Analytical Examples
    • Worksheet Examples
    • State Examples
    • Case Studies
    • Galleries
  • Volume 4: Data Analysis
    • Selecting an Analysis Approach
    • Getting Started
    • Basic Principles & Issues
    • Exploratory Data Analysis
    • Basic Analyses
    • Advanced Analyses
    • PECBO Appendix
    • Download Software
    • Data Analysis Topics (A -Z)
  • Volume 5: Causal Databases
    • Learn about CADLink
Contact Us about CADDIS
Contact Us to ask a question, provide feedback, or report a problem.
Last updated on February 13, 2025
  • Assistance
  • Spanish
  • Arabic
  • Chinese (simplified)
  • Chinese (traditional)
  • French
  • Haitian Creole
  • Korean
  • Portuguese
  • Russian
  • Tagalog
  • Vietnamese
United States Environmental Protection Agency

Discover.

  • Accessibility Statement
  • Budget & Performance
  • Contracting
  • EPA www Web Snapshot
  • Grants
  • No FEAR Act Data
  • Plain Writing
  • Privacy
  • Privacy and Security Notice

Connect.

  • Data
  • Inspector General
  • Jobs
  • Newsroom
  • Regulations.gov
  • Subscribe
  • USA.gov
  • White House

Ask.

  • Contact EPA
  • EPA Disclaimers
  • Hotlines
  • FOIA Requests
  • Frequent Questions
  • Site Feedback

Follow.