#Load the data
library(readxl)
library(tidyr)
library(car)
## Loading required package: carData
library(corrplot)
## corrplot 0.95 loaded
#import the data
data <- read_excel("~/Downloads/R markdown3/10326_retail_fuel_prices_05-16-24.xlsx")
## New names:
## • `` -> `...2`
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
## • `` -> `...6`
## • `` -> `...7`
## • `` -> `...8`
## • `` -> `...9`
data
## # A tibble: 101 × 9
## Average Retail Fuel Prices …¹ ...2 ...3 ...4 ...5 ...6 ...7 ...8 ...9
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Report Date Gaso… E85 CNG LNG Prop… Dies… B20 B99/…
## 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 3 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 4 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 5 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 6 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 7 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 8 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 9 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 10 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## # ℹ 91 more rows
## # ℹ abbreviated name:
## # ¹`Average Retail Fuel Prices in the United States (in Gasoline Gallon Equivalents, GGEs)`
#select columns 2 to 9
df <- data[, 2:9]
df
## # A tibble: 101 × 8
## ...2 ...3 ...4 ...5 ...6 ...7 ...8 ...9
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Gasoline E85 CNG LNG Propane* Diesel B20 B99/B100
## 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 3 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 4 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 5 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 6 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 7 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 8 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 9 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 10 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## # ℹ 91 more rows
#convert from character to numeric
df <- as.data.frame(lapply(df, function(x) as.numeric(x)))
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
## Warning in FUN(X[[i]], ...): NAs introduced by coercion
df
## ...2 ...3 ...4 ...5 ...6 ...7 ...8 ...9
## 1 NA NA NA NA NA NA NA NA
## 2 NA NA NA NA NA NA NA NA
## 3 NA NA NA NA NA NA NA NA
## 4 NA NA NA NA NA NA NA NA
## 5 NA NA NA NA NA NA NA NA
## 6 NA NA NA NA NA NA NA NA
## 7 NA NA NA NA NA NA NA NA
## 8 NA NA NA NA NA NA NA NA
## 9 NA NA NA NA NA NA NA NA
## 10 NA NA NA NA NA NA NA NA
## 11 NA NA NA NA NA NA NA NA
## 12 NA NA NA NA NA NA NA NA
## 13 NA NA NA NA NA NA NA NA
## 14 NA NA NA NA NA NA NA NA
## 15 NA NA NA NA NA NA NA NA
## 16 NA NA NA NA NA NA NA NA
## 17 NA NA NA NA NA NA NA NA
## 18 NA NA NA NA NA NA NA NA
## 19 NA NA NA NA NA NA NA NA
## 20 NA NA NA NA NA NA NA NA
## 21 NA NA NA NA NA NA NA NA
## 22 NA NA NA NA NA NA NA NA
## 23 NA NA NA NA NA NA NA NA
## 24 NA NA NA NA NA NA NA NA
## 25 NA NA NA NA NA NA NA NA
## 26 NA NA NA NA NA NA NA NA
## 27 NA NA NA NA NA NA NA NA
## 28 NA NA NA NA NA NA NA NA
## 29 NA NA NA NA NA NA NA NA
## 30 NA NA NA NA NA NA NA NA
## 31 NA NA NA NA NA NA NA NA
## 32 NA NA NA NA NA NA NA NA
## 33 NA NA NA NA NA NA NA NA
## 34 NA NA NA NA NA NA NA NA
## 35 NA NA NA NA NA NA NA NA
## 36 NA NA NA NA NA NA NA NA
## 37 NA NA NA NA NA NA NA NA
## 38 NA NA NA NA NA NA NA NA
## 39 NA NA NA NA NA NA NA NA
## 40 NA NA NA NA NA NA NA NA
## 41 NA NA NA NA NA NA NA NA
## 42 NA NA NA NA NA NA NA NA
## 43 NA NA NA NA NA NA NA NA
## 44 NA NA NA NA NA NA NA NA
## 45 NA NA NA NA NA NA NA NA
## 46 NA NA NA NA NA NA NA NA
## 47 NA NA NA NA NA NA NA NA
## 48 NA NA NA NA NA NA NA NA
## 49 NA NA NA NA NA NA NA NA
## 50 NA NA NA NA NA NA NA NA
## 51 NA NA NA NA NA NA NA NA
## 52 NA NA NA NA NA NA NA NA
## 53 NA NA NA NA NA NA NA NA
## 54 NA NA NA NA NA NA NA NA
## 55 NA NA NA NA NA NA NA NA
## 56 NA NA NA NA NA NA NA NA
## 57 NA NA NA NA NA NA NA NA
## 58 NA NA NA NA NA NA NA NA
## 59 NA NA NA NA NA NA NA NA
## 60 NA NA NA NA NA NA NA NA
## 61 NA NA NA NA NA NA NA NA
## 62 NA NA NA NA NA NA NA NA
## 63 2.50 2.68 2.17 2.66 3.88 2.63 2.55 3.41
## 64 2.67 2.87 2.18 2.57 3.87 2.70 2.59 3.39
## 65 2.88 3.05 2.22 2.60 3.85 2.89 2.75 3.48
## 66 2.91 3.10 2.19 2.64 3.93 2.99 2.78 3.57
## 67 2.27 2.59 2.19 2.71 3.99 2.65 2.52 3.50
## 68 2.76 3.00 2.22 2.38 3.97 2.75 2.59 3.44
## 69 2.76 3.06 2.21 2.46 3.87 2.71 2.58 3.55
## 70 2.68 2.97 2.20 2.40 3.79 2.74 2.58 3.65
## 71 2.59 2.96 2.18 2.47 3.82 2.71 2.60 3.65
## 72 1.91 2.28 2.19 2.43 3.74 2.33 2.13 3.44
## 73 2.22 2.58 2.15 2.40 3.75 2.20 2.11 3.08
## 74 2.18 2.54 2.18 2.42 3.74 2.13 2.06 3.26
## 75 2.32 2.65 2.19 2.45 3.90 2.35 2.18 3.11
## 76 2.82 3.12 2.19 2.39 4.01 2.77 2.53 3.49
## 77 3.09 3.40 2.22 2.54 4.08 2.90 2.74 3.56
## 78 3.25 3.55 2.33 2.45 4.34 3.10 2.96 3.73
## 79 3.28 3.87 2.49 2.69 4.69 3.22 3.08 3.88
## 80 4.13 4.60 2.59 2.82 4.83 4.50 4.16 4.96
## 81 4.70 5.10 2.76 3.15 5.19 5.02 4.80 5.48
## 82 4.05 4.13 2.88 3.23 4.86 4.60 4.40 5.15
## 83 3.31 3.60 3.25 4.23 5.02 4.08 4.01 5.11
## 84 3.69 3.88 2.99 4.02 4.98 3.78 3.62 4.85
## 85 3.59 3.84 2.86 3.38 4.46 3.45 3.40 4.44
## 86 3.72 3.96 2.85 3.49 4.51 4.02 3.98 4.76
## 87 3.06 3.32 2.95 3.34 4.78 3.51 3.45 4.60
## 88 3.65 3.85 2.90 3.43 4.72 3.62 3.55 4.48
## 89 NA NA NA NA NA NA NA NA
## 90 NA NA NA NA NA NA NA NA
## 91 NA NA NA NA NA NA NA NA
## 92 NA NA NA NA NA NA NA NA
## 93 NA NA NA NA NA NA NA NA
## 94 NA NA NA NA NA NA NA NA
## 95 NA NA NA NA NA NA NA NA
## 96 NA NA NA NA NA NA NA NA
## 97 NA NA NA NA NA NA NA NA
## 98 NA NA NA NA NA NA NA NA
## 99 NA NA NA NA NA NA NA NA
## 100 NA NA NA NA NA NA NA NA
## 101 NA NA NA NA NA NA NA NA
#clean the data
df_clean <- na.omit(df)
df_clean
## ...2 ...3 ...4 ...5 ...6 ...7 ...8 ...9
## 63 2.50 2.68 2.17 2.66 3.88 2.63 2.55 3.41
## 64 2.67 2.87 2.18 2.57 3.87 2.70 2.59 3.39
## 65 2.88 3.05 2.22 2.60 3.85 2.89 2.75 3.48
## 66 2.91 3.10 2.19 2.64 3.93 2.99 2.78 3.57
## 67 2.27 2.59 2.19 2.71 3.99 2.65 2.52 3.50
## 68 2.76 3.00 2.22 2.38 3.97 2.75 2.59 3.44
## 69 2.76 3.06 2.21 2.46 3.87 2.71 2.58 3.55
## 70 2.68 2.97 2.20 2.40 3.79 2.74 2.58 3.65
## 71 2.59 2.96 2.18 2.47 3.82 2.71 2.60 3.65
## 72 1.91 2.28 2.19 2.43 3.74 2.33 2.13 3.44
## 73 2.22 2.58 2.15 2.40 3.75 2.20 2.11 3.08
## 74 2.18 2.54 2.18 2.42 3.74 2.13 2.06 3.26
## 75 2.32 2.65 2.19 2.45 3.90 2.35 2.18 3.11
## 76 2.82 3.12 2.19 2.39 4.01 2.77 2.53 3.49
## 77 3.09 3.40 2.22 2.54 4.08 2.90 2.74 3.56
## 78 3.25 3.55 2.33 2.45 4.34 3.10 2.96 3.73
## 79 3.28 3.87 2.49 2.69 4.69 3.22 3.08 3.88
## 80 4.13 4.60 2.59 2.82 4.83 4.50 4.16 4.96
## 81 4.70 5.10 2.76 3.15 5.19 5.02 4.80 5.48
## 82 4.05 4.13 2.88 3.23 4.86 4.60 4.40 5.15
## 83 3.31 3.60 3.25 4.23 5.02 4.08 4.01 5.11
## 84 3.69 3.88 2.99 4.02 4.98 3.78 3.62 4.85
## 85 3.59 3.84 2.86 3.38 4.46 3.45 3.40 4.44
## 86 3.72 3.96 2.85 3.49 4.51 4.02 3.98 4.76
## 87 3.06 3.32 2.95 3.34 4.78 3.51 3.45 4.60
## 88 3.65 3.85 2.90 3.43 4.72 3.62 3.55 4.48
#rename the columns:
colnames(df_clean) <- c("GASOLINE", "E85", "CNG", "LNG", "PROPANE","DIESEL", "B20", "B99/B100")
df_clean
## GASOLINE E85 CNG LNG PROPANE DIESEL B20 B99/B100
## 63 2.50 2.68 2.17 2.66 3.88 2.63 2.55 3.41
## 64 2.67 2.87 2.18 2.57 3.87 2.70 2.59 3.39
## 65 2.88 3.05 2.22 2.60 3.85 2.89 2.75 3.48
## 66 2.91 3.10 2.19 2.64 3.93 2.99 2.78 3.57
## 67 2.27 2.59 2.19 2.71 3.99 2.65 2.52 3.50
## 68 2.76 3.00 2.22 2.38 3.97 2.75 2.59 3.44
## 69 2.76 3.06 2.21 2.46 3.87 2.71 2.58 3.55
## 70 2.68 2.97 2.20 2.40 3.79 2.74 2.58 3.65
## 71 2.59 2.96 2.18 2.47 3.82 2.71 2.60 3.65
## 72 1.91 2.28 2.19 2.43 3.74 2.33 2.13 3.44
## 73 2.22 2.58 2.15 2.40 3.75 2.20 2.11 3.08
## 74 2.18 2.54 2.18 2.42 3.74 2.13 2.06 3.26
## 75 2.32 2.65 2.19 2.45 3.90 2.35 2.18 3.11
## 76 2.82 3.12 2.19 2.39 4.01 2.77 2.53 3.49
## 77 3.09 3.40 2.22 2.54 4.08 2.90 2.74 3.56
## 78 3.25 3.55 2.33 2.45 4.34 3.10 2.96 3.73
## 79 3.28 3.87 2.49 2.69 4.69 3.22 3.08 3.88
## 80 4.13 4.60 2.59 2.82 4.83 4.50 4.16 4.96
## 81 4.70 5.10 2.76 3.15 5.19 5.02 4.80 5.48
## 82 4.05 4.13 2.88 3.23 4.86 4.60 4.40 5.15
## 83 3.31 3.60 3.25 4.23 5.02 4.08 4.01 5.11
## 84 3.69 3.88 2.99 4.02 4.98 3.78 3.62 4.85
## 85 3.59 3.84 2.86 3.38 4.46 3.45 3.40 4.44
## 86 3.72 3.96 2.85 3.49 4.51 4.02 3.98 4.76
## 87 3.06 3.32 2.95 3.34 4.78 3.51 3.45 4.60
## 88 3.65 3.85 2.90 3.43 4.72 3.62 3.55 4.48
#summarize the data:
summary(df_clean)
## GASOLINE E85 CNG LNG
## Min. :1.910 Min. :2.280 Min. :2.150 Min. :2.380
## 1st Qu.:2.610 1st Qu.:2.893 1st Qu.:2.190 1st Qu.:2.450
## Median :2.895 Median :3.110 Median :2.220 Median :2.620
## Mean :3.038 Mean :3.329 Mean :2.451 Mean :2.837
## 3rd Qu.:3.520 3rd Qu.:3.848 3rd Qu.:2.828 3rd Qu.:3.210
## Max. :4.700 Max. :5.100 Max. :3.250 Max. :4.230
## PROPANE DIESEL B20 B99/B100
## Min. :3.740 Min. :2.130 Min. :2.060 Min. :3.080
## 1st Qu.:3.870 1st Qu.:2.703 1st Qu.:2.558 1st Qu.:3.450
## Median :4.000 Median :2.895 Median :2.745 Median :3.610
## Mean :4.253 Mean :3.167 Mean :3.027 Mean :3.962
## 3rd Qu.:4.713 3rd Qu.:3.592 3rd Qu.:3.525 3rd Qu.:4.570
## Max. :5.190 Max. :5.020 Max. :4.800 Max. :5.480
#data visualization
boxplot(df_clean,
main = "Fuel types",
ylab = "price(in USD)",
col = "grey",
las = 2)
#reshape the dara from wide to long format
pl_data <- df_clean %>%
pivot_longer(cols = everything(), names_to = "Fuel_types", values_to = "Price_in_USD")
#compute anova test statistic
anova <- aov(Price_in_USD ~ Fuel_types, data = pl_data)
summary(anova)
## Df Sum Sq Mean Sq F value Pr(>F)
## Fuel_types 7 63.16 9.022 22.28 <2e-16 ***
## Residuals 200 80.99 0.405
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#interpretation: p_value (0.00) < alpha(0.05), we reject H0 and conclude that there is a statistically significant difference in the mean prices of the different fuel types
#Pairwise comparison:
pairwise.t.test(pl_data$Price_in_USD, pl_data$Fuel_types, p.adj = "bonferroni")
##
## Pairwise comparisons using t tests with pooled SD
##
## data: pl_data$Price_in_USD and pl_data$Fuel_types
##
## B20 B99/B100 CNG DIESEL E85 GASOLINE LNG
## B99/B100 8.5e-06 - - - - - -
## CNG 0.03639 8.2e-14 - - - - -
## DIESEL 1.00000 0.00032 0.00199 - - - -
## E85 1.00000 0.01168 4.0e-05 1.00000 - - -
## GASOLINE 1.00000 1.2e-05 0.02940 1.00000 1.00000 - -
## LNG 1.00000 3.4e-08 0.84443 1.00000 0.16216 1.00000 -
## PROPANE 1.5e-09 1.00000 < 2e-16 1.2e-07 1.2e-05 2.1e-09 2.4e-12
##
## P value adjustment method: bonferroni
#Interpretation:
#B20 vs B99/B100: p-value (0.00), which is less than alpha (0.05)
#B20 vs CNG: p-value (0.04), which is less than alpha (0.05)
#B20 vs DIESEL: p-value (1.00), which is greater than alpha (0.05)
#B99/B100 vs CNG: p-value ( 0.00), which is less than alpha (0.05)
#DIESEL vs E85: p-value (1.00), which is greater than alpha (0.05)
#There are significant differences in the prices of certain fuel types. Specifically, there is a statistically significant difference between B20 and B99/B100, between B20 and CNG, and between B99/B100 vs CNG. However, no significant difference was found between B20 and DIESEL or between DIESEL and E85.
#Perform Levene’s test for homogeneity of variance
levene_result <- leveneTest(Price_in_USD ~ Fuel_types, data = pl_data)
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
levene_result
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 7 1.6466 0.1243
## 200
#interpretation: p_value(0.12) > alpha(0.05), we fail to reject H0, which indicates that variances are equal across fuel types
#compute the correlation matriz
cor_matrix <- cor(df_clean)
cor_matrix
## GASOLINE E85 CNG LNG PROPANE DIESEL B20
## GASOLINE 1.0000000 0.9881192 0.7286583 0.6140873 0.8753738 0.9526024 0.9480207
## E85 0.9881192 1.0000000 0.6997831 0.5694837 0.8786178 0.9384997 0.9302512
## CNG 0.7286583 0.6997831 1.0000000 0.9494823 0.9026420 0.8043824 0.8378527
## LNG 0.6140873 0.5694837 0.9494823 1.0000000 0.8088951 0.7041987 0.7426770
## PROPANE 0.8753738 0.8786178 0.9026420 0.8088951 1.0000000 0.9153619 0.9235126
## DIESEL 0.9526024 0.9384997 0.8043824 0.7041987 0.9153619 1.0000000 0.9961120
## B20 0.9480207 0.9302512 0.8378527 0.7426770 0.9235126 0.9961120 1.0000000
## B99/B100 0.8916978 0.8762823 0.9035662 0.8205770 0.9373394 0.9668667 0.9751682
## B99/B100
## GASOLINE 0.8916978
## E85 0.8762823
## CNG 0.9035662
## LNG 0.8205770
## PROPANE 0.9373394
## DIESEL 0.9668667
## B20 0.9751682
## B99/B100 1.0000000
#correlation analysis: The correlation values are relatively high across fuel types, indicating that prices for different types of fuel are not fully independent. Which suggests that fuel prices are influenced by similar external factors, leading to correlated price changes across types of fuel.