Only ratio analysis is on the final – we’ll cover the others briefly.
That is a reflection of a strong quarter: Nike reported earnings of 68 cents a share, beating analysts’ estimates by 15 cents, and grew revenue by 7%.
The plans emerged as the Shenzhen-based company said its fourth-quarter revenue grew 51% year over year to 66.4 billion yuan ($10.2 billion), boosted by strong growth in mobile payments, digital content subscriptions and advertising on its flagship mobile social apps, WeChat and QQ.
Fourteen of the last 15 packaged food makers to [report] earnings posted lower-than-expected gross margins, said J.P. Morgan analyst Ken Goldman.
The company is forecasting an 8% global profit margin by about 2022, a number that would put it closer to better-performing peers, including GM. Ford’s 5% operating margin last year was disappointing…
We can compare accross companies or years
All examples use the following data
\[ \frac{COGS}{\frac{1}{2}\left(Inventory_T + Inventory_{T-1}\right)} \]
Microsoft’s 2017 inv. turnover: \(\frac{34,261}{\frac{1}{2}\left(2,181 + 2,251\right)} = 15.46\)
Microsoft’s 2017 inv. period: \(\frac{365}{15.46}=23.6\ days\)
\[ \frac{Revenue}{\frac{1}{2}\left(A/R_T + A/R_{T-1}\right)} \]
Microsoft’s 2017 A/R turnover: \(\frac{89,950}{\frac{1}{2}\left(19,792 + 18,277\right)} = 4.73\)
Microsoft’s 2017 A/R period: \(\frac{365}{4.73}=77.2\ days\)
\[ \frac{COGS}{\frac{1}{2}\left(A/P_T + A/P_{T-1}\right)} \]
Microsoft’s 2017 A/P turnover: \(\frac{34,261}{\frac{1}{2}\left(7,390 + 6,898\right)} = 4.80\)
Microsoft’s 2017 A/P period: \(\frac{365}{4.80}=76.1\ days\)
\[ \begin{equation*} \frac{365}{Inventory\ turnover} + \frac{365}{A/R\ turnover} - \frac{365}{A/P\ turnover}\\ \Updownarrow\\ \scriptstyle Receivable\ collection\ period + Inventory\ resident\ period - Payable\ outstanding\ period \end{equation*} \]
Microsoft’s 2017 cash conversion cycle: \(23.6 + 77.2 - 76.1 = 24.7\ days\)
\[ \text{Asset turnover} = \frac{Net~revenue}{\frac{1}{2}\left(Assets_T + Assets_{T-1}\right)} \]
Microsoft’s 2017 asset turnover: \(\frac{89,950}{\frac{1}{2}\left(241,086+193,468)\right)}=41.4\%\)
\[ \frac{Current\ assets}{Current\ liabilities} \]
Microsoft’s 2017 current ratio: \(\frac{159,851}{64,527}=2.48\)
\[ \frac{Cash + Short\ term\ investments + A/R}{Current\ liabilities} \]
Microsoft’s 2017 quick ratio: \(\frac{7,663 + 125,318 + 19,792}{64,527}=2.37\)
\[ \frac{Total\ liabilities}{Total\ assets} \]
Microsoft’s 2017 debt ratio: \(\frac{168,692}{241,086}=70.0\%\)
\[ \frac{Income\ from\ operations}{Interest\ expense} \]
Microsoft’s 2017 times-interest-earned ratio: \(\frac{22,326}{2,222}=10.05\)
Calculate the following ratios for Microsoft in 2016
Extra info: Microsoft’s A/P in 2015 was $6,591M
\[ \frac{Profit}{Revenue} \]
Microsoft’s 2017 gross profit margin: \(\frac{55,689}{89,950}=61.9\%\)
Microsoft’s 2017 operating profit margin: \(\frac{22,326}{89,950}=24.8\%\)
Microsoft’s 2017 net profit margin: \(\frac{21,204}{89,950}=23.6\%\)
\[ \frac{Net\ income}{\frac{1}{2}\left(Assets_T + Assets_{T-1}\right)} \]
Microsoft’s 2017 ROA: \(\frac{21,204}{\frac{1}{2}\left(241,086+193,468)\right)}=9.76\%\)
\[ \frac{Net\ income}{\frac{1}{2}\left(Equity_T + Equity_{T-1}\right)} \]
Microsoft’s 2017 ROE: \(\frac{21,204}{\frac{1}{2}\left(72,394+71,997)\right)}=29.4\%\)
Calculate the following ratios for Microsoft in 2016
Extra info: Microsoft’s 2015 total assets was $176,223M and Microsoft’s 2015 total equity was $80,083M
\[ \frac{Net\ income - Dividends\ on\ pref.\ shares}{\frac{1}{2}\left(\#Shares_T+\#Shares_{T-1}\right)} \]
Microsoft’s 2017 EPS: \(\frac{21,204 - 0}{\frac{1}{2}\left(7,708+7,808)\right)}=\$2.73/share\)
\[ \frac{Stock\ price}{EPS} \]
Microsoft’s 2017 P/E ratio: \(\frac{68.93}{2.73}=25.2\)
Calculate the following ratios for Microsoft in 2016
Extra info: Microsoft’s 2015 outstanding shares was 8,027M
\[ {\scriptsize \begin{align*} \text{Inventory turnover} &= \frac{COGS}{\frac{1}{2}\left(Inventory_T + Inventory_{T-1}\right)} \\ \text{A/R turnover} &= \frac{Revenue}{\frac{1}{2}\left(A/R_T + A/R_{T-1}\right)} \\ \text{A/P turnover} &= \frac{COGS}{\frac{1}{2}\left(A/P_T + A/P_{T-1}\right)}\\ \text{Cash conversion cyle} &= \frac{365}{Inv.\ turnover} + \frac{365}{A/R\ turnover} - \frac{365}{A/P\ turnover}\\ \text{Asset turnover} &= \frac{Net~revenue}{\frac{1}{2}\left(Assets_T + Assets_{T-1}\right)} \\ \text{Current ratio} &= \frac{Current\ assets}{Current\ liabilities} \\ \text{Quick ratio} &= \frac{Cash + Short\ term\ investments + A/R}{Current\ liabilities} \\ \text{Debt ratio} &= \frac{Total\ liabilities}{Total\ assets} \\ \text{Times-interest-earned} &= \frac{Income\ from\ operations}{Interest\ expense} \end{align*}} \]
\[ \scriptsize \begin{align*} \text{Gross (profit) margin} &= \frac{Gross\ profit}{Revenue} \\ \text{Operating profit margin} &= \frac{Operating\ profit}{Revenue} \\ \text{Net profit margin} &= \frac{Net\ income}{Revenue} \\ \text{Return on assets (ROA)} &= \frac{Net\ income}{\frac{1}{2}\left(Assets_T + Assets_{T-1}\right)} \\ \text{Return on equity (ROE)} &= \frac{Net\ income}{\frac{1}{2}\left(Equity_T + Equity_{T-1}\right)} \end{align*} \\ \]
\[ \scriptsize \begin{align*} \text{Earnings per share (EPS)} &= \frac{Net\ income - Dividends\ on\ pref.\ shares}{\frac{1}{2}\left(\#Shares_T+\#Shares_{T-1}\right)} \\ \text{Price/earnings ratio (P/E)} &= \frac{Stock\ price}{EPS} \end{align*} \]
This is a quick preview of a module called “Forecasting and Forensic Analytics,” part of the Analytics major in SOA
Predicting ROA for tech companies using prior year data
##
## Call:
## lm(formula = ROA ~ ROA_lag + Revenue_lag + Debt_lag + factor(gind),
## data = df_tech)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.4421 -0.0238 0.0107 0.0467 0.4378
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.004095 0.031227 0.131 0.89569
## ROA_lag 0.469025 0.061576 7.617 6.91e-14 ***
## Revenue_lag 0.030639 0.015260 2.008 0.04498 *
## Debt_lag 0.121253 0.040732 2.977 0.00299 **
## factor(gind)451020 -0.092444 0.035630 -2.595 0.00964 **
## factor(gind)451030 -0.035024 0.033293 -1.052 0.29310
## factor(gind)452010 -0.138055 0.034286 -4.027 6.16e-05 ***
## factor(gind)452020 -0.077091 0.032478 -2.374 0.01784 *
## factor(gind)452030 -0.090377 0.034553 -2.616 0.00906 **
## factor(gind)453010 -0.014934 0.032090 -0.465 0.64178
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1827 on 851 degrees of freedom
## (134 observations deleted due to missingness)
## Multiple R-squared: 0.1201, Adjusted R-squared: 0.1108
## F-statistic: 12.91 on 9 and 851 DF, p-value: < 2.2e-16
library(readr)
library(dplyr)
df <-read.csv("/media/Data/Data/Compustat/Compustat_199301-201703.csv")
df <- data.frame(df)
df_tech <- subset(df,gsector == 45 & at > 10000,
select=c("gvkey","datadate","at","ni","lt","revt","gind"))
df_tech <- arrange(df_tech, gvkey, datadate)
df_tech$ROA <- df_tech$ni / df_tech$at
df_tech$Revenue <- df_tech$revt / df_tech$at
df_tech$Debt <- df_tech$lt / df_tech$at
x <- c("ROA", "Revenue","Debt") # Columns to lag
df_tech <- df_tech %>%
group_by(gvkey) %>%
mutate_at(.cols=x, .funs=funs(lag = dplyr::lag(., n=1, default=NA)))
is.na(df_tech) <- sapply(df_tech, is.infinite)
fit <- lm(ROA ~ ROA_lag + Revenue_lag + Debt_lag + factor(gind), data=df_tech)
save(fit, file = "Data/fit.rda")
summary(fit)
Predict out Microsoft’s 2018 ROA
df_ms <- subset(df,gvkey==12141, select=c("gvkey","datadate","at", "ni","lt",
"revt","gind"))
df_ms2 <- data.frame(gvkey=12141, datadate=20170630, at=241086,ni=21204,
lt=168692,revt=89950,gind=451030)
df_ms3 <- data.frame(gvkey=12141, datadate=20180630, at=NA,ni=NA,
lt=NA,revt=NA,gind=451030)
df_ms <- rbind(df_ms, df_ms2, df_ms3)
df_ms$ROA <- df_ms$ni / df_ms$at
df_ms$Revenue <- df_ms$revt / df_ms$at
df_ms$Debt <- df_ms$lt / df_ms$at
x <- c("ROA", "Revenue","Debt") # Columns to lag
df_ms <- df_ms %>%
group_by(gvkey) %>%
mutate_at(.cols=x, .funs=funs(lag = dplyr::lag(., n=1, default=NA)))
df_ms$ROA_predicted <- predict(fit, df_ms)
df_ms$year = floor(df_ms$datadate/10000)
save(df_ms, file="Data/df_ms.rda")
suppressPackageStartupMessages(library(plotly))
m <- list(l = 60, r = 50, b = 60, t = 100, pad = 4)
plot_ly(df_ms,x=~year,y=~ROA, name='Actual ROA', type='scatter',
mode='lines', width = 800, height = 500) %>%
add_trace(y=~ROA_predicted, name='Predicted ROA') %>%
layout(autosize = F, margin = m,
xaxis=list(title="Year"), yaxis=list(title="ROA"))