Introduction

The New York Independent System Operator is a non-profit that manages New York State’s electricity grid and administers electricity markets through auctions. This data from NYISO shows auction results for a six-month period between November 2015 and April 2016.

Load packages.

library(knitr)
## Warning: package 'knitr' was built under R version 3.2.4
library(stringr)
## Warning: package 'stringr' was built under R version 3.2.4
library(tidyr)
## Warning: package 'tidyr' was built under R version 3.2.4
library(dplyr)
## Warning: package 'dplyr' was built under R version 3.2.4
## 
## 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
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.2.4
library(RCurl)
## Loading required package: bitops
## 
## Attaching package: 'RCurl'
## The following object is masked from 'package:tidyr':
## 
##     complete

Import CSV, column header = True.

Season: Winter 2015-2016

auction<-data.frame(read.csv(file="auction.csv", header=T, stringsAsFactors = FALSE))
kable(auction)
Bidder Result Nov Dec Jan Feb Mar Apr
G-J Locality Awarded (MW) 434.4 192.5 127.1 117.5 126 112
G-J Locality Price ($/kW - Month) $3.78 $3.75 $3.80 $3.75 $3.74 $3.70
LI Awarded (MW) 34.2 27.2 38.2 38.2 23.2 19.2
LI Price ($/kW - Month) $1.55 $1.55 $1.85 $1.85 $1.55 $1.55
NYC Awarded (MW) 996.1 417.6 350.3 298.9 295.7 260.6
NYC Price ($/kW - Month) $6.65 $6.42 $6.32 $6.32 $6.22 $6.22
NYCA Awarded (MW) 2004.5 497.5 557.7 438.4 485.5 337.9
NYCA Price ($/kW - Month) $0.66 $1.48 $1.72 $1.75 $0.75 $0.50
HQ Awarded (MW) 400 0 0 0 0 0
HQ Price ($/kW - Month) $0.66 $1.48 $1.72 $1.75 $0.75 $0.50
IESO Awarded (MW) 0 0 0 0 0 0
IESO Price ($/kW - Month) $0.00 $0.00 $0.00 $0.00 $0.00 $0.00
NE Awarded (MW) 0 0 0 0 0 0
NE Price ($/kW - Month) $0.00 $0.00 $0.00 $0.00 $0.00 $0.00
PJM Awarded (MW) 0 0 0 0 0 0
PJM Price ($/kW - Month) $0.00 $0.00 $0.00 $0.00 $0.00 $0.00
#str(auction) #test

Remove dollar sign, convert to numeric.

auction<-as.data.frame(lapply(auction, function(y) gsub("\\$", "", y)))
auction[, c(3:7)] <- sapply(auction[, c(3:7)], as.character)
auction[, c(3:7)] <- sapply(auction[, c(3:7)], as.numeric)
kable(auction)
Bidder Result Nov Dec Jan Feb Mar Apr
G-J Locality Awarded (MW) 434.40 192.50 127.10 117.50 126.00 112
G-J Locality Price (/kW - Month) 3.78 3.75 3.80 3.75 3.74 3.70
LI Awarded (MW) 34.20 27.20 38.20 38.20 23.20 19.2
LI Price (/kW - Month) 1.55 1.55 1.85 1.85 1.55 1.55
NYC Awarded (MW) 996.10 417.60 350.30 298.90 295.70 260.6
NYC Price (/kW - Month) 6.65 6.42 6.32 6.32 6.22 6.22
NYCA Awarded (MW) 2004.50 497.50 557.70 438.40 485.50 337.9
NYCA Price (/kW - Month) 0.66 1.48 1.72 1.75 0.75 0.50
HQ Awarded (MW) 400.00 0.00 0.00 0.00 0.00 0
HQ Price (/kW - Month) 0.66 1.48 1.72 1.75 0.75 0.50
IESO Awarded (MW) 0.00 0.00 0.00 0.00 0.00 0
IESO Price (/kW - Month) 0.00 0.00 0.00 0.00 0.00 0.00
NE Awarded (MW) 0.00 0.00 0.00 0.00 0.00 0
NE Price (/kW - Month) 0.00 0.00 0.00 0.00 0.00 0.00
PJM Awarded (MW) 0.00 0.00 0.00 0.00 0.00 0
PJM Price (/kW - Month) 0.00 0.00 0.00 0.00 0.00 0.00
str(auction)
## 'data.frame':    16 obs. of  8 variables:
##  $ Bidder: Factor w/ 8 levels "G-J Locality",..: 1 1 4 4 6 6 7 7 2 2 ...
##  $ Result: Factor w/ 2 levels "Awarded (MW)",..: 1 2 1 2 1 2 1 2 1 2 ...
##  $ Nov   : num  434.4 3.78 34.2 1.55 996.1 ...
##  $ Dec   : num  192.5 3.75 27.2 1.55 417.6 ...
##  $ Jan   : num  127.1 3.8 38.2 1.85 350.3 ...
##  $ Feb   : num  117.5 3.75 38.2 1.85 298.9 ...
##  $ Mar   : num  126 3.74 23.2 1.55 295.7 ...
##  $ Apr   : Factor w/ 10 levels "0","0.00 ","0.50 ",..: 5 8 6 4 7 10 9 3 1 3 ...

Subset of just non-zero rows.

auction <- subset(auction[c(1:10),])
kable(auction)
Bidder Result Nov Dec Jan Feb Mar Apr
G-J Locality Awarded (MW) 434.40 192.50 127.10 117.50 126.00 112
G-J Locality Price (/kW - Month) 3.78 3.75 3.80 3.75 3.74 3.70
LI Awarded (MW) 34.20 27.20 38.20 38.20 23.20 19.2
LI Price (/kW - Month) 1.55 1.55 1.85 1.85 1.55 1.55
NYC Awarded (MW) 996.10 417.60 350.30 298.90 295.70 260.6
NYC Price (/kW - Month) 6.65 6.42 6.32 6.32 6.22 6.22
NYCA Awarded (MW) 2004.50 497.50 557.70 438.40 485.50 337.9
NYCA Price (/kW - Month) 0.66 1.48 1.72 1.75 0.75 0.50
HQ Awarded (MW) 400.00 0.00 0.00 0.00 0.00 0
HQ Price (/kW - Month) 0.66 1.48 1.72 1.75 0.75 0.50

Rename columns.

colnames(auction)[c(3:8)] <- c("2015-11","2015-12","2016-01","2016-02","2016-03","2016-04")
kable(auction)
Bidder Result 2015-11 2015-12 2016-01 2016-02 2016-03 2016-04
G-J Locality Awarded (MW) 434.40 192.50 127.10 117.50 126.00 112
G-J Locality Price (/kW - Month) 3.78 3.75 3.80 3.75 3.74 3.70
LI Awarded (MW) 34.20 27.20 38.20 38.20 23.20 19.2
LI Price (/kW - Month) 1.55 1.55 1.85 1.85 1.55 1.55
NYC Awarded (MW) 996.10 417.60 350.30 298.90 295.70 260.6
NYC Price (/kW - Month) 6.65 6.42 6.32 6.32 6.22 6.22
NYCA Awarded (MW) 2004.50 497.50 557.70 438.40 485.50 337.9
NYCA Price (/kW - Month) 0.66 1.48 1.72 1.75 0.75 0.50
HQ Awarded (MW) 400.00 0.00 0.00 0.00 0.00 0
HQ Price (/kW - Month) 0.66 1.48 1.72 1.75 0.75 0.50

Reshape data to create month rows.

auction<-gather(auction,"Result","Amount",3:8)
## Warning: attributes are not identical across measure variables; they will
## be dropped
colnames(auction)[c(3)] <- c("Month")
kable(auction)
Bidder Result Month Amount
G-J Locality Awarded (MW) 2015-11 434.4
G-J Locality Price (/kW - Month) 2015-11 3.78
LI Awarded (MW) 2015-11 34.2
LI Price (/kW - Month) 2015-11 1.55
NYC Awarded (MW) 2015-11 996.1
NYC Price (/kW - Month) 2015-11 6.65
NYCA Awarded (MW) 2015-11 2004.5
NYCA Price (/kW - Month) 2015-11 0.66
HQ Awarded (MW) 2015-11 400
HQ Price (/kW - Month) 2015-11 0.66
G-J Locality Awarded (MW) 2015-12 192.5
G-J Locality Price (/kW - Month) 2015-12 3.75
LI Awarded (MW) 2015-12 27.2
LI Price (/kW - Month) 2015-12 1.55
NYC Awarded (MW) 2015-12 417.6
NYC Price (/kW - Month) 2015-12 6.42
NYCA Awarded (MW) 2015-12 497.5
NYCA Price (/kW - Month) 2015-12 1.48
HQ Awarded (MW) 2015-12 0
HQ Price (/kW - Month) 2015-12 1.48
G-J Locality Awarded (MW) 2016-01 127.1
G-J Locality Price (/kW - Month) 2016-01 3.8
LI Awarded (MW) 2016-01 38.2
LI Price (/kW - Month) 2016-01 1.85
NYC Awarded (MW) 2016-01 350.3
NYC Price (/kW - Month) 2016-01 6.32
NYCA Awarded (MW) 2016-01 557.7
NYCA Price (/kW - Month) 2016-01 1.72
HQ Awarded (MW) 2016-01 0
HQ Price (/kW - Month) 2016-01 1.72
G-J Locality Awarded (MW) 2016-02 117.5
G-J Locality Price (/kW - Month) 2016-02 3.75
LI Awarded (MW) 2016-02 38.2
LI Price (/kW - Month) 2016-02 1.85
NYC Awarded (MW) 2016-02 298.9
NYC Price (/kW - Month) 2016-02 6.32
NYCA Awarded (MW) 2016-02 438.4
NYCA Price (/kW - Month) 2016-02 1.75
HQ Awarded (MW) 2016-02 0
HQ Price (/kW - Month) 2016-02 1.75
G-J Locality Awarded (MW) 2016-03 126
G-J Locality Price (/kW - Month) 2016-03 3.74
LI Awarded (MW) 2016-03 23.2
LI Price (/kW - Month) 2016-03 1.55
NYC Awarded (MW) 2016-03 295.7
NYC Price (/kW - Month) 2016-03 6.22
NYCA Awarded (MW) 2016-03 485.5
NYCA Price (/kW - Month) 2016-03 0.75
HQ Awarded (MW) 2016-03 0
HQ Price (/kW - Month) 2016-03 0.75
G-J Locality Awarded (MW) 2016-04 112
G-J Locality Price (/kW - Month) 2016-04 3.70
LI Awarded (MW) 2016-04 19.2
LI Price (/kW - Month) 2016-04 1.55
NYC Awarded (MW) 2016-04 260.6
NYC Price (/kW - Month) 2016-04 6.22
NYCA Awarded (MW) 2016-04 337.9
NYCA Price (/kW - Month) 2016-04 0.50
HQ Awarded (MW) 2016-04 0
HQ Price (/kW - Month) 2016-04 0.50

Reshape data to create result columns.

auction<-spread(auction,Result,Amount)
colnames(auction)[c(3,4)] <- c("Awarded","Price")
str(auction)
## 'data.frame':    30 obs. of  4 variables:
##  $ Bidder : Factor w/ 8 levels "G-J Locality",..: 1 1 1 1 1 1 2 2 2 2 ...
##  $ Month  : chr  "2015-11" "2015-12" "2016-01" "2016-02" ...
##  $ Awarded: chr  "434.4" "192.5" "127.1" "117.5" ...
##  $ Price  : chr  "3.78" "3.75" "3.8" "3.75" ...
auction[, c(3:4)] <- sapply(auction[, c(3:4)], as.numeric)
str(auction)
## 'data.frame':    30 obs. of  4 variables:
##  $ Bidder : Factor w/ 8 levels "G-J Locality",..: 1 1 1 1 1 1 2 2 2 2 ...
##  $ Month  : chr  "2015-11" "2015-12" "2016-01" "2016-02" ...
##  $ Awarded: num  434 192 127 118 126 ...
##  $ Price  : num  3.78 3.75 3.8 3.75 3.74 3.7 0.66 1.48 1.72 1.75 ...
kable(auction)
Bidder Month Awarded Price
G-J Locality 2015-11 434.4 3.78
G-J Locality 2015-12 192.5 3.75
G-J Locality 2016-01 127.1 3.80
G-J Locality 2016-02 117.5 3.75
G-J Locality 2016-03 126.0 3.74
G-J Locality 2016-04 112.0 3.70
HQ 2015-11 400.0 0.66
HQ 2015-12 0.0 1.48
HQ 2016-01 0.0 1.72
HQ 2016-02 0.0 1.75
HQ 2016-03 0.0 0.75
HQ 2016-04 0.0 0.50
LI 2015-11 34.2 1.55
LI 2015-12 27.2 1.55
LI 2016-01 38.2 1.85
LI 2016-02 38.2 1.85
LI 2016-03 23.2 1.55
LI 2016-04 19.2 1.55
NYC 2015-11 996.1 6.65
NYC 2015-12 417.6 6.42
NYC 2016-01 350.3 6.32
NYC 2016-02 298.9 6.32
NYC 2016-03 295.7 6.22
NYC 2016-04 260.6 6.22
NYCA 2015-11 2004.5 0.66
NYCA 2015-12 497.5 1.48
NYCA 2016-01 557.7 1.72
NYCA 2016-02 438.4 1.75
NYCA 2016-03 485.5 0.75
NYCA 2016-04 337.9 0.50

Show plots.

ggplot(
  auction, aes(x = Month, y = Awarded, fill=Bidder)) + 
  geom_bar(stat="identity", position="dodge") + scale_fill_brewer()+
  ggtitle("Awarded Megawatts by Bidder")+ 
  
  theme(panel.grid.minor.x=element_blank(), panel.grid.major.x=element_blank(),axis.text=element_text(angle=0))+
  
  labs(x="Year and Month",y="Awarded Megawatts")

ggplot(
  auction, aes(x = Month, y = Price, fill=Bidder)) + 
  geom_bar(stat="identity", position="dodge") + scale_fill_brewer()+
  ggtitle("Price per KW by Bidder")+ 
  
  theme(panel.grid.minor.x=element_blank(), panel.grid.major.x=element_blank(),axis.text=element_text(angle=0))+
  
  labs(x="Year and Month",y="Price in $")

Conclusion

The New York Control Area (NYCA) had an outlier in November 2015 with a significantly higher amount of awarded megawatts. The NYCA consistently received the largest amount of awarded megawatts. Hyrdo-Quebec (HQ) had few to no awarded megawatts between December 2015 and April 2016. Price per KW was more stable for each locality, with NYC registering prices double or triple the other zone bidders.