基于R语言股票市场收益的统计可视化分析

简介: 基于R语言股票市场收益的统计可视化分析

原文链接:http://tecdat.cn/?p=16453 


金融市场上最重要的任务之一就是分析各种投资的历史收益。要执行此分析,我们需要资产的历史数据。数据提供者很多,有些是免费的,大多数是付费的。在本文中,我们将使用Yahoo金融网站上的数据。


在这篇文章中,我们将:

  1. 下载收盘价
  2. 计算收益率
  3. 计算收益的均值和标准差


让我们先加载库。

library(tidyquant)library(timetk)

我们将获得Netflix价格的收盘价。

netflix <- tq_get("NFLX",                    
                  from = '2009-01-01',
                  to = "2018-03-01",
                  get = "stock.prices")

接下来,我们将绘制Netflix的调整后收盘价。

netflix %>%
  ggplot(aes(x = date, y = adjusted)) +
  geom_line() +
  ggtitle("Netflix since 2009") +
  labs(x = "Date", "Price") +
  scale\_x\_date(date\_breaks = "years", date\_labels = "%Y") +
  labs(x = "Date", y = "Adjusted Price") +
  theme_bw()

计算单个股票的每日和每月收益率


一旦我们从Yahoo Finance下载了收盘价,下一步便是计算收益。我们将再次使用tidyquant包进行计算。我们已经在上面下载了Netflix的价格数据,如果您还没有下载,请参见上面的部分。

# 计算每日收益netflix\_daily\_returns <- netflix %>%
  tq_transmute(select = adjusted,          这指定要选择的列
               mutate_fun = periodReturn,   # 这指定如何处理该列               period = "daily",      # 此参数计算每日收益               col\_rename = "nflx\_returns") # 重命名列#计算每月收益netflix\_monthly\_returns <- netflix %>%
  tq_transmute(select = adjusted,
               mutate_fun = periodReturn,
               period = "monthly",      # 此参数计算每月收益               col\_rename = "nflx\_returns")

绘制Netflix的每日和每月收益图表

# 我们将使用折线图获取每日收益
 
  ggplot(aes(x = date, y = nflx_returns)) +
  geom_line() +
  theme_classic() +

查看Netflix的每日收益图表后,我们可以得出结论,收益波动很大,并且股票在任何一天都可以波动+/- 5%。为了了解收益率的分布,我们可以绘制直方图。

netflix\_daily\_returns %>%
  ggplot(aes(x = nflx_returns)) +
  geom_histogram(binwidth = 0.015) +
  theme_classic() +

接下来,我们可以绘制自2009年以来Netflix的月度收益率。我们使用条形图来绘制数据。

# 绘制Netflix的月度收益图表。 使用条形图
  ggplot(aes(x = date, y = nflx_returns)) +
  geom_bar(stat = "identity") +
  theme_classic() +

计算Netflix股票的累计收益


绘制每日和每月收益对了解投资的每日和每月波动很有用。要计算投资的增长,换句话说,计算投资的总收益,我们需要计算该投资的累积收益。要计算累积收益,我们将使用  cumprod()  函数。

mutate(cr = cumprod(1 + nflx_returns)) %>%      # 使用cumprod函数
 
  ggplot(aes(x = date, y = cumulative_returns)) +
  geom_line() +
  theme_classic() +


点击标题查阅往期内容


R语言ARMA GARCH COPULA模型拟合股票收益率时间序列和模拟可视化


01

02

03

04


该图表显示了自2009年以来Netflix的累计收益。有了事后分析的力量, 自2009年以来,_可以_用1美元的投资赚取85美元。但据我们所知,说起来容易做起来难。在10年左右的时间里,在Qwickster惨败期间投资损失了其价值的50%。在这段时期内,很少有投资者能够坚持投资。

ggplot(aes(x = date, y = cumulative_returns)) +
  geom_line() +
  theme_classic() +

我们可以直观地看到,月收益表比日图表要平滑得多。


多只股票


下载多只股票的股票市场数据。

#将我们的股票代码设置为变量
tickers <- c("FB", "AMZN", "AAPL", "NFLX", "GOOG") 
# 下载股价数据
multpl\_stocks <- tq\_get(tickers,

绘制多只股票的股价图


接下来,我们将绘制多只股票的价格图表

multpl_stocks %>%  ggplot(aes(x = date, y = adjusted,

这不是我们预期的结果。由于这些股票具有巨大的价格差异(FB低于165,AMZN高于1950),因此它们的规模不同。我们可以通过按各自的y比例绘制股票来克服此问题。

facet\_wrap(~symbol, scales = "free\_y") +  # facet_wrap用于制作不同的页面
  theme_classic() +


计算多只股票的收益


计算多只股票的收益与单只股票一样容易。这里只需要传递一个附加的参数。我们需要使用参数  group_by(symbol)  来计算单个股票的收益。

#计算多只股票的每日收益                          
  tq_transmute(select = adjusted,
               mutate_fun = periodReturn,
               period = 'daily',
               col_rename = 'returns')#计算多只股票的月收益                            
  tq_transmute(select = adjusted,
               mutate_fun = periodReturn,
               period = 'monthly',
               col_rename = 'returns')

绘制多只股票的收益图表


一旦有了收益计算,就可以在图表上绘制收益。

multpl\_stock\_daily_returns %>%
  ggplot(aes(x = date, y = returns)) +
  geom_line() +
  geom_hline(yintercept = 0) +

multpl\_stock\_monthly_returns %>%
  ggplot(aes(x = date, y = return
  scale\_fill\_brewer(palette = "Set1",   # 我们会给他们不同的颜色,而不是黑色

在FAANG股票中,苹果的波动最小,而Facebook和Netflix的波动最大。对于他们从事的业务而言,这是显而易见的。Apple是一家稳定的公司,拥有稳定的现金流量。它的产品受到数百万人的喜爱和使用,他们对Apple拥有极大的忠诚度。Netflix和Facebook也是令人难以置信的业务,但它们处于高增长阶段,任何问题(收益或用户增长下降)都可能对股票产生重大影响。


计算多只股票的累计收益


通常,我们希望看到过去哪种投资产生了最佳效果。为此,我们可以计算累积结果。下面我们比较自2013年以来所有FAANG股票的投资结果。哪项是自2013年以来最好的投资?

multpl\_stock\_monthly_returns %>%
  mutate(returns e_returns = cr - 1) %>%
  ggplot(aes(x = date, y = cumulative_returns, color = symbol)) +
  geom_line() +
  labs(x = "Date"

毫不奇怪,Netflix自2013年以来获得了最高的收益。亚马逊和Facebook位居第二和第三。


统计数据


计算单个股票的均值,标准差


我们已经有了Netflix的每日和每月收益数据。现在我们将计算收益的每日和每月平均数和标准差。 为此,我们将使用  mean()  和  sd()函数。

# 计算平均值
 
  .\[\[1\]\] %>%  mean(na.rm = TRUE)
nflx\_monthly\_mean_ret <- netfl turns) %>%  .\[\[1\]\] %>%  mean(na.rm = TRUE)
# 计算标准差
nflx\_daily\_sd_ret <- netflirns) %>%  .\[\[1\]\] %>%  sd()
nflx\_monthly\_sd\_ret <- netflix\_rns) %>%  .\[\[1\]\] %>%  sd()
 nflx_stat
## # A tibble: 2 x 3##   period     mean     sd
##   <chr>     <dbl>  <dbl>
## 1 Daily   0.00240 0.0337## 2 Monthly 0.0535  0.176

我们可以看到Netflix的平均每日收益为0.2%,标准差为3.3%。它的月平均回报率是5.2%和17%标准差。该数据是自2009年以来的整个时期。如果我们要计算每年的均值和标准差,该怎么办。我们可以通过按年份对Netflix收益数据进行分组并执行计算来进行计算。

netflix  %>%
  summarise(Monthly\_Mean\_Returns = mean(nflx_returns),
            MOnthly\_Standard\_Deviation = sd(nflx_returns)
## # A tibble: 10 x 3##     year Monthly\_Mean\_Returns MOnthly\_Standard\_Deviation
##    <dbl>                <dbl>                      <dbl>
##  1  2009              0.0566                      0.0987##  2  2010              0.110                       0.142
##  3  2011             -0.0492                      0.209
##  4  2012              0.0562                      0.289
##  5  2013              0.137                       0.216
##  6  2014              0.00248                     0.140
##  7  2015              0.0827                      0.148
##  8  2016              0.0138                      0.126
##  9  2017              0.0401                      0.0815## 10  2018              0.243                       0.233

我们还可以绘制结果更好地理解。

netflix\_monthly\_returns %>%
  mutate(year = rns, Standard_Deviation, keyistic)) +
  geom_bar(stat = "identity", position = "dodge") +
  scale\_y\_continuous(b ) +
  theme_bw() +

我们可以看到,自2009年以来,每月收益和标准差波动很大。2011年,平均每月收益为-5%。


计算多只股票的均值,标准差


接下来,我们可以计算多只股票的均值和标准差。

group_by(symbol) %>%  summarise(mean = mean(returns),
            sd = sd(returns))
## # A tibble: 5 x 3##   symbol     mean     sd
##   <chr>     <dbl>  <dbl>
## 1 AAPL   0.00100  0.0153## 2 AMZN   0.00153  0.0183## 3 FB     0.00162  0.0202## 4 GOOG   0.000962 0.0141## 5 NFLX   0.00282  0.0300
group_by(symbol) %>%  summarise(mean = mean(returns),
            sd = sd(returns))
## # A tibble: 5 x 3##   symbol   mean     sd
##   <chr>   <dbl>  <dbl>
## 1 AAPL   0.0213 0.0725## 2 AMZN   0.0320 0.0800## 3 FB     0.0339 0.0900## 4 GOOG   0.0198 0.0568## 5 NFLX   0.0614 0.157

计算收益的年均值和标准差。

%>%  group_by(symbol, year) %>%  summarise(mean = mean(returns),
            sd = sd(returns))
## # A tibble: 30 x 4## # Groups:   symbol \[?\]
##    symbol  year      mean     sd
##    <chr>  <dbl>     <dbl>  <dbl>
##  1 AAPL    2013  0.0210   0.0954##  2 AAPL    2014  0.0373   0.0723##  3 AAPL    2015 -0.000736 0.0629##  4 AAPL    2016  0.0125   0.0752##  5 AAPL    2017  0.0352   0.0616##  6 AAPL    2018  0.0288   0.0557##  7 AMZN    2013  0.0391   0.0660##  8 AMZN    2014 -0.0184   0.0706##  9 AMZN    2015  0.0706   0.0931## 10 AMZN    2016  0.0114   0.0761## # ... with 20 more rows

我们还可以绘制此统计数据。

multpl\_stock\_monthly_returns %>%
  mutate(year = year(date)) %>%
  group_by(symbol, yea s = seq(-0.1,0.4,0.02),
                     labels = scales::percent) +
  scale\_x\_continuous(breaks = seq(2009,2018,1)) +
  labs(x = "Year", y = Stocks") +
  ggtitle

multpl\_stock\_monthly_returns %>%
  mutate(year = year(date)) %>% 
  ggplot(aes(x = year, y = sd, fill = symbol)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.7) +
  scale\_y\_continuous(breaks = seq(-0.1,0.4,0.02),
                     labels = scales::p 
  scale\_fill\_brewer(palette = "Set1",

计算多只股票的协方差和相关性


另一个重要的统计计算是股票的相关性和协方差。为了计算这些统计数据,我们需要修改数据。我们将其转换为xts对象。

协方差表

#计算协方差
  tk_xts(silent = TRUE) %>%
  cov()
##               AAPL        AMZN          FB         GOOG          NFLX
## AAPL  5.254736e-03 0.001488462 0.000699818 0.0007420307 -1.528193e-05## AMZN  1.488462e-03 0.006399439 0.001418561 0.0028531565  4.754894e-03## FB    6.998180e-04 0.001418561 0.008091594 0.0013566480  3.458228e-03## GOOG  7.420307e-04 0.002853157 0.001356648 0.0032287790  3.529245e-03## NFLX -1.528193e-05 0.004754894 0.003458228 0.0035292451  2.464202e-02

相关表

# 计算相关系数
 %>%
  tk_xts(silent = TRUE) %>%
  cor()
##              AAPL      AMZN        FB      GOOG         NFLX
## AAPL  1.000000000 0.2566795 0.1073230 0.1801471 -0.001342964## AMZN  0.256679539 1.0000000 0.1971334 0.6276759  0.378644485## FB    0.107322952 0.1971334 1.0000000 0.2654184  0.244905437## GOOG  0.180147089 0.6276759 0.2654184 1.0000000  0.395662114## NFLX -0.001342964 0.3786445 0.2449054 0.3956621  1.000000000

我们可以使用corrplot() 包来绘制相关矩阵图。

## corrplot 0.84 loaded
  cor() %>%  corrplot()

相关文章
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
3月前
|
数据可视化 数据挖掘 图形学
R语言基础可视化:使用ggplot2构建精美图形的探索
【8月更文挑战第29天】 `ggplot2`是R语言中一个非常强大的图形构建工具,它基于图形语法提供了一种灵活且直观的方式来创建各种统计图形。通过掌握`ggplot2`的基本用法和美化技巧,你可以轻松地将复杂的数据转化为直观易懂的图形,从而更好地理解和展示你的数据分析结果。希望本文能够为你探索`ggplot2`的世界提供一些帮助和启发。
|
3月前
|
数据可视化 数据挖掘 数据处理
R语言高级可视化技巧:使用Plotly与Shiny制作互动图表
【8月更文挑战第30天】通过使用`plotly`和`shiny`,我们可以轻松地创建高度互动的数据可视化图表。这不仅增强了图表的表现力,还提高了用户与数据的交互性,使得数据探索变得更加直观和高效。本文仅介绍了基本的使用方法,`plotly`和`shiny`还提供了更多高级功能和自定义选项,等待你去探索和发现。希望这篇文章能帮助你掌握使用`plotly`和`shiny`制作互动图表的技巧,并在你的数据分析和可视化工作中发挥更大的作用。
|
3月前
|
数据挖掘 数据处理
R语言统计基本概念:探索描述性统计与推断统计的奥秘
【8月更文挑战第30天】描述性统计与推断统计是R语言统计分析中的两大基石。描述性统计帮助我们直观地了解数据的分布特征和基本属性,而推断统计则允许我们基于样本数据对总体进行推断和预测。在数据分析的实际应用中,两者相辅相成,共同构成了数据分析的完整框架。掌握这两大概念及其在R语言中的实现方法,对于提升数据分析能力和决策效率具有重要意义。
|
8天前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
27 3
|
6月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
2月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
3月前
|
数据可视化
R语言可视化设计原则:打造吸引力十足的数据可视化
【8月更文挑战第30天】R语言可视化设计是一个综合性的过程,需要综合运用多个设计原则来创作出吸引力十足的作品。通过明确目标、选择合适的图表类型、合理运用色彩与视觉层次、明确标注与引导视线以及引入互动性与动态效果等原则的应用,你可以显著提升你的数据可视化作品的吸引力和实用性。希望本文能为你提供一些有益的启示和帮助。
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
3月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。