library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
library(dplyr)
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(MASS)
## 
## Attaching package: 'MASS'
## 
## The following object is masked from 'package:dplyr':
## 
##     select
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## The following object is masked from 'package:purrr':
## 
##     some
wd<-getwd()
ECD<-read_xlsx("ECD.xlsx")
###2) Create a linear model "lm()" from the variables, with a continuous dependent variable as the outcome

ECD_multiple<-lm(ECD$`2023 Total Usage` ~ ECD$`Total people in household` + ECD$`Annual Household Income`, data=ECD)

###3) Check the following assumptions:(a-e)

###a)Linearity (plot and raintest)

plot(ECD_multiple, which = 1)

###PLOT: POINTS ARE SCATTERED SOMEWHAT AROUND THE STRAIGHT LINE. ALTHOUGH THERE ARE DEVIATIONS, THE LINE IS MOSTLY STRAIGHT, SUGGESTING THAT THE RELATIONSHIP BETWEEN VARIABLES IS MOSTLY LINEAR- ASSUMPTION MET. 
raintest(ECD_multiple)
## 
##  Rainbow test
## 
## data:  ECD_multiple
## Rain = 0.62729, df1 = 150, df2 = 146, p-value = 0.9976
###RAINBOW TEST: HERE THE P VALUE IS HIGH, MEANING THE DATA IS LINEAR- ASSUMPTION MET.

###b)Independence of errors (durbin-watson)

durbinWatsonTest(ECD_multiple)
##  lag Autocorrelation D-W Statistic p-value
##    1       0.1444348      1.709165   0.014
##  Alternative hypothesis: rho != 0
###DURBIN-WATSON TEST: HERE THE P-VALUE IS LESS THAN 0.5 (0.01) ,THIS MEANS THE ERRORS ARE NOT INDEPENDENT. HOWEVER THE D-W STATISTIC IS   1.709165, WHICH IS VERY CLOSE TO 2 MEANING ASSUMPTION IS MOST LIKELY MET. 

###c)Homoscedasticity (plot, bptest)

plot(ECD_multiple,which=3)

###FITTED PLOT: LINE IS PRETTY STRAIGHT AND THE POINTS CLUSTERED SOMEWHAT EVENLY AROUND IT, I WOULD SAY THIS MEETS THE ASSUMPTIONS. 
bptest(ECD_multiple)
## 
##  studentized Breusch-Pagan test
## 
## data:  ECD_multiple
## BP = 1.308, df = 2, p-value = 0.52
###BP TEST: HERE THE P VALUE IS GREATER THAN 0.05 (P-VALUE= 0.52). SINCE THE P VALUE IS NOT SIGNIFICANT, HETEROSCEDASCITY CAN BE REJECTED AND HOMOSCEDASTICITY CAN BE ASSUMED- ASSUMPTION MET

###d)Normality of residuals (QQ plot, shapiro test)

plot(ECD_multiple,which=2)

###QQ PLOT: HERE THERE ARE OBSERVATIONS THAT DO NOT LIE ALONG THE DOTTED LINE, ASSUMPTION IS VIOLATED
shapiro.test(ECD_multiple$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  ECD_multiple$residuals
## W = 0.85562, p-value = 4.706e-16
###SHAPIRO WILK TEST: TEST SHOWS P VALUE IS LESS THAN 0.05 MEANING THE DATA IS PROBABLY NOT NORMAL AND ASSUMPTION IS VIOLATED 

###e)No multicolinarity

vif(ECD_multiple)
## ECD$`Total people in household`   ECD$`Annual Household Income` 
##                        1.004333                        1.004333
###VIF: HERE THERE IS NO VIF THAT IS GREATER THAN 10 WHICH COULD  MEAN THEY ARE NOT CORRELATED WITH OTHER VARIABLES- ASSUMPTION IS MET
###5) If your model violates an assumption, which one?
###MODEL VIOLATES: NORMALITY OF RESIDUALS 

###6) What would you do to mitigate this assumption? Show your work.

###IN ORDER TO MITIGATE I WOULD ADJUST MODEL USING LOG 

###HAVE TO FILTER DUE TO 0'S IN VARIABLE "ANNUAL HOUSEHOLD INCOME"
ECD_filtered <- ECD %>% filter(`2023 Total Usage` > 0, `Total people in household` > 0, `Annual Household Income` > 0)

ECD_multiple_log <- lm(log(`2023 Total Usage`) ~ log(`Total people in household`) + log(`Annual Household Income`), data = ECD_filtered)

plot(ECD_multiple, which=2)

plot(ECD_multiple_log, which=2)