% Options for packages loaded elsewhere
\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{hyphens}{url}
\documentclass[
]{article}
\usepackage{xcolor}
\usepackage[margin=1in]{geometry}
\usepackage{amsmath,amssymb}
\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
\usepackage{iftex}
\ifPDFTeX
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage{textcomp} % provide euro and other symbols
\else % if luatex or xetex
  \usepackage{unicode-math} % this also loads fontspec
  \defaultfontfeatures{Scale=MatchLowercase}
  \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
\fi
\usepackage{lmodern}
\ifPDFTeX\else
  % xetex/luatex font selection
\fi
% Use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\IfFileExists{microtype.sty}{% use microtype if available
  \usepackage[]{microtype}
  \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\makeatletter
\@ifundefined{KOMAClassName}{% if non-KOMA class
  \IfFileExists{parskip.sty}{%
    \usepackage{parskip}
  }{% else
    \setlength{\parindent}{0pt}
    \setlength{\parskip}{6pt plus 2pt minus 1pt}}
}{% if KOMA class
  \KOMAoptions{parskip=half}}
\makeatother
\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% Add ',fontsize=\small' for more characters per line
\usepackage{framed}
\definecolor{shadecolor}{RGB}{248,248,248}
\newenvironment{Shaded}{\begin{snugshade}}{\end{snugshade}}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{0.94,0.16,0.16}{#1}}
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{#1}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}}
\newcommand{\BuiltInTok}[1]{#1}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textit{#1}}}
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{#1}}
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{#1}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{#1}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}}
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{0.64,0.00,0.00}{\textbf{#1}}}
\newcommand{\ExtensionTok}[1]{#1}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{#1}}}
\newcommand{\ImportTok}[1]{#1}
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{#1}}}
\newcommand{\NormalTok}[1]{#1}
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.81,0.36,0.00}{\textbf{#1}}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{#1}}
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textit{#1}}}
\newcommand{\RegionMarkerTok}[1]{#1}
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.81,0.36,0.00}{\textbf{#1}}}
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}}
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}}
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}}
\usepackage{graphicx}
\makeatletter
\newsavebox\pandoc@box
\newcommand*\pandocbounded[1]{% scales image to fit in text height/width
  \sbox\pandoc@box{#1}%
  \Gscale@div\@tempa{\textheight}{\dimexpr\ht\pandoc@box+\dp\pandoc@box\relax}%
  \Gscale@div\@tempb{\linewidth}{\wd\pandoc@box}%
  \ifdim\@tempb\p@<\@tempa\p@\let\@tempa\@tempb\fi% select the smaller of both
  \ifdim\@tempa\p@<\p@\scalebox{\@tempa}{\usebox\pandoc@box}%
  \else\usebox{\pandoc@box}%
  \fi%
}
% Set default figure placement to htbp
\def\fps@figure{htbp}
\makeatother
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\usepackage{bookmark}
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
\urlstyle{same}
\hypersetup{
  pdftitle={airpollution.R},
  pdfauthor={Lenovo},
  hidelinks,
  pdfcreator={LaTeX via pandoc}}

\title{airpollution.R}
\author{Lenovo}
\date{2025-11-12}

\begin{document}
\maketitle

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\#Analysis of Port Talbot Hourly AQ Dataset}
\CommentTok{\#==========================================}

\CommentTok{\#loading all libraries}
\CommentTok{\#{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}}
  \FunctionTok{library}\NormalTok{(rstatix)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Warning: package 'rstatix' was built under R version 4.5.2
\end{verbatim}

\begin{verbatim}
## 
## Attaching package: 'rstatix'
\end{verbatim}

\begin{verbatim}
## The following object is masked from 'package:stats':
## 
##     filter
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
  \FunctionTok{library}\NormalTok{(readr)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Warning: package 'readr' was built under R version 4.5.2
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
  \FunctionTok{library}\NormalTok{(ggplot2)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Warning: package 'ggplot2' was built under R version 4.5.2
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
  \FunctionTok{library}\NormalTok{(tidyverse)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Warning: package 'tidyverse' was built under R version 4.5.2
\end{verbatim}

\begin{verbatim}
## Warning: package 'tidyr' was built under R version 4.5.2
\end{verbatim}

\begin{verbatim}
## Warning: package 'purrr' was built under R version 4.5.2
\end{verbatim}

\begin{verbatim}
## Warning: package 'forcats' was built under R version 4.5.2
\end{verbatim}

\begin{verbatim}
## Warning: package 'lubridate' was built under R version 4.5.2
\end{verbatim}

\begin{verbatim}
## -- Attaching core tidyverse packages ------------------------ tidyverse 2.0.0 --
## v dplyr     1.1.4     v stringr   1.5.2
## v forcats   1.0.1     v tibble    3.3.0
## v lubridate 1.9.4     v tidyr     1.3.1
## v purrr     1.2.0
\end{verbatim}

\begin{verbatim}
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks rstatix::filter(), stats::filter()
## x dplyr::lag()    masks stats::lag()
## i Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
  \FunctionTok{library}\NormalTok{(lubridate)}
  \FunctionTok{library}\NormalTok{(car)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Warning: package 'car' was built under R version 4.5.2
\end{verbatim}

\begin{verbatim}
## Loading required package: carData
\end{verbatim}

\begin{verbatim}
## Warning: package 'carData' was built under R version 4.5.2
\end{verbatim}

\begin{verbatim}
## 
## Attaching package: 'car'
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## The following object is masked from 'package:purrr':
## 
##     some
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
  \FunctionTok{library}\NormalTok{(broom)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Warning: package 'broom' was built under R version 4.5.2
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\#Problem{-}1}
\CommentTok{\#==========}

\CommentTok{\#Read CSV File}
\CommentTok{\#{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}}
\NormalTok{PortTalbotAQ }\OtherTok{\textless{}{-}} \FunctionTok{read\_csv}\NormalTok{(}\StringTok{"Port\_Talbot\_Hourly\_AQ.csv"}\NormalTok{,}
                         \AttributeTok{na =} \FunctionTok{c}\NormalTok{(}\StringTok{"No data"}\NormalTok{, }\StringTok{"NA"}\NormalTok{, }\StringTok{""}\NormalTok{))  }
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Rows: 87672 Columns: 24
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr  (12): Date, Status, Status.1, Status.2, Status.3, Status.4, Status.5, S...
## dbl  (11): Ozone, Nitric oxide, Nitrogen dioxide, Nitrogen oxides as nitroge...
## time  (1): Time
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\#Rename all Headers in a short form}
\CommentTok{\#{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}{-}}
\NormalTok{PortTalbotAQ }\OtherTok{\textless{}{-}}\NormalTok{ PortTalbotAQ }\SpecialCharTok{\%\textgreater{}\%}
  \FunctionTok{rename}\NormalTok{(}
    \AttributeTok{Date =} \StringTok{\textasciigrave{}}\AttributeTok{Date}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Time =} \StringTok{\textasciigrave{}}\AttributeTok{Time}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{O3 =} \StringTok{\textasciigrave{}}\AttributeTok{Ozone}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Status =} \StringTok{\textasciigrave{}}\AttributeTok{Status}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{NO =} \StringTok{\textasciigrave{}}\AttributeTok{Nitric oxide}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Status1 =} \StringTok{\textasciigrave{}}\AttributeTok{Status.1}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{NO2 =} \StringTok{\textasciigrave{}}\AttributeTok{Nitrogen dioxide}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Status2 =} \StringTok{\textasciigrave{}}\AttributeTok{Status.2}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{NOx =} \StringTok{\textasciigrave{}}\AttributeTok{Nitrogen oxides as nitrogen dioxide}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Status3 =} \StringTok{\textasciigrave{}}\AttributeTok{Status.3}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{SO2 =} \StringTok{\textasciigrave{}}\AttributeTok{Sulphur dioxide}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Status4 =} \StringTok{\textasciigrave{}}\AttributeTok{Status.4}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{CO =} \StringTok{\textasciigrave{}}\AttributeTok{Carbon monoxide}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Status5 =} \StringTok{\textasciigrave{}}\AttributeTok{Status.5}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{PM10 =} \StringTok{\textasciigrave{}}\AttributeTok{PM10 particulate matter (Hourly measured)}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Status6 =} \StringTok{\textasciigrave{}}\AttributeTok{Status.6}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{PM2.5 =} \StringTok{\textasciigrave{}}\AttributeTok{PM2.5 particulate matter (Hourly measured)}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Status7 =} \StringTok{\textasciigrave{}}\AttributeTok{Status.7}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{WindDirct =} \StringTok{\textasciigrave{}}\AttributeTok{Modelled Wind Direction}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Status8 =} \StringTok{\textasciigrave{}}\AttributeTok{Status.8}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{WindSpd =} \StringTok{\textasciigrave{}}\AttributeTok{Modelled Wind Speed}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Status9 =} \StringTok{\textasciigrave{}}\AttributeTok{Status.9}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Tempt =} \StringTok{\textasciigrave{}}\AttributeTok{Modelled Temperature}\StringTok{\textasciigrave{}}\NormalTok{,}
    \AttributeTok{Status10 =} \StringTok{\textasciigrave{}}\AttributeTok{Status.10}\StringTok{\textasciigrave{}}
\NormalTok{  )}
\CommentTok{\#Result in DataFrame}
\NormalTok{PortTalbotAQ }\OtherTok{\textless{}{-}}\NormalTok{ PortTalbotAQ }\SpecialCharTok{\%\textgreater{}\%}
  \FunctionTok{mutate}\NormalTok{(}
    \AttributeTok{datetime =} \FunctionTok{dmy\_hms}\NormalTok{(}
      \FunctionTok{paste}\NormalTok{(Date, Time),}
      \AttributeTok{tz =} \StringTok{"UTC"}\NormalTok{)}
\NormalTok{      ) }\SpecialCharTok{\%\textgreater{}\%}
  \FunctionTok{arrange}\NormalTok{(datetime)}

\FunctionTok{print}\NormalTok{(}\FunctionTok{head}\NormalTok{(PortTalbotAQ))}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## # A tibble: 6 x 25
##   Date       Time      O3 Status    NO Status1   NO2 Status2   NOx Status3   SO2
##   <chr>      <time> <dbl> <chr>  <dbl> <chr>   <dbl> <chr>   <dbl> <chr>   <dbl>
## 1 01-01-2015 01:00   52.2 V ugm~ 1.34  V ugm-3 19.8  V ugm-3 21.8  V ugm-3 52.0 
## 2 01-01-2015 02:00   51.2 V ugm~ 2.20  V ugm-3 20.5  V ugm-3 23.9  V ugm-3 20.6 
## 3 01-01-2015 03:00   51.1 V ugm~ 0.841 V ugm-3 18.2  V ugm-3 19.5  V ugm-3 20.0 
## 4 01-01-2015 04:00   54.6 V ugm~ 0.227 V ugm-3  9.56 V ugm-3  9.91 V ugm-3 11.6 
## 5 01-01-2015 05:00   54.9 V ugm~ 0.227 V ugm-3  7.59 V ugm-3  7.93 V ugm-3  4.84
## 6 01-01-2015 06:00   52.3 V ugm~ 3.85  V ugm-3 13.5  V ugm-3 19.4  V ugm-3  8.67
## # i 14 more variables: Status4 <chr>, CO <dbl>, Status5 <chr>, PM10 <dbl>,
## #   Status6 <chr>, PM2.5 <dbl>, Status7 <chr>, WindDirct <dbl>, Status8 <chr>,
## #   WindSpd <dbl>, Status9 <chr>, Tempt <dbl>, Status10 <chr>, datetime <dttm>
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\#Problem{-}2}
\CommentTok{\#==========}

\CommentTok{\#Percentage of missing readings per pollutant}
\NormalTok{pollutants }\OtherTok{\textless{}{-}} \FunctionTok{c}\NormalTok{(}\StringTok{"O3"}\NormalTok{, }\StringTok{"NO"}\NormalTok{, }\StringTok{"NO2"}\NormalTok{, }\StringTok{"NOx"}\NormalTok{, }\StringTok{"SO2"}\NormalTok{, }\StringTok{"CO"}\NormalTok{)}
\NormalTok{invalidData }\OtherTok{\textless{}{-}} \FunctionTok{tibble}\NormalTok{(}
  \AttributeTok{pollutant =}\NormalTok{ pollutants,}
  \AttributeTok{pct\_missing =} \FunctionTok{sapply}\NormalTok{(pollutants, }\ControlFlowTok{function}\NormalTok{(p) \{}
    \FunctionTok{mean}\NormalTok{(}\FunctionTok{is.na}\NormalTok{(PortTalbotAQ[[p]])) }\SpecialCharTok{*} \DecValTok{100}
\NormalTok{  \})}
\NormalTok{)}
\FunctionTok{print}\NormalTok{(invalidData)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## # A tibble: 6 x 2
##   pollutant pct_missing
##   <chr>           <dbl>
## 1 O3               1.98
## 2 NO               3.67
## 3 NO2              3.98
## 4 NOx              3.98
## 5 SO2              2.40
## 6 CO               4.74
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\#Problem{-}3}
\CommentTok{\#==========}

\CommentTok{\#Displaying nitrogen oxides as nitrogen dioxide(NO) between July 2015 and November 2024}
\NormalTok{displayPollutantGraph }\OtherTok{\textless{}{-}} \ControlFlowTok{function}\NormalTok{(}
\NormalTok{    pollutant, start\_month, start\_year, end\_month, end\_year) \{}
\NormalTok{    start\_date }\OtherTok{\textless{}{-}} \FunctionTok{make\_date}\NormalTok{(start\_year, start\_month, }\DecValTok{1}\NormalTok{)}
\NormalTok{    end\_date }\OtherTok{\textless{}{-}} \FunctionTok{make\_date}\NormalTok{(end\_year, end\_month, }\DecValTok{1}\NormalTok{)}
    
\NormalTok{    df }\OtherTok{\textless{}{-}}\NormalTok{ PortTalbotAQ }\SpecialCharTok{\%\textgreater{}\%}
    \FunctionTok{filter}\NormalTok{(}
      \FunctionTok{day}\NormalTok{(datetime) }\SpecialCharTok{==} \DecValTok{1}\NormalTok{, }\FunctionTok{hour}\NormalTok{(datetime) }\SpecialCharTok{==} \DecValTok{12}\NormalTok{,}
\NormalTok{          datetime }\SpecialCharTok{\textgreater{}=}\NormalTok{ start\_date, datetime }\SpecialCharTok{\textless{}=}\NormalTok{ end\_date) }\SpecialCharTok{\%\textgreater{}\%}
    \FunctionTok{select}\NormalTok{(datetime, }\AttributeTok{value =} \FunctionTok{all\_of}\NormalTok{(pollutant))}
  
    \FunctionTok{ggplot}\NormalTok{(df, }\FunctionTok{aes}\NormalTok{(}\AttributeTok{x =}\NormalTok{ datetime, }\AttributeTok{y =}\NormalTok{ value)) }\SpecialCharTok{+}
    \FunctionTok{geom\_line}\NormalTok{() }\SpecialCharTok{+} \FunctionTok{geom\_point}\NormalTok{() }\SpecialCharTok{+}
    \FunctionTok{labs}\NormalTok{(}\AttributeTok{title =} \FunctionTok{paste}\NormalTok{(pollutant, }\StringTok{"at 12:00 on 1st of month"}\NormalTok{),}
         \AttributeTok{x =} \StringTok{"Date"}\NormalTok{, }\AttributeTok{y =} \FunctionTok{paste}\NormalTok{(pollutant, }\StringTok{"(Units)"}\NormalTok{)) }\SpecialCharTok{+}
    \FunctionTok{theme\_minimal}\NormalTok{()}
\NormalTok{\}}

\CommentTok{\# For making Plots Visual}
\FunctionTok{displayPollutantGraph}\NormalTok{(}\StringTok{"NOx"}\NormalTok{, }\DecValTok{7}\NormalTok{, }\DecValTok{2015}\NormalTok{, }\DecValTok{11}\NormalTok{, }\DecValTok{2024}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
\end{verbatim}

\pandocbounded{\includegraphics[keepaspectratio]{airpollution_files/figure-latex/unnamed-chunk-1-1.pdf}}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\#Problem{-}4}
\CommentTok{\#==========}

\CommentTok{\#Comparing vector of 4 pollutants}
\NormalTok{comparePollutants }\OtherTok{\textless{}{-}} \ControlFlowTok{function}\NormalTok{(pollutants) \{}
\NormalTok{  dfList }\OtherTok{\textless{}{-}} \FunctionTok{lapply}\NormalTok{(pollutants, }\ControlFlowTok{function}\NormalTok{(p) \{}
\NormalTok{    PortTalbotAQ }\SpecialCharTok{\%\textgreater{}\%}
      \FunctionTok{filter}\NormalTok{(}\FunctionTok{day}\NormalTok{(datetime) }\SpecialCharTok{==} \DecValTok{1}\NormalTok{, }\FunctionTok{hour}\NormalTok{(datetime) }\SpecialCharTok{==} \DecValTok{12}\NormalTok{) }\SpecialCharTok{\%\textgreater{}\%}
      \FunctionTok{select}\NormalTok{(datetime, }\AttributeTok{pollutant =} \FunctionTok{all\_of}\NormalTok{(p)) }\SpecialCharTok{\%\textgreater{}\%}
      \FunctionTok{mutate}\NormalTok{(}\AttributeTok{name =}\NormalTok{ p)}
\NormalTok{  \})}
\NormalTok{  dfm }\OtherTok{\textless{}{-}} \FunctionTok{bind\_rows}\NormalTok{(dfList)}
  \FunctionTok{ggplot}\NormalTok{(dfm, }\FunctionTok{aes}\NormalTok{(}\AttributeTok{x =}\NormalTok{ datetime, }\AttributeTok{y =}\NormalTok{ pollutant, }\AttributeTok{color =}\NormalTok{ name)) }\SpecialCharTok{+}
    \FunctionTok{geom\_line}\NormalTok{() }\SpecialCharTok{+} \FunctionTok{geom\_point}\NormalTok{() }\SpecialCharTok{+} \FunctionTok{labs}\NormalTok{(}\AttributeTok{y =} \StringTok{"Value"}\NormalTok{, }\AttributeTok{x =} \StringTok{"Date"}\NormalTok{) }\SpecialCharTok{+} \FunctionTok{theme\_minimal}\NormalTok{()}
\NormalTok{\}}
\CommentTok{\# For making Plot Visuals of O3, NO, NO2, NOx pollutants}
\FunctionTok{comparePollutants}\NormalTok{(}\FunctionTok{c}\NormalTok{(}\StringTok{"O3"}\NormalTok{,}\StringTok{"NO"}\NormalTok{,}\StringTok{"NO2"}\NormalTok{,}\StringTok{"NOx"}\NormalTok{))}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Warning: Removed 8 rows containing missing values or values outside the scale range
## (`geom_point()`).
\end{verbatim}

\pandocbounded{\includegraphics[keepaspectratio]{airpollution_files/figure-latex/unnamed-chunk-1-2.pdf}}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\#Problem{-}5}
\CommentTok{\#==========}

\CommentTok{\#Correlation between ozone and nitrogen dioxide}
\NormalTok{O3NO2Correlation }\OtherTok{\textless{}{-}} \ControlFlowTok{function}\NormalTok{() \{}
\NormalTok{  df }\OtherTok{\textless{}{-}}\NormalTok{ PortTalbotAQ }\SpecialCharTok{\%\textgreater{}\%} \FunctionTok{select}\NormalTok{(O3, NO2) }\SpecialCharTok{\%\textgreater{}\%} \FunctionTok{drop\_na}\NormalTok{()}
\NormalTok{  res }\OtherTok{\textless{}{-}} \FunctionTok{cor.test}\NormalTok{(df}\SpecialCharTok{$}\NormalTok{O3, df}\SpecialCharTok{$}\NormalTok{NO2, }\AttributeTok{method =} \StringTok{"pearson"}\NormalTok{)}
  \FunctionTok{print}\NormalTok{(res)}
  \FunctionTok{ggplot}\NormalTok{(df, }\FunctionTok{aes}\NormalTok{(}\AttributeTok{x =}\NormalTok{ NO2, }\AttributeTok{y =}\NormalTok{ O3)) }\SpecialCharTok{+}
    \FunctionTok{geom\_point}\NormalTok{() }\SpecialCharTok{+} \FunctionTok{geom\_smooth}\NormalTok{(}\AttributeTok{method =} \StringTok{"lm"}\NormalTok{, }\AttributeTok{se =} \ConstantTok{TRUE}\NormalTok{) }\SpecialCharTok{+}
    \FunctionTok{labs}\NormalTok{(}\AttributeTok{title =} \StringTok{"O3 vs NO2"}\NormalTok{, }\AttributeTok{subtitle =} \FunctionTok{paste0}\NormalTok{(}\StringTok{"r = "}\NormalTok{, }\FunctionTok{round}\NormalTok{(res}\SpecialCharTok{$}\NormalTok{estimate,}\DecValTok{3}\NormalTok{),}
                                                \StringTok{", p = "}\NormalTok{, }\FunctionTok{signif}\NormalTok{(res}\SpecialCharTok{$}\NormalTok{p.value,}\DecValTok{3}\NormalTok{)))}
\NormalTok{\}}
\FunctionTok{O3NO2Correlation}\NormalTok{()}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## 
##  Pearson's product-moment correlation
## 
## data:  df$O3 and df$NO2
## t = -160.86, df = 83743, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.4910057 -0.4806573
## sample estimates:
##        cor 
## -0.4858485
\end{verbatim}

\begin{verbatim}
## `geom_smooth()` using formula = 'y ~ x'
\end{verbatim}

\pandocbounded{\includegraphics[keepaspectratio]{airpollution_files/figure-latex/unnamed-chunk-1-3.pdf}}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\#Problem{-}6}
\CommentTok{\#==========}

\CommentTok{\# ==== 1. ডাটা প্রস্তুতি ====}
\CommentTok{\# নিশ্চিত করুন PortTalbotAQ লোডেড এবং datetime টিকা আছে।}
\NormalTok{df }\OtherTok{\textless{}{-}}\NormalTok{ PortTalbotAQ[}\SpecialCharTok{!}\FunctionTok{is.na}\NormalTok{(PortTalbotAQ}\SpecialCharTok{$}\NormalTok{O3) }\SpecialCharTok{\&} \SpecialCharTok{!}\FunctionTok{is.na}\NormalTok{(PortTalbotAQ}\SpecialCharTok{$}\NormalTok{WindSpd),}
                   \FunctionTok{c}\NormalTok{(}\StringTok{"O3"}\NormalTok{,}\StringTok{"WindSpd"}\NormalTok{)]}

\CommentTok{\# গ্রুপ বানানো}
\NormalTok{df}\SpecialCharTok{$}\NormalTok{windGrp }\OtherTok{\textless{}{-}} \FunctionTok{ifelse}\NormalTok{(df}\SpecialCharTok{$}\NormalTok{WindSpd }\SpecialCharTok{\textless{}} \DecValTok{5}\NormalTok{, }\StringTok{"low"}\NormalTok{, }\StringTok{"high"}\NormalTok{)}
\NormalTok{df}\SpecialCharTok{$}\NormalTok{windGrp }\OtherTok{\textless{}{-}} \FunctionTok{factor}\NormalTok{(df}\SpecialCharTok{$}\NormalTok{windGrp, }\AttributeTok{levels =} \FunctionTok{c}\NormalTok{(}\StringTok{"low"}\NormalTok{,}\StringTok{"high"}\NormalTok{))}

\CommentTok{\# সামারি (নমুনা সংখ্যা, গড়, স্ট্যান্ডার্ড ডেভিয়েশন)}
\FunctionTok{aggregate}\NormalTok{(O3 }\SpecialCharTok{\textasciitilde{}}\NormalTok{ windGrp, }\AttributeTok{data =}\NormalTok{ df, }\AttributeTok{FUN =} \ControlFlowTok{function}\NormalTok{(r) }\FunctionTok{c}\NormalTok{(}\AttributeTok{n =} \FunctionTok{length}\NormalTok{(r), }\AttributeTok{mean =} \FunctionTok{mean}\NormalTok{(r), }\AttributeTok{sd =} \FunctionTok{sd}\NormalTok{(r)))}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
##   windGrp        O3.n     O3.mean       O3.sd
## 1     low 42208.00000    47.15779    21.56630
## 2    high 41944.00000    58.73648    16.99452
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\# ==== 2. আনুমানিক চেক ====\# ==== 2FUN = . আনুমানিক চেক ====}
\CommentTok{\# Shapiro (normality) {-}{-} প্রতিটি গ্রুপে}
\FunctionTok{by}\NormalTok{(df}\SpecialCharTok{$}\NormalTok{O3, df}\SpecialCharTok{$}\NormalTok{windGrp, }\ControlFlowTok{function}\NormalTok{(r) \{}
\NormalTok{  n }\OtherTok{\textless{}{-}} \FunctionTok{length}\NormalTok{(r)}
  \ControlFlowTok{if}\NormalTok{ (n }\SpecialCharTok{\textgreater{}=} \DecValTok{3} \SpecialCharTok{\&\&}\NormalTok{ n }\SpecialCharTok{\textless{}=} \DecValTok{5000}\NormalTok{) \{}
    \FunctionTok{shapiro.test}\NormalTok{(r)}
\NormalTok{  \} }\ControlFlowTok{else}\NormalTok{ \{}
    \FunctionTok{cat}\NormalTok{(}\StringTok{"Group size"}\NormalTok{, n, }\StringTok{"is not valid for Shapiro test. Returning NA.}\SpecialCharTok{\textbackslash{}n}\StringTok{"}\NormalTok{)}
    \ConstantTok{NA}
\NormalTok{  \}}
\NormalTok{\})}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Group size 42208 is not valid for Shapiro test. Returning NA.
## Group size 41944 is not valid for Shapiro test. Returning NA.
\end{verbatim}

\begin{verbatim}
## df$windGrp: low
## [1] NA
## ------------------------------------------------------------ 
## df$windGrp: high
## [1] NA
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\# Levene test (variance equality)}
\NormalTok{leveneRes }\OtherTok{\textless{}{-}} \FunctionTok{leveneTest}\NormalTok{(O3 }\SpecialCharTok{\textasciitilde{}}\NormalTok{ windGrp, }\AttributeTok{data =}\NormalTok{ df)}
\FunctionTok{print}\NormalTok{(leveneRes)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Levene's Test for Homogeneity of Variance (center = median)
##          Df F value    Pr(>F)    
## group     1  2562.6 < 2.2e-16 ***
##       84150                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\# ==== 3. উপযুক্ত টেস্ট নির্বাচন ও চালানো ====}
\CommentTok{\# যদি দুই গ্রুপই প্রায় normal: use Welch t{-}test (safe)}
\CommentTok{\# যদি normality খারাপ হলে: use wilcox.test (nonparametric)}
\CommentTok{\# Define helper function for safe Shapiro test}
\NormalTok{safeShapiro }\OtherTok{\textless{}{-}} \ControlFlowTok{function}\NormalTok{(r) \{}
\NormalTok{  n }\OtherTok{\textless{}{-}} \FunctionTok{length}\NormalTok{(r)}
  \ControlFlowTok{if}\NormalTok{ (n }\SpecialCharTok{\textgreater{}=} \DecValTok{3} \SpecialCharTok{\&\&}\NormalTok{ n }\SpecialCharTok{\textless{}=} \DecValTok{5000}\NormalTok{) \{}
    \FunctionTok{return}\NormalTok{(}\FunctionTok{shapiro.test}\NormalTok{(r)}\SpecialCharTok{$}\NormalTok{p.value)}
\NormalTok{  \} }\ControlFlowTok{else}\NormalTok{ \{}
    \FunctionTok{return}\NormalTok{(}\ConstantTok{NA}\NormalTok{)}
\NormalTok{  \}}
\NormalTok{\}}
\NormalTok{lowO3  }\OtherTok{\textless{}{-}}\NormalTok{ df}\SpecialCharTok{$}\NormalTok{O3[df}\SpecialCharTok{$}\NormalTok{windGrp }\SpecialCharTok{==} \StringTok{"low"}\NormalTok{]}
\NormalTok{highO3 }\OtherTok{\textless{}{-}}\NormalTok{ df}\SpecialCharTok{$}\NormalTok{O3[df}\SpecialCharTok{$}\NormalTok{windGrp }\SpecialCharTok{==} \StringTok{"high"}\NormalTok{]}
\NormalTok{pLow  }\OtherTok{\textless{}{-}} \FunctionTok{safeShapiro}\NormalTok{(lowO3)}
\NormalTok{pHigh }\OtherTok{\textless{}{-}} \FunctionTok{safeShapiro}\NormalTok{(highO3)}

\FunctionTok{cat}\NormalTok{(}\StringTok{"Low group Shapiro p ="}\NormalTok{, pLow, }\StringTok{"}\SpecialCharTok{\textbackslash{}n}\StringTok{"}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Low group Shapiro p = NA
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{cat}\NormalTok{(}\StringTok{"High group Shapiro p ="}\NormalTok{, pHigh, }\StringTok{"}\SpecialCharTok{\textbackslash{}n}\StringTok{"}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## High group Shapiro p = NA
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\# Then safely create your normality flag}
\NormalTok{nrmlOk }\OtherTok{\textless{}{-}}\NormalTok{ (}\SpecialCharTok{!}\FunctionTok{is.na}\NormalTok{(pLow) }\SpecialCharTok{\&\&}\NormalTok{ pLow }\SpecialCharTok{\textgreater{}} \FloatTok{0.05}\NormalTok{) }\SpecialCharTok{\&\&}\NormalTok{ (}\SpecialCharTok{!}\FunctionTok{is.na}\NormalTok{(pHigh) }\SpecialCharTok{\&\&}\NormalTok{ pHigh }\SpecialCharTok{\textgreater{}} \FloatTok{0.05}\NormalTok{)}
\ControlFlowTok{if}\NormalTok{ (nrmlOk) \{}
\NormalTok{  tRes }\OtherTok{\textless{}{-}} \FunctionTok{t.test}\NormalTok{(O3 }\SpecialCharTok{\textasciitilde{}}\NormalTok{ windGrp, }\AttributeTok{data =}\NormalTok{ df, }\AttributeTok{var.equal =} \ConstantTok{FALSE}\NormalTok{) }\CommentTok{\# Welch}
  \FunctionTok{print}\NormalTok{(tRes)}
  \CommentTok{\# effect size}
\NormalTok{  d }\OtherTok{\textless{}{-}} \FunctionTok{cohen.d}\NormalTok{(O3 }\SpecialCharTok{\textasciitilde{}}\NormalTok{ windGrp, }\AttributeTok{data =}\NormalTok{ df)}
  \FunctionTok{print}\NormalTok{(d)}
\NormalTok{\} }\ControlFlowTok{else}\NormalTok{ \{}
\NormalTok{  wRes }\OtherTok{\textless{}{-}} \FunctionTok{wilcox.test}\NormalTok{(O3 }\SpecialCharTok{\textasciitilde{}}\NormalTok{ windGrp, }\AttributeTok{data =}\NormalTok{ df)}
  \FunctionTok{print}\NormalTok{(wRes)}
\NormalTok{\}}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  O3 by windGrp
## W = 582299975, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\#Problem{-}7}
\CommentTok{\#==========}

\CommentTok{\# filter for Nov 1 {-} Dec 31 at 17:00 for each year}

\CommentTok{\# filtering data for Nov 1 to Dec 31 at 17:00 for years 2016,2018,2020}
\NormalTok{years }\OtherTok{\textless{}{-}} \FunctionTok{c}\NormalTok{(}\DecValTok{2016}\NormalTok{, }\DecValTok{2018}\NormalTok{, }\DecValTok{2020}\NormalTok{)}

\CommentTok{\# Ensure datetime is POSIXct and has year/month/day/hour}
\NormalTok{PortTalbotAQ}\SpecialCharTok{$}\NormalTok{year }\OtherTok{\textless{}{-}} \FunctionTok{as.integer}\NormalTok{(}\FunctionTok{format}\NormalTok{(PortTalbotAQ}\SpecialCharTok{$}\NormalTok{datetime, }\StringTok{"\%Y"}\NormalTok{))}
\NormalTok{PortTalbotAQ}\SpecialCharTok{$}\NormalTok{month }\OtherTok{\textless{}{-}} \FunctionTok{as.integer}\NormalTok{(}\FunctionTok{format}\NormalTok{(PortTalbotAQ}\SpecialCharTok{$}\NormalTok{datetime, }\StringTok{"\%m"}\NormalTok{))}
\NormalTok{PortTalbotAQ}\SpecialCharTok{$}\NormalTok{hour }\OtherTok{\textless{}{-}} \FunctionTok{as.integer}\NormalTok{(}\FunctionTok{format}\NormalTok{(PortTalbotAQ}\SpecialCharTok{$}\NormalTok{datetime, }\StringTok{"\%H"}\NormalTok{))}

\NormalTok{dfAnova }\OtherTok{\textless{}{-}} \FunctionTok{subset}\NormalTok{(PortTalbotAQ, year }\SpecialCharTok{\%in\%}\NormalTok{ years }\SpecialCharTok{\&}\NormalTok{ month }\SpecialCharTok{\%in\%} \FunctionTok{c}\NormalTok{(}\DecValTok{11}\NormalTok{,}\DecValTok{12}\NormalTok{) }\SpecialCharTok{\&}\NormalTok{ hour }\SpecialCharTok{==} \DecValTok{17}\NormalTok{,}
                   \AttributeTok{select =} \FunctionTok{c}\NormalTok{(}\StringTok{"datetime"}\NormalTok{,}\StringTok{"year"}\NormalTok{,}\StringTok{"NO2"}\NormalTok{))}

\CommentTok{\# drop NA}
\NormalTok{dfAnova }\OtherTok{\textless{}{-}}\NormalTok{ dfAnova[}\SpecialCharTok{!}\FunctionTok{is.na}\NormalTok{(dfAnova}\SpecialCharTok{$}\NormalTok{NO2), ]}

\CommentTok{\# create factor}
\NormalTok{dfAnova}\SpecialCharTok{$}\NormalTok{yearFac }\OtherTok{\textless{}{-}} \FunctionTok{factor}\NormalTok{(dfAnova}\SpecialCharTok{$}\NormalTok{year)}

\CommentTok{\# quick summary}
\FunctionTok{table}\NormalTok{(dfAnova}\SpecialCharTok{$}\NormalTok{yearFac)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## 
## 2016 2018 2020 
##   60   59   59
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{aggregate}\NormalTok{(NO2 }\SpecialCharTok{\textasciitilde{}}\NormalTok{ yearFac, }\AttributeTok{data =}\NormalTok{ dfAnova, }\AttributeTok{FUN =} \ControlFlowTok{function}\NormalTok{(a) }\FunctionTok{c}\NormalTok{(}\AttributeTok{n =} \FunctionTok{length}\NormalTok{(a), }\AttributeTok{mean =} \FunctionTok{mean}\NormalTok{(a), }\AttributeTok{sd =} \FunctionTok{sd}\NormalTok{(a)))}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
##   yearFac    NO2.n NO2.mean   NO2.sd
## 1    2016 60.00000 36.44708 17.76008
## 2    2018 59.00000 23.72314 14.69216
## 3    2020 59.00000 22.93006 11.74671
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\# ==== 2. Check ANOVA assumptions ====}
\CommentTok{\# 2a. Normality of residuals (run ANOVA then check residuals)}
\NormalTok{anv0 }\OtherTok{\textless{}{-}} \FunctionTok{aov}\NormalTok{(NO2 }\SpecialCharTok{\textasciitilde{}}\NormalTok{ yearFac, }\AttributeTok{data =}\NormalTok{ dfAnova)}
\NormalTok{shapiroResid }\OtherTok{\textless{}{-}} \FunctionTok{shapiro.test}\NormalTok{(}\FunctionTok{residuals}\NormalTok{(anv0))}
\FunctionTok{print}\NormalTok{(shapiroResid)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(anv0)
## W = 0.96165, p-value = 8.571e-05
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\# 2b. Homogeneity of variances (Levene)}
\NormalTok{leveneRes2 }\OtherTok{\textless{}{-}} \FunctionTok{leveneTest}\NormalTok{(NO2 }\SpecialCharTok{\textasciitilde{}}\NormalTok{ yearFac, }\AttributeTok{data =}\NormalTok{ dfAnova)}
\FunctionTok{print}\NormalTok{(leveneRes2)}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## Levene's Test for Homogeneity of Variance (center = median)
##        Df F value  Pr(>F)  
## group   2  4.3409 0.01446 *
##       175                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
\end{verbatim}

\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\# ==== 3. Run ANOVA or alternative ====}
\ControlFlowTok{if}\NormalTok{ (shapiroResid}\SpecialCharTok{$}\NormalTok{p.value }\SpecialCharTok{\textgreater{}} \FloatTok{0.05} \SpecialCharTok{\&\&}\NormalTok{ leveneRes2}\SpecialCharTok{$}\StringTok{\textasciigrave{}}\AttributeTok{Pr(\textgreater{}F)}\StringTok{\textasciigrave{}}\NormalTok{[}\DecValTok{1}\NormalTok{] }\SpecialCharTok{\textgreater{}} \FloatTok{0.05}\NormalTok{) \{}
  \CommentTok{\# Use classical ANOVA}
  \FunctionTok{summary}\NormalTok{(anv0)}
  \CommentTok{\# effect size (eta squared)}
\NormalTok{  anvRes }\OtherTok{\textless{}{-}} \FunctionTok{anovaTest}\NormalTok{(}\AttributeTok{data =}\NormalTok{ dfAnova, }\AttributeTok{dv =}\NormalTok{ NO2, }\AttributeTok{between =}\NormalTok{ yearFac)}
  \FunctionTok{print}\NormalTok{(anvRes)}
\NormalTok{  eta }\OtherTok{\textless{}{-}}\NormalTok{ dfAnova }\SpecialCharTok{\%\textgreater{}\%} \FunctionTok{anovaTest}\NormalTok{(NO2 }\SpecialCharTok{\textasciitilde{}}\NormalTok{ yearFac) }\SpecialCharTok{\%\textgreater{}\%} \FunctionTok{getAnvTbl}\NormalTok{() }\SpecialCharTok{\%\textgreater{}\%}\NormalTok{ .[[}\StringTok{"ges"}\NormalTok{]]}
  \CommentTok{\# post{-}hoc Tukey}
\NormalTok{  tukeyRes }\OtherTok{\textless{}{-}} \FunctionTok{TukeyHSD}\NormalTok{(anv0)}
  \FunctionTok{print}\NormalTok{(tukeyRes)}
\NormalTok{\} }\ControlFlowTok{else}\NormalTok{ \{}
  \CommentTok{\# Kruskal{-}Wallis (non{-}parametric)}
\NormalTok{  krsklW }\OtherTok{\textless{}{-}} \FunctionTok{kruskal.test}\NormalTok{(NO2 }\SpecialCharTok{\textasciitilde{}}\NormalTok{ yearFac, }\AttributeTok{data =}\NormalTok{ dfAnova)}
  \FunctionTok{print}\NormalTok{(krsklW)}
  \ControlFlowTok{if}\NormalTok{ (krsklW}\SpecialCharTok{$}\NormalTok{p.value }\SpecialCharTok{\textless{}} \FloatTok{0.05}\NormalTok{) \{}
\NormalTok{    dunnRes }\OtherTok{\textless{}{-}} \FunctionTok{dunn\_test}\NormalTok{(dfAnova, NO2 }\SpecialCharTok{\textasciitilde{}}\NormalTok{ yearFac, }\AttributeTok{p.adjust.method =} \StringTok{"bonferroni"}\NormalTok{)}
    \FunctionTok{print}\NormalTok{(dunnRes)}
\NormalTok{  \}}
\NormalTok{\}}
\end{Highlighting}
\end{Shaded}

\begin{verbatim}
## 
##  Kruskal-Wallis rank sum test
## 
## data:  NO2 by yearFac
## Kruskal-Wallis chi-squared = 24.365, df = 2, p-value = 5.119e-06
## 
## # A tibble: 3 x 9
##   .y.   group1 group2    n1    n2 statistic         p     p.adj p.adj.signif
## * <chr> <chr>  <chr>  <int> <int>     <dbl>     <dbl>     <dbl> <chr>       
## 1 NO2   2016   2018      60    59   -4.30   0.0000172 0.0000517 ****        
## 2 NO2   2016   2020      60    59   -4.24   0.0000225 0.0000674 ****        
## 3 NO2   2018   2020      59    59    0.0590 0.953     1         ns
\end{verbatim}

\end{document}
