資産運用

「年○%で回せるとすると」←いや、そのりくつはおかしい

こんにちは、毛糸です。

先日の金融庁が「老後に2,000万円必要です」という報告書を出して以降、SNSでは資産運用に関する話題が増えています。

【参考記事】
【年金は頼れない?】「老後までに2,000万」報告書を読んだあとに私たちが取るべき行動

とくに、インフルエンサーと呼ばれる人たちを中心に、インデックス投資などを勧める声が上がっており、良い傾向だと感じます。ただ、一部では正確な理解に基づかない発言も見られ、その最たる例が以下のような主張です。

年利○%で30年運用すれば、老後に2,000万円は余裕。

この○%には、3とか6とか下手すると10%とかいう数字が入ってくることが多いのですが、年利6%で30年間運用する、という仮定は、はっきりいって乱暴です。

続きを読む

「米国株だけ買っておけばいい」という人は全然歴史に学んでない件

こんにちは、毛糸です。

先日の金融庁が「老後に2,000万円必要です」という報告書を出して以降、SNSでは資産運用に関する話題が増えています。

【参考記事】
【年金は頼れない?】「「老後までに2,000万」報告書を読んだあとに私たちが取るべき行動

とくに、インフルエンサーと呼ばれる人たちを中心に、インデックス投資などを勧める声が上がっており、良い傾向だと感じます。

ただ、一部では無理解な発言も見られ、その一例が以下のような主張です。

とにかく米国株に投資しておけばいいんだ!

最近、米国株式のパフォーマンスがよいことや、世界の時価総額ランキングの上位が米国企業ばかりであることなどを理由に、米国株だけ持っていればいいのだという結論に至る人が少なくないようです。

実際、2019/7/12のS&P500指数は3013.77ポイントで、

30年前329.81ポイントでしたから、

成長倍率は4倍超、

30年間の平均利回りに直すと年率7.6%を超える高いパフォーマンスになっています。

(出典:Google検索「S&P500」)

しかし、本当に米国株だけで安心なのでしょうか。
将来のことを予測するのは困難なので、このまま米国株式のハイパフォーマンスは続くかも知れませんし、近い将来頭打ちになるかも知れません。
ただ、一つ言えるのは、
「高いリターンと時価総額を誇った国の株が凋落した例はある」
ということです。
そう、我が国、日本です。
日本は高度経済成長時代に国力を増強させ、株式市場においても驚異的なパフォーマンスを発揮しました。
1959年において874.88ポイントだった日経平均株価は、
30年後の1989年に44倍の38,915.87ポイントを叩き出しました。
平均利回りに直すと年率13%を超えるハイパフォーマンスです。

(出典:日経平均株価(月次終値)https://plot.ly/~thyodo/72/#/)

残念ながらこのあとすぐにバブルは崩壊しますが、バブルの崩壊を予測できた一般人は、当時どれだけいたのでしょう。
当時の世界時価総額ランキングには日本株がひしめき合っており、その様相は現在の米国中心のランキングとよい対比になります。
日本の過去の例を見ると、現在高いパフォーマンスを上げている国の株式が、今後も繁栄し続けると考えるのは安易と言わざるを得ません。

米国株式についても同様に、今後いままでと同じような成長を続ける確証などどこにもないのです。

したがって、資産運用においては、米国株式一辺倒ではなく、複数の資産クラスに分散投資することが必要です。

ちなみに、「いままで良かったからといって、今後も良いとは限らない」のと同様、「いままで悪かったからといって、今後も悪いとは限らない」もまた真です。

具体的には、日本株式が今後も低迷を続けるかは神のみぞ知る事であり、世間の言うような「日本株は魅力的な投資対象ではない」というのも、疑ってかかるべき主張です。

【参考記事】
「日本株に投資すると長期的には損」は本当か?

quantmodの使い方とCAPMの計算|Rでプログラミング

こんにちは、毛糸です。

株式の期待リターンを推定するために広く用いられているのが、CAPM(Capital Asset Pricing Model)です。

CAPMは株式のリターンを市場ポートフォリオの1次関数として表す、とてもわかり易いモデルです。

本記事ではCAPMの計算(具体的には、ベータの推定)を、統計プログラミング言語Rで行う方法についてまとめます。

CAPMにおけるベータの推定には、個別株式と市場ポートフォリオのリターンのデータが必要になりますが、quantmodというパッケージを使えば、簡単に取得できるため、その方法も説明します。

また、推定に必要な無リスク金利(安全資産利子率)には、財務省が公表している国債利回りを用いることとします。

CAPM(Capital Asset Pricing Model、資本資産価格モデル)の概略

CAPMは、資産収益が正規分布するなどのいくつかの仮定のもとで成り立つ、危険資産(株式など)の期待リターンに関するモデルです。
CAPMでは、ある証券\( i\)の期待リターン\( E[r_i]\)は、無リスク金利\( r_f\)と市場ポートフォリオの期待リターン\( E[r_M]\)を用いて、以下のように表されます。
\begin{equation} \begin{split}
E[r_i]=r_f+\beta\left( E[r_M]-r_f\right)
\end{split} \end{equation}
係数の\( \beta\)(ベータ)は、証券\( i\)と市場ポートフォリオ\( M\)の連動性を示しています。
CAPMにおける\( \beta\)は、ある証券\( i\)の超過期待リターン\( E[r_i]-r_f\)を被説明変数、市場ポートフォリオの超過期待リターン\( E[r_M]-r_f\)を説明変数とした回帰分析によって求められます。
本記事では、統計プログラミング言語Rを用いて、
  • 証券と市場ポートフォリオのデータを取得しリターンを計算する方法
  • 無理リスク金利を取得する方法
  • 回帰分析を行う方法
を解説しています。

quantmodによる株価ヒストリカルデータの取得方法

Rライブラリ「quantmod」を用いると、個別株式の価格情報を入手することができます。
quantmodは、Rコンソールで以下を実行すればインストールできます。同時に「XML」というライブラリも必要になる(ないとエラーを吐く)ので、合わせてインストールしましょう。
install.packages(“quantmod”)
install.packages(“XML”)
quantmodライブラリを読み込みます。
library(quantmod)
getSymbols()関数を使うと、指定した証券コードの価格データをwebページから取得することができます。日本の株式では、Yahoo!ファイナンスを情報ソースにすればよいです。
本記事では、証券コード9984.Tソフトバンクグループの株価を、Yahoo!ファイナンスから、開始日”2013-06-01″、終了日”2019-05-31″で取得します。
証券コードは、Yahoo!ファイナンスの各証券のページの?code=以下に記載されているものです。
https://stocks.finance.yahoo.co.jp/stocks/detail/?code=9984.T
証券コードの.Tは市場(T=東京証券取引所)を示すものですが、なくても大丈夫かもしれません。
関数の最後の引数auto.assignは取得したデータを自動でオブジェクトに代入するかどうかを決めるもので、=TRUEとした場合は自動的に「YJ9984.T」というオブジェクトに情報が格納されます。
getSymbols(“9984.t”,src=”yahooj”,from=”2013-06-01″,to=”2019-05-31″,auto.assign=TRUE)
auto.assign=FALSEとした場合には自動でオブジェクトに代入されないので、自分でオブジェクトに代入します。
data9984<-getSymbols(“9984.t”,src=”yahooj”,from=”2013-06-01″,to=”2019-05-31″,auto.assign=FALSE)
取得したデータは、日次ベースの時系列データになっており、始値・高値・安値・終値・取引高・調整後株価が格納されています。
以下の作業では終値の情報を使いますので、以下のように終値のみのデータを作ります。
Price_i<-YJ9984.T$YJ9984.T.Close
plotすることで株価の推移を見ることができます。
plot(Price_i)
\( t\)日目の日次リターン\( r_{i,t}\)は
\begin{equation} \begin{split}
r_{i,t}=\frac{P_{i,t} -P_{i,t-1}}{ P_{i,t-1}}\approx \log(P_{i,t})-\log(P_{i,t-1})
\end{split} \end{equation}

投資とギャンブルの違いとはなにか?経済学にも触れながら。

こんにちは、毛糸です。

先日、金融庁が「老後までに2,000万円の貯蓄が必要」とする報告書を公表し、多くの日本人が投資の重要性に気づき始めています。
しかし一部の人は、投資をギャンブルと同等に捉え、あまり近づきたくないと感じているようです。
たしかに、投資もギャンブルも、お金を投じることにより、将来お金が増えて返ってくることを期待し、しかしその金額がいくらになるかはわからない(不確実性がある)という意味では同じ性質を持っています。
しかし一般的には、投資とギャンブルは「常識的に」別物だと考える人が多いのではないでしょうか。
本記事では、投資とギャンブルの境界線となる以下の点に注目し、経済学の観点から説明してみようと思います。
  • 消費的価値の存在
    • 投資は(定義上)満足を生まない一方、ギャンブルは満足感を生む
  • 期待リターンの正負
    • 投資は期待リターンがプラスであるが、ギャンブルは多くの場合マイナス

お金の使い方には2種類:消費か投資か

投資とギャンブルの違いを考える前に、そもそも投資とは何かについて説明しなければなりません。
経済学では、お金の使い方(支出)を大きく2つに分けます。
ひとつが消費(consumption)、もうひとつが投資(investment)です。
投資には、貯蓄(saving)を含みます。
消費とは、お金を使って、満足感を高めることです。
投資とは、お金を使って、将来のお金を得ることです。
経済学では消費と投資を明確に区別しており、投資からは直接満足感を得ることはなく、投資することで将来得られるお金を使い、将来消費を行うことで満足感を得ると考えます。
消費のためにお金を使ったときに得られるモノを、財といいます。たとえば、休憩時間にお金を支払って買ったコーヒーは、満足感を高めてくれる財です。
財は基本的に、自分の財産を増やしてくれるものではなく、購入して消費して満足感を高めて、おしまいです(長期間に渡り満足感を高めてくれる財:耐久消費財もあります)。
他方、投資のためにお金を使ったときに得られるモノを、資産といいます。たとえば、銀行にお金を預ける(=支払う)ことで、将来それに利息をつけて返してくれる預金・貯金は、資産です。
株式も、資産です。なぜなら株式とは、企業にお金を託しビジネスに活用してもらうことで、そこで得られた利益を配当として還元してくれるための証明書であり、将来のお金を得る手段だからです。。
投資とは、資産を買うことで、将来お金を増やすことを目的に行われる活動を言います。

投資には2種類:無リスク投資(安全資産)とリスク投資(危険資産)

将来お金を増やして返してもらう目的で、お金を支払う行為が投資であり、投資の「あかし」が資産です。
投資(資産)には2つの種類があります。
ひとつは、現時点で将来いくらお金が返ってくるかわかっているもの。これを無リスク投資(安全資産)といいます。
もうひとつは、現時点で将来いくらお金が返ってくるかわからないもの。これをリスク投資(危険資産)といいます。
無リスク投資はたとえば、絶対に破綻しない国に対してお金を貸した際にもらえる証明書(国債)がイメージしやすいでしょう。
リスク投資は、株式や投資信託など、いわゆる金融商品のほとんどが該当します。
リスク投資をする際に重要なポイントが、リターンとリスクです。
リターンとは、その資産にお金を投じたとき、将来どれくらい増えるかの度合いのことです。
リスクとは、リターンが想定する金額からどれくらいブレる可能性があるかの尺度です。
通常、リターンは大きいほうが(つまりたくさん増えたほうが)好ましく、また、リスクは小さいほうが(つまり想定からあまりブレないほうが)好ましいとされます。
リターンの想定のことを、期待リターンといいます(期待とは、確率論における期待値を意味しています)。
資産の期待リターンは通常プラスです。なぜなら、増える見込みのないものにお金を出すなんてことは、合理的な人であればするはずがなく、誰も興味を持たない資産が世に出回ることはないと考えられるからです。

投資とギャンブルの違い

消費と投資、無リスク投資とリスク投資の違いがわかったところで、本題です。
投資とギャンブルの違いは何なのでしょうか。

ギャンブルの消費的側面

第一に、ギャンブルには消費的側面と投資的側面があります。
どういうことかというと、ギャンブルという行為は、それ自体が満足感を得られる活動(消費)であり、かつお金を投じることで将来増えることを目論んでいる(投資)のだということです。
通常、投資は満足を生みませんが、ギャンブルは消費の対象になり、満足感を得られます。
したがって、「ギャンブルは投資に含まれる」のではなく、「ギャンブルは消費と投資の両方の性質を持つ」と考えられます。

期待リターン

第二に、ギャンブルとしてイメージされる活動の多くは、期待リターンがマイナスであるということです。
投資は通常、期待リターンはプラスです。マイナスならば誰にも欲しがられることはなく、市場から消えてしまうからです。
しかし、多くのギャンブルは期待リターンがマイナスです。たとえば宝くじの期待リターンは-54.3%ほど(当選金率45.7 %、参考URLリンク)であり、100万円買っても期待値の上では45.7万円(54.3万円の期待損失)にしかなりません。
投資は基本的にプラスリターンであると考えられている一方、ギャンブルはマイナスであるというのは、投資とギャンブルの大きな違いの一つです。
しかし、ギャンブルには前述の通り消費性(満足感を高める性質)がありますから、期待リターンがマイナスでも、欲しがる人はいなくならないのです。

まとめ

消費と投資、無リスク投資とリスク投資という経済学の考え方に触れながら、投資とギャンブルの以下の違いについて述べました。
  • 消費的価値の存在
    • 投資は(定義上)満足を生まない一方、ギャンブルは満足感を生む
  • 期待リターンの正負
    • 投資は期待リターンがプラスであるが、ギャンブルは多くの場合マイナス
投資とギャンブルには明確な違いがあり、統語の資産形成には投資が役立つことは言うまでもありません。
投資をギャンブルと混同せず、正しく理解して、資産形成を行っていきたいですね。
本記事の参考文献として以下を挙げます。投資初心者がまず何に投資すべきか、証券会社にどうやって口座を開けば良いのか、NISAやiDeCoなどの制度をどう利用したら良いのかという具体的な話に加え、本記事で述べたギャンブルの消費性についても触れられています。
タイトルに若干の胡散臭さを感じますが、金融理論に即した投資の基本が学べます。

株価リターンが正規分布でなくてもファイナンス理論は成り立ちます!

こんにちは、毛糸です。

先日の記事で、主要地域の株価リターンが正規分布に従わないことを確かめました。
>>日本株式、米国株式、欧州株式、全世界株式の日次リターンが正規分布ではなかった件

この記事についてはSNSでもコメントが多く寄せられましたが、この手の「理論と現実は違う!」系の主張(というか批判)は昔からあるようで、中には建設的でない議論に終始するものもあるようです。
参考記事>>分散投資を批判した後の対案がそれ以上に酷い法則-梅屋敷商店街のランダム・ウォーカー(インデックス投資実践記)

今回はファイナンス理論の観点から、正規分布が成り立たない場合にも、既存のファイナンス理論は通用するのだということを説明します。

なお、本記事は以下の書籍の内容を参考にしているので、興味のある方はチェックしてみてください。



理論と現実の差は、理論の価値を損なうものではない

下記の記事で述べたとおり、主要地域の株価の日次リターンは、正規分布に従いません。
>>日本株式、米国株式、欧州株式、全世界株式の日次リターンが正規分布ではなかった件

投資期間が短い場合の株価リターンは正規分布に従わない、というのは学術的にも古くから指摘されており、また、投資期間が長い場合は正規性を棄却できないとする研究もあります。

ファイナンスの多くの理論研究は、資産収益が正規分布に従うことを仮定しており、正規分布と仮定しているからこそ見つかった性質というのも数多くあります。

しかし、ファイナンスの理論研究の多くは「モデル分析」、すなわち現実の問題の本質的な部分を切り取り抽象化して、他の部分は削ぎ落とした世界で成り立つ性質を調べる、というものです。

したがって、正規分布という仮定それ自体が、ある種の「捨象」であり、正規分布であることが本質的に重要でないことも多くあります。

仮に現実の株価リターンが正規分布でなくとも、ファイナンス理論の得た洞察が揺らぐものではありませんし、もし正規分布という過程によって揺らぐような理論を利用したいのであれば、自ら理論を修正すれば良いだけの話です。
>>理論・モデルの意義と、理論と現実の差異を知ったあとにとるべき行動

リターンが正規分布に従わない場合の平均分散分析

ファイナンスの標準的モデルが正規分布を使っているといっても、正規分布以外の分布の可能性を一切捨てているわけではなく、正規分布以外の分布で成り立つ命題を多くの研究者が探求しています。

投資理論においては、収益の平均(リターン)と分散(標準偏差、リスク)の情報を基に最適なポートフォリオを探求するという研究が、1950年台のマーコウィッツの研究以後、活発に調査されてきました。

このマーコウィッツの平均分散分析は、ノーベル経済学賞の受賞理由にもなり、昨今話題になっているロボアドバイザーの技術的根拠、さらには投資の王道「分散投資」の理論的裏付けにもなっています。

WEALTHNAVI(ウェルスナビ)

平均分散分析が成り立つためには、リターンが正規分布にしたがう、というのが十分条件になっています。

つまり、正規分布ならば平均分散分析が成り立つ、ということです。

現実には「正規分布ならば」が成り立っていませんので、平均分散分析が成り立つかはわかりません。

この点をもって「前提が破綻している!理論は不完全だ!」というのはあまりにも非論理的です。

正規分布でなくても、平均分散分析を成り立たせるような、別の十分条件があるかもしれないからです。

事実、その後の意欲的な研究により、リターンが正規分布でなくとも、楕円分布族というクラスに属していれば、平均分散分析(と同様の分析)が行えることがわかっています。

楕円分布族というのは、平たく言うとを横に輪切りにしたときの切り口が楕円(正規分布は正円です)になるような分布のことで、正規分布の他に、対称安定パレート分布t分布、分散混合の混合正規分布などがあります。

株価リターンがこれら分布に従えば、ポートフォリオのリターンも楕円分布に従うことがわかっています。

このとき、ある投資家は資産リターンが正規分布だと思い、別の投資家は安定分布だと思っていたとしても、パラメタが同じなら平均分散分析は成り立つちます。

ややテクニカルな話になりましたが、平均分散分析や分散投資という理論は、リターンが正規分布に従うという仮定でなくとも、本質的な部分は変わることなく成り立つということです。

まとめ

株価リターンが正規分布に従わないことがわかりましたが、それがファイナンス理論の破綻を意味するものではありません。

事実、リターンが正規分布に従わない場合にも、平均分散分析と同様の結論が得られます。



ブートストラップ法の概要と株価リターン分布への応用

こんにちは、毛糸です。

先日の記事で、株価の日次リターンが正規分布に従わないことを確認しました。
>>日本株式、米国株式、欧州株式、全世界株式の日次リターンが正規分布ではなかった件


本ブログでたびたび登場する投資シミュレーションプログラムは、リターンが正規分布に従うと仮定した場合の将来予測ツールなので、正規分布に従わないことがわかった今、何らかの改善をしなくてはなりません。
>>「投資シミュレーションプログラム」サマリー


本記事では改善のための手法として考えている「ブートストラップ法」について解説し、ブートストラップ法を株価リターン分布の推定にどう利用できるかを説明します。

なお、本記事は下記サイトの内容を参考にしています。
>>Rで「ブーツ」(PDFリンク

ブートストラップ法とはデータを無作為抽出し推定に使う手法

あるデータがよく知られた確率分布から発生していると仮定して行う統計分析を「パラメトリック法」と呼びます。
投資シミュレーションプログラムは株価リターンが正規分布に従うと仮定しているため、「パラメトリック法」による分析です。
>>「投資シミュレーションプログラム」サマリー
しかし、データがよく知られた確率分布から発生しているとはみなせない場合には、無理やり何らかの確率分布に当てはめると、誤った結論を導くことになります。
したがって、あらかじめ確率分布を特定化せずに、確率分布を推定する方法を考えなければなりません。
その方法の一つが「ブートストラップ法(ブーツストラップ法)」です。
ブートストラップ法は、すでに得られているデータから無作為抽出を繰り返し、それを新たなデータとみなすことにより、確率分布や密度関数の推定を行ったり、標本平均や標準偏差といった統計量を計算する手法のことです。
ブートストラップ法は「データはこの確率分布から発生しているはずだ」という前提をおかず、「データをありのままに利用する」という考え方に基づいており、このような統計手法を「ノンパラメトリック法」といいます(厳密には、パラメトリックなブートストラップ法もあります)。
また、データをランダムに利用するという意味で、モンテカルロ法の一種とも言えます。

株価リターンにブートストラップ法を適用する

ブートストラップ法によれば、株価リターンのデータから、無作為にデータを抽出し、新たなデータとして扱うことになります。

これにより、リターンが正規分布に従うと仮定できなくても、実際の株価リターンデータを乱数のように用いて、統計的・確率論的な分析が可能になります。

実際に、日本株式のリターンを使って、分析を行ってみましょう。

まず、下記の記事を参考に、日本株式のリターンのデータを読み込みます。
>>ファーマ-フレンチの3ファクターモデルのデータを入手する方法

#csvデータの読み込み
JP <- read.csv("Japan_3_Factors_Daily.csv", skip=5)
#時系列データとして加工
JP_mkt<-ts(JP$Mkt.RF+JP$RF,start=JP$X[1])/100

日本株の日次リターンの統計量を求めてみます。

#平均
m=mean(JP_mkt)
#標準偏差
s=sd(JP_mkt)

library(moments)
#歪度:正規分布が0
skewness(JP_mkt)
skewness(rnorm(10000,m,s))
#尖度:正規分布が3
kurtosis(JP_mkt)
kurtosis(rnorm(10000,m,s))

株価リターンと同じ平均、標準偏差をもつ正規分布より、尖度はかなり大きな値になっていることがわかります。

データが正規分布に従うかを調べるための、コルモゴロフ・スミルノフ検定も行っていますが、「正規分布に従う」という帰無仮説は棄却され、株価リターンは正規分布ではないと結論付けられます。

#コルモゴロフ・スミルノフ検定
ks.test(JP_mkt, "pnorm", mean=m, sd=s)

ヒストグラムを正規分布と比較してみます。実際の株価リターンデータと、同じ平均、標準偏差の正規分布の密度関数を描きます。実際のデータのほうが、左右の裾が厚い感じがします。

hist(JP_mkt,freq = FALSE,ylim=c(0,30))
curve(dnorm(x,m,s),add=TRUE,col="red")

株価リターンにブートストラップ法を適用してみます。株価リターンから、無作為に10000個のサンプルを抽出し、ヒストグラムを描きます。
#ブートストラップ法

bs<-sample(JP_mkt,10000,replace=T)
hist(bs,freq = FALSE)

ブートストラップ法で得たサンプルを使って、損失確率を計算し、正規分布の場合と比較してみましょう。

#損失確率ブートストラップ法
length(bs[bs<0])/length(bs)
#損失確率正規分布
pnorm(0,m,s)

ブートストラップ法で得たサンプルから計算した損失確率は49.2%、正規分布の場合は49.5%でしたので、実際のデータのほうがやや損失が出にくい(利益が出やすい)分布であることがわかりました。

損失確率を求めるくらいであれば、データをそのまま使えばよいので、ブートストラップ法を適用する必要もありませんが、より複雑な分析をするときには、ブートストラップ法は強力なツールになります。

まとめ

ブートストラップ法の概要と、株価リターン分析への応用可能性について説明しました。

実際の株価リターンは、理論で前提とするような正規分布ではありませんが、だからといって理論の価値が損なわれるわけではありません。

正規分布との差異をきちんと把握し、必要ならば適切に対処できることが大事です。
>>理論・モデルの意義と、理論と現実の差異を知ったあとにとるべき行動

老後に2,000万は実現可能なのか?家計調査を眺めてわかったこと

こんにちは、毛糸です。

2019年6月3日、金融庁金融審議会 市場ワーキング・グループが、『高齢社会における資産形成・管理』と題する報告書を公表しました。
参考>>金融審議会 「市場ワーキング・グループ」報告書 の公表について

本報告書では、日本の高齢化に伴う資産管理の問題点を浮き彫りにしつつ、資産寿命を伸ばし老後を豊かに暮らすための指針が示されています。
そのなかで、老後世帯の月々の赤字額に関する統計調査から「老後までに2,000万円の資産形成が必要」との指摘がなされました。
この指摘について、麻生財務大臣は「表現自体は不適切」と述べましたが、しかし事実として多くの国民を驚かせているようです。
本記事では「老後までに2,000万」という数字が、実現可能な水準なのか、総務省家計調査を紐解いて考えてみたいと思います。

「老後までに2,000万円」の根拠は総務省家計調査

「老後までに2,000万」の算定根拠は、市場ワーキンググループ第21回の厚労省提出資料に記載された、下記の表です。

この表によれば、退職後の高齢夫婦世帯の1ヶ月の収入(年金等)は支出を超えており、赤字額の月5万円ほどを資産の取り崩しで対応する必要があると述べています。

この表は総務省家計調査をもとに作成されています。

家計調査とは、総務省が毎月行っている世帯単位の統計調査であり、月々の収入や支出、その内訳を、世帯の属性(単身であるとか、就業者であるとか、世帯主の年齢とか)と関連付けて記録したものです。
上記表は2017年の調査報告の内容を踏まえたものであり、これによると高齢夫婦無職世帯は月々5.4万円の赤字となっています。
月5万円×12ヶ月×老後30年でざっくり2,000万円が必要、というのが「老後までに2,000万」の根拠です。

現役世代の月々の黒字額(貯蓄可能額)は?

老後までに2,000万円の根拠がわかったところで、この金額は果たして現役時代の貯蓄でまかなえるものなのでしょうか?

65歳時点で2,000万円を確保するには、現役時代(20歳から60歳)の40年間に、年50万円ずつ確保する必要がありますが、果たして可能な水準なのでしょうか。

これも家計調査から確認できます。
表番号4には世帯主の年齢別の収支が載っていますので、これを見てみましょう。

20代の家計

20代家計の実収入32万円、実支出22万円、差額の黒字額は月額10万円です。
実収入には月給31万円を含みます。
ちょっと高い印象を持ちますが、あくまで世帯単位なので、世帯主の給料プラス配偶者が働いていればその給与も含まれます。

30代の家計

30代家計の実収入48万円、実支出33万円、差額の黒字額は月額15万円です。
実収入には月給45万円を含みます。

40代の家計

40代家計の実収入56万円、実支出41万円、差額の黒字額は月額15万円です。
実収入には月給53万円を含みます。

50代の家計

50代家計の実収入57万円、実支出42万円、差額の黒字額は月額14万円です。
実収入には月給55万円を含みます。

現役世代の貯蓄可能額

以上の内容から、月々の黒字額をすべて貯蓄に回すとすると、その総額は6,600万円ほどになります。

したがって、「平均的な」生活を送ってさえいれば、金融庁の「老後までに2,000万円」という目標も余裕でクリアできることになります。

(出所:総務省家計調査2018)

所得区分が違うとどうなるか?

ただし、上記はあくまで各年齢区分の平均値であり、母集団には飛び抜けて稼ぐ人も含まれているため、我々の実感とはやや異なっているかもしれません。
家計調査には世帯主の年収別の統計もあります(表番号3)。
これによると、年収356万円以下の層では、月々の黒字が32,709円です。
仮に生涯この年収階級であったとすると、月々の黒字をすべて貯金しても1,728万円であり、2,000万円には届かないので、必然的に「投資しろ」ということになります。
何に・いくら・どのように投資するかについては踏み込んだ議論が必要になるためここでは述べませんが、投資信託の積み立て購入によって分散効果を享受するのが賢いやり方だと思います。
投資信託の積立投資に関する解説は、下記書籍が大変丁寧でわかりやすく、おすすめです。


年収水準がもう少し高い層(356〜498万円)の人は、月々の黒字が8.2万円あります。

これをすべて貯蓄に回せられれば65歳時点で4,428万円になり、それなりに余裕が持てることになります。

仮にすべて日本株に投資すれば65歳時点の投資時価の中央値は1億を超え、2,000万を確保できない確率は5%以下と、かなり安心の将来設計です。

というわけで、結論としては、2,000万確保したければ年収上げろ、ということかと思います。

(出所:総務省家計調査2018)

まとめ

金融庁の報告書に込められた「老後までに2,000万円」というメッセージについて、現役世代の貯蓄でまかなえるのかを、総務省家計調査から考えてみました。
年齢別の平均黒字額をすべて貯蓄に回せば、「老後までに2,000万円」は余裕でクリアできる水準です。
所得別にみると、年収356万円以下の層は、平均どおりの収支では老後資金をまかなえませんので、投資によってリターンを稼ぐ必要が出てきます。
しかし年収が498万円まで増えれば、黒字額は大幅に増えますので、必ずしも投資リスクを取る必要はありません。
「老後までに2,000万円」を叶えるには、年収を上げるのが最も効果がありそうです。

積立投資をシミュレーションするプログラムを作った(投資シミュレーションプログラムVer2)

こんにちは、毛糸です。
先日開発した「投資シミュレーションプログラム」は、年金運用やFXなど幅広い投資活動の分析に役立っています。
最初のバージョン以降、レバレッジと撤退の意思決定を考慮したり、ベクトル演算による高速化を行うなど、改善を続けてきました。
しかしながら、投資シミュレーションプログラムは実際の投資活動をリアルに分析するツールとしてはまだ不十分です。
今回、投資シミュレーションプログラムを更に改良し、積立投資の分析ができるようなプログラムにアップグレードしたので、その内容を解説します。

 

投資シミュレーションプログラムver2の改善点

今回アップデートする投資シミュレーションプログラムでは、「追加投資」の分析が行えるようになります。
従来の投資シミュレーションプログラムでは、投資期間を決めたら、期初に一括投資を行い、その後資金の出し入れは行わない前提で計算を行っていました。
しかし、実際の投資活動においては、投資資金の出し入れが行われることが通常であり、広く利用されている投資手法であるドルコスト平均法も、定期的な積立を行うものです。
今回アップデートする投資シミュレーションプログラムでは、投資期間中の資金の出入りスケジュールを計算に織り込むことができるようにします。
これにより、追加投資や引き出し、積立投資など、より現実的な分析が可能になります。
参考記事>>ドルコスト平均法の検証が難しい理由

コード例

投資シミュレーションプログラムでは、投資スケジュールを設定することで、投資期間中の追加投資や資金の引き出しが可能になります。
具体的には、投資スケジュールを時間区分の数だけ設定し、これを期中の投資時価に反映させます。
最終的な投資時価は期中の投資スケジュールを反映させたものになり、この投資時価を何万パターンも発生させることで、将来をシミュレーションします。

資金の出入りを反映させるに伴い、まず期間を原則として月数とするようにし、投資月数をhorizonという変数に格納します。

#投資年数(自由入力)
Year<-1
#1年あたりの月数(通常は12)
Month_par_year<-12
#投資月数
horizon<-Year*Month_par_year#monthes

また、投資期間中の資金の出入りを、inv_schedule変数に格納します。たとえば、毎月1万円の積立投資を行う場合には、指定した数字を繰り返す関数rep()を用いて、以下のように記述します。

#投資スケジュールを入力(自由入力)
inv_schedule<-rep(1,horizon)

投資のリスク・リターンも、月次ベースに直します。

#年率期待リターン(期待収益率μ、自由入力)
mu<-7/100
mu_par_month<-mu/Month_par_year
#年率リスク(標準偏差σ、自由入力)
sigma<-12.88/100
sigma_par_month<-sigma/(Month_par_year)^0.5

シミュレーションを行う繰り返し計算の部分に、前述のinv_scheduleの各要素を足すように変更します。

#シミュレーション開始
for (s in 1:sample){
        for ( t in 1:horizon){
            #撤退していれば計算を飛ばす
            if(W[s]==1) break
            #今年の資産額=前年の資産額*(1+レバ比率*収益率)
            A[s,t+1]<-A[s,t]*(1+Lev*z[s,t])+inv_schedule[t]
            #もし資産額が撤退額を下回ったら撤退目印を立てる
            if(A[s,t+1]<Withdraw)W[s]<-1
        }
}
以上を加味した、投資シミュレーションプログラムver2.0のコードは以下のとおりです。
#投資年数(自由入力)
Year<-1
#1年あたりの月数(通常は12)
Month_par_year<-12
#投資月数
horizon<-Year*Month_par_year#monthes
#シミュレーション回数(自由入力、多いほど正確だが時間がかかる)
sample<-1000
#シミュレーション数値を格納する行列
A<-matrix(0,sample,horizon+1)
#初期投資額を入力(自由入力)
initial<-1000
#投資スケジュールを入力(自由入力)
inv_schedule<-rep(1,horizon)
#シミュレーション数値に初期投資額を入力
A[,1]<-initial
#年率期待リターン(期待収益率μ、自由入力)
mu<-7/100
mu_par_month<-mu/Month_par_year
#年率リスク(標準偏差σ、自由入力)
sigma<-12.88/100
sigma_par_month<-sigma/(Month_par_year)^0.5
#レバレッジ比率
Lev<-1
#撤退をカウントする目印
W<-rep(0,sample)
#撤退額を設定
Withdraw<-0
#乱数を生成(ランダムな投資収益率)
set.seed(1234)
x<-rnorm(sample*horizon,mu_par_month,sigma_par_month)
#乱数(ランダムな収益率)を行列形式に変換
z<-matrix(x,sample,horizon)
#シミュレーション開始
for (s in 1:sample){
        for ( t in 1:horizon){
            #撤退していれば計算を飛ばす
            if(W[s]==1) break
            #今年の資産額=前年の資産額*(1+レバ比率*収益率)
            A[s,t+1]<-A[s,t]*(1+Lev*z[s,t])+inv_schedule[t]
            #もし資産額が撤退額を下回ったら撤退目印を立てる
            if(A[s,t+1]<Withdraw)W[s]<-1
        }
}
#シミュレーション結果の期待値を表示
paste(Year,"年後の資産額の期待値は",mean(A[,horizon+1]))
#シミュレーション結果の中央値を表示
paste(Year,"年後の資産額の中央値は",median(A[,horizon+1]))
#損する確率を表示
paste("損失を被る確率は",length(A[,horizon+1][A[,horizon+1]<initial])/sample)
#億り人になれる確率を表示
paste("億り人になれる確率は",length(A[,horizon+1][A[,horizon+1]>10000])/sample)
#破産する確率を表示
paste("破産する確率は",sum(W)/sample)
#将来の資産額の確率分布(ヒストグラム)を表示
hist(A[,Year+1])

 

まとめ

投資シミュレーションプログラムをアップデートし、期中の資金の出入りを考慮できるようになりました。
これにより、積立投資のシミュレーションや、資金の引き出しについての分析が行なえます。
具体的なシミュレーションの例は、近日公開予定です。

ドルコスト平均法の検証が難しい理由

こんにちは、毛糸です。

日本の年金制度に対する不透明感から、資産運用の必要性を感じている人も増えてきていることと思います。
資産運用の「王道」として挙げられるのが、投資信託などを毎月定額で積み立て購入する手法「ドルコスト平均法」です。
ドルコスト平均法は初心者でも実施できる効果的な投資手法として紹介されることも多いですが、実はその有用性については評価が分かれています。
本記事ではドルコスト平均法の有効性を検証することが難しい2つの理由を解説します。

ドルコスト平均法とは

ドルコスト平均法は投資手法の一つであり、決まった期間ごと(たとえば一ヶ月ごと)に一定の金額を投資することを指します。

ドルコスト平均法は投資の平均買い付け価格を下げる効果があるとされています。

ドルコスト平均法の考え方は単純で、手軽に行える投資手法であり、上記のような「効果」があるとされているため、人気の手法です。

しかし、ドルコスト平均法が投資手法として優れているのかというのは、学術的には肯定的な意見も否定的な意見もあり、科学的に立証された方法ではありません。

資産運用の初心者におすすめの入門書『難しいことはわかりませんが、お金の増やし方を教えてください!』には、ドルコスト平均法について、

三流ファイナンシャルプランナーが書いたんじゃない?

早めに買ってお金に働いてもらう期間が長いほうが、現時点の判断としては正しい。

と書かれており、ドルコスト平均法に否定的です。

このように、専門家の間でもドルコスト平均法の有効性については判断が分かれています。

以下ではなぜドルコスト平均法の検証が難しいのか、2つの理由を挙げます。

データ期間に依存する

ドルコスト平均法に関する設例の多くは、資産価格が上げ下げを繰り返すようなケースがほとんどです。

こういうケースにおいては、ドルコスト平均法によって、買い付け単価の平均は小さく抑えられます。

出典:三井住友DSアセットマネジメントhttps://www.daiwasbi.co.jp/fundcollege/investment/about/index4.html

しかし、これはあくまで「そういう相場だから有利だった」という話で、これからも上げ下げを繰り返すような相場になるとは限りません。
時には今を「底」として右肩上がりで資産価格が上昇する場合もあり、そのときは当初一括購入するのが、最も買い付け単価を安くする方法です。
このように、ドルコスト平均法の検証につかうデータ次第では、ドルコスト平均法が有利とも不利とも言えることになります。

したがって、特定期間のデータに依拠したドルコスト平均法の分析は説得力にかけるものがほとんどです。

データ期間に依存しない一般的なケースでの分析が難しいことが、ドルコスト平均法の分析を難しくする要因のひとつとなっています。

確率論の問題として扱いづらい

投資を確率論の立場から検証するのがファイナンス理論です。
ブラック・ショールズ式を厳密に証明しノーベル賞を受賞したロバート・マートンも、確率論に基づく最適ポートフォリオの研究をしています。
ファイナンス理論において投資を分析するのは今やメジャーとなっていますが、しかし、ドルコスト平均法は標準的なファイナンス理論とあまり相性がありません。
標準的なファイナンス理論では、資産価格が対数正規分布に従うと仮定されます。
参考記事>>年金のリスクとリターンを統計プログラミング言語Rで計算してみた
ドルコスト平均法は、異なる時点で一定金額を買い付ける手法であり、その際の購入量は一定金額÷資産価格で求められます。

計算によって、この購入量もまた、対数正規分布に従うことがわかります。

数式で書くと、時点\( t\)において資産価格が\( S_t\)だったときに、一定額\( A\)を投資したときの購入量\(Q_t \)は、以下のように表すことができ、これは対数正規分布に従います。

\[ \begin{split} Q_t=\frac{A }{S_t }=\frac{ A}{ S_0}e^{-(\mu-\frac{ 1}{ 2}\sigma^2)t-\sigma W_t}\end{split} \]

ただし、\( \mu\)は資産の期待リターン、\( \sigma\)はリスク、\( W_t\)は正規分布に従う確率変数です。

さて、ドルコスト平均法によった場合、購入は何度かに分かれて行われるため、最終的な投資量は各回の購入量の和、すなわち対数正規分布の和になります。
対数正規分布の和は、数式で簡潔に表現することができません。
参考記事>>対数正規分布の和、幾何ブラウン運動の和、リスク資産ポートフォリオ
正規分布であれば、正規分布の和は再び正規分布になり、簡潔に表現することができますが、対数正規分布の和は扱いやすい確率分布にはなりません。
したがって、確率論を使ってドルコスト平均法の定量的な議論を行うのは難しくなります。
もちろん、資産価格が対数正規分布に従わない別のモデルを考えればこの限りではありませんが、いずれにせよ、確率論で扱うような簡潔な形で扱うのは難しく、これがドルコスト平均法の検証が困難な理由です。

まとめ

ドルコスト平均法は簡単に実施できる投資法として人気ですが、その検証は簡単ではありません。
データに依存しますし、確率論の道具を使うことができないからです。
これらを踏まえ、ドルコスト平均法の検証には、シミュレーションが有効なのではないかと考えています。
近く、シミュレーションを用いたドルコスト平均法の検証をしてみたいと思います。

仮想通貨の価格ヒストリカルデータを取得する方法|Rライブラリcryptoの使い方

こんにちは、毛糸です。

仮想通貨に再び注目が集まっています。

2017年に価格が高騰し、2018年に暴落した仮想通貨は、現代のバブルとして一躍有名になりました。
参考記事:ビットコインはバブルである

仮想通貨に関しては、その価格変動の激しさから、投機の対象ともなっていますが、適切にリスク管理しないとあっという間に資産が溶けてしまいます。
本記事では再び注目が集まっている仮想通貨に関して、統計プログラミング言語Rによる価格データの簡単な取得方法について解説します。

仮想通貨パッケージcryptoをインストールする方法

Rはライブラリと呼ばれるプログラム・パッケージを利用することで、専門的な分析を簡単に行えるようになります。
仮想通貨の価格分析をするにあたっては、cryptoパッケージが役に立ちます。
cryptoパッケージに内蔵されている関数を用いることで、仮想通貨の価格情報を簡単に取得できます(公式マニュアルPDFはこちら)。
cryptoパッケージを利用するにはお使いのPCにRがインストールされている必要がありますので、下記を参考にして環境を整えてください。

仮想通貨価格の時系列データ(ヒストリカルデータ)の入手方法

まずはじめに、cryptoパッケージ(と付随して必要な他のパッケージ)をインストールします。
Rのコンソール画面に以下のコードを入力し実行します。
install.packages("crypto", dependencies = TRUE)
しばらくの間、各種パッケージのインストールが進みます。
インストールが進んだら、cryptoパッケージを読み込みます。
library(crypto)
これでcryptoパッケージに内蔵される各種関数が使用可能になりました。
たとえば、仮想通貨のリストを入手するには、以下のコードを実行します。
#仮想通貨のリストを表示
crypto_list()
出力結果は以下のようになります。
> #仮想通貨のリストを表示
> crypto_list()
# A tibble: 2,212 x 6
   symbol name     slug      rank exchange_url                history_url                           
   <chr>  <chr>    <chr>    <dbl> <chr>                       <chr>                                 
 1 BTC    Bitcoin  bitcoin      1 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 2 ETH    Ethereum ethereum     2 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 3 XRP    XRP      ripple       3 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 4 BCH    Bitcoin… bitcoin…     4 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 5 EOS    EOS      eos          5 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 6 LTC    Litecoin litecoin     6 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 7 BNB    Binance… binance…     7 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 8 BSV    Bitcoin… bitcoin…     8 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
 9 USDT   Tether   tether       9 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
10 XLM    Stellar  stellar     10 https://coinmarketcap.com/… https://coinmarketcap.com/currencies/…
# … with 2,202 more rows

ビットコイン(BTC)の価格データからリターンとリスクを計算する

実際にデータを分析してみましょう。

ヒストリカルデータの取得

crypto_history()関数で、指定した仮想通貨の時系列価格情報を取得できます。
#crypto_history(coin = NULL, limit = NULL, start_date = NULL
#end_date = NULL, coin_list = NULL, sleep = NULL)
#仮想通貨の価格等情報を取得
#dateはyyyymmdd形式で。NULLとすると最長期間
BTC<-crypto_history(coin = "BTC",
                    start_date = NULL,end_date = NULL)
日付を指定することで、特定期間のデータを取得することも出来ます。
BTC_saikin<-crypto_history(coin = "BTC",
              start_date = "20190501",end_date = "20190530")
head()関数、tail()関数で、データの先頭と最後尾を確認できます。
#データの先頭
head(BTC,1)
#データの最後尾
tail(BTC,1)
crypto_history()で取得される情報は、時点の情報や始値、終値など、いくつかの列から構成されています。
それぞれの情報にアクセスしたければ、たとえばBTC$closeのように$マークのあとに取り出したい列のラベルを指定します。

終値を時系列データとして抽出

今回使うのはBTCの終値closeです。関数ts()にデータを入れることで、時系列(time series)データとして扱うことが出来ます。
#BTCの終値情報を時系列として取り出す。
#時系列情報の開始日をBTC$date[1]と指定
BTC_price<-ts(BTC$close,start=BTC$date[1])

価格チャート

BTC価格のチャートを描いてみます。データの図示にはplot()関数を使います。
#type="l"は線グラフ
plot(BTC_price,type="l")

BTCの日次収益率(リターン)

日次収益率を計算します。
t日目のBTC価格を\( P_t\)、収益率を\( r_t\)と表すと、
\[ \begin{split}r_t=\frac{ P_{t}-P_{t-1}}{ P_{t-1}} \end{split} \]

と計算できます。

分子は1時点前との差額を計算するdiff(_,lag=1)関数、分母は1時点前の価格を返すlag(_,k=-1)関数を用いて計算できますので、BTCの日次収益率は以下のようにして求めます。
#日次収益率
BTC_return_daily<-diff(BTC_price,lag=1)/lag(BTC_price,k=-1)
plot(BTC_return_daily,type="l")

BTCリターンの平均と標準偏差(リスク)

日次収益率の平均はmean()関数を用いて計算できます。
mean(BTC_return_daily)*100
#[1] 0.2808807
#表示は%
#年率換算では
mean(BTC_return_daily)*100*365
#[1] 102.5215
BTCの日次平均リターンは0.28%(年率換算102%)でした。この値はデータ期間によって変わります。

標準偏差はsd()関数で計算できます。

sd(BTC_return_daily)*100
#[1] 4.333606
#表示は%
sd(BTC_return_daily)*100*365^0.5
#[1] 82.79343
リスクを示す標準偏差は日次で4.33%、年率換算82.79%でした。極めてハイリスクです。

まとめ

Rパッケージcryptoを用いて仮想通貨の価格を用意に取得できることを説明しました。
今後このデータを用いて、仮想通貨に関する統計分析をシリーズでお送りする予定です。
もし面白いと思っていただけたら、SNSでのシェアをよろしくお願いします。