EDA of Eli Lilly And Co
Basic Time Series Plot
Show the code
# candlestick plot
<- as.data.frame(LLY)
LLY_df $Dates <- as.Date(rownames(LLY_df))
LLY_df
<- LLY_df %>% plot_ly(x = ~Dates, type="candlestick",
fig_LLY open = ~LLY.Open, close = ~LLY.Close,
high = ~LLY.High, low = ~LLY.Low)
<- fig_LLY %>%
fig_LLY layout(title = "Basic Candlestick Chart for Eli Lilly and Company")
fig_LLY
Lag plot
Show the code
<- ts(stock_df$LLY, start = c(2010,1),end = c(2023,1),
LLY_ts frequency = 251)
ts_lags(LLY_ts)
Decomposed times series
Show the code
<- decompose(LLY_ts,'multiplicative')
decompose_LLY autoplot(decompose_LLY)
Autocorrelation in Time Series
Show the code
<- ggAcf(LLY_ts,100)+ggtitle("ACF Plot for LLY")
LLY_acf <- ggPacf(LLY_ts)+ggtitle("PACF Plot for LLY")
LLY_pacf
grid.arrange(LLY_acf, LLY_pacf,nrow=2)
Augmented Dickey-Fuller Test
Show the code
::adf.test(LLY_ts) tseries
Warning in tseries::adf.test(LLY_ts): p-value greater than printed p-value
Augmented Dickey-Fuller Test
data: LLY_ts
Dickey-Fuller = 0.80469, Lag order = 14, p-value = 0.99
alternative hypothesis: stationary
Detrending
Show the code
= lm(LLY_ts~time(LLY_ts), na.action=NULL)
fit
= LLY_ts
y=time(LLY_ts)
x<-data.frame(x,y)
DD<- ggplot(DD, aes(x, y)) +
ggp geom_line()
<- ggp +
ggp stat_smooth(method = "lm",
formula = y ~ x,
geom = "smooth") +ggtitle("LLY Stock Price")+ylab("Price")
<-autoplot(resid(fit), main="detrended")
plot1<-autoplot(diff(LLY_ts), main="first difference")
plot2
grid.arrange(ggp, plot1, plot2,nrow=3)
Don't know how to automatically pick scale for object of type <ts>. Defaulting
to continuous.
Don't know how to automatically pick scale for object of type <ts>. Defaulting
to continuous.
Moving Average Smoothing
Smoothing methods are a family of forecasting methods that average values over multiple periods in order to reduce the noise and uncover patterns in the data. It is useful as a data preparation technique as it can reduce the random variation in the observations and better expose the structure of the underlying causal processes. We call this an m-MA, meaning a moving average of order m.
Show the code
<- autoplot(LLY_ts, series="Data") +
MA_7 autolayer(ma(LLY_ts,7), series="7-MA") +
xlab("Year") + ylab("Adjusted Closing Price") +
ggtitle("LLY Stock Price Trend in (7-days Moving Average)") +
scale_colour_manual(values=c("LLY_ts"="grey50","7-MA"="red"),
breaks=c("LLY_ts","7-MA"))
<- autoplot(LLY_ts, series="Data") +
MA_30 autolayer(ma(LLY_ts,30), series="30-MA") +
xlab("Year") + ylab("Adjusted Closing Price") +
ggtitle("LLY Stock Price Trend in (30-days Moving Average)") +
scale_colour_manual(values=c("LLY_ts"="grey50","30-MA"="red"),
breaks=c("LLY_ts","30-MA"))
<- autoplot(LLY_ts, series="Data") +
MA_251 autolayer(ma(LLY_ts,251), series="251-MA") +
xlab("Year") + ylab("Adjusted Closing Price") +
ggtitle("LLY Stock Price Trend in (251-days Moving Average)") +
scale_colour_manual(values=c("LLY_ts"="grey50","251-MA"="red"),
breaks=c("LLY_ts","251-MA"))
grid.arrange(MA_7, MA_30, MA_251, ncol=1)
The graph above shows the moving average of 7 days, 30 days and 251 days. 251 days was choose because there are around 251 days of stock price data per year. According to the plots, it can be observed that When MA is very large(MA=251), some parts of smoothing line(red) do not fit the real stock price line. While When MA is small(MA=7), the smoothing line(red) fits the real price line. MA-30 greatly fits the real price line. Therefore, MA-30 might be a good parameter for smoothing.