関数の自作、年金・住宅ローンの計算

* 練習 (6)-1,2 の解答
--- (1) --Zan=vector()
Zan[1]=2000;r1=0.03;r2=0.05;a=150
for(n in 2:31) {
if( n < 6 ) r=r1 else r=r2
Zan[n]=(1+r)*Zan[n-1]-a; if(Zan[n]<=0) break
}
cat(n,"\n");
--- (2) --Zan=vector()
Zan[1]=2000;r1=0.03;r2=0.05;r3=0.07;a=150
for(n in 2:31) {
if( n < 6 ) r=r1 else { if( n < 10 ) r=r2 else r=r3 }
Zan[n]=(1+r)*Zan[n-1]-a; if(Zan[n]<=0) break
}
cat(n,"\n");
経済情報処理演習 II – p.28
* 練習 (6)-3 の解答
--- (3) --Zan=vector()
Kansai= vector()
Zan[1]=2000;r1=0.03;a=150;
alpha = seq(0.02,0.08,0.01)
N = length(alpha);
for(i in 1:N) {
r2=alpha[i]
for(n in 2:51) {
if( n < 6 ) r=r1 else r=r2
Zan[n]=(1+r)*Zan[n-1]-a
if(Zan[n]<=0) break
}
Kansai[i]=n
}
barplot(Kansai,names=alpha,ylim=c(0,40))
経済情報処理演習 II – p.29
Step7: 関数を自作する
プログラムがある程度大きくなってくると、何度も反復する命令部分や、別の機会に他のプ
ログラムでも利用できそうな部分を、
「部品」として切り離して、別に準備したくなります。
こうした「部品」のことを 関数 と呼びます。
実は、これまでにも 関数 をいくつか使ってきました (barplot(),cat() などなど)。
これらは R に最初から組み込まれている関数ですが、ここでは独自の関数を自作してみま
しょう。次の例題で、関数の自作について説明します。
【(国民年金) 老齢基礎年金の計算式】
現在 (平成 16 年) の国民年金保険料は、月額 1 万 3300 円。
国民は、20 歳以上 60 歳未満の間、この保険料を納めます。
保険料を納めた期間は個人によって違いますが、
最低 25 年間 (最大 40 年間) 納めると、原則 65 歳から、次の算式にしたがって年金が給付
されます (平成 16 年度の額、簡単のため保険料免除期間を考慮せず)。
年金給付額を a 、保険料納付月数を m として
a = 794500 ×
m
480
この算式を 関数 にまとめてみましょう。
経済情報処理演習 II – p.30
* 老齢基礎年金の支給額を計算する関数
nenkin <- function(m) {
a=797000*m/480
a=as.integer(a)
a
}
関数の一般的なかたちは、 □ <- function( ★ )
{
◎
} です。
□ には好きな名前を、★ には 引数 を、◎ にはいろいろな処理を記述します。
引数 とは、◎ に記した処理 (計算) を行うために必要なデータのことで、こ
の関数の呼び出し元から指定されます
(いまの場合には、保険料納付月数 m です)。
◎ の最後の行には 戻り値 を書きます。
戻り値 とは、処理 (計算) を終了して、呼び出し元に処理の結果として返す値
です。
R を起動して、この関数を一旦読み込ませると、そこから後は、この関数を次のように呼び
出して使えます。 nenkin(480) あるいは nenkin(40*12) など。
経済情報処理演習 II – p.31
* 老齢基礎年金の支給額を計算する関数(続)
1. 25 年間しか保険料を納めなかった場合の年金給付額を求めてください。
2. 保険料納付期間 (25 年∼40 年) を横軸に、年金給付額を縦軸に、棒グラフを描いてく
ださい。
3. 国民年金保険料は 13300 円/月です。40 年間この保険料を納め続けるとすると、40
年間に納めた保険料総額はいくらになるでしょうか。
また、65 歳から支給される年金はいくらになるでしょうか。
そして、何歳まで生きれば、「モトがとれる」でしょうか。
4. 保険料納付期間 (25 年∼40 年) を横軸に、「モトがとれる年齢」を縦軸に、棒グラフ
を描いてみましょう。
5. 確実に 80 歳まで生きるとすると、モトがとれた上に、払った保険料総額以上に年金
をもらえるはずです。40 年間保険料を納めた場合に、総額でどれくらい「トクをす
る」かを計算してみましょう。
6. 保険料納付期間 (25 年∼40 年) を横軸に、「(80 歳まで生きるとしたらこれだけ) トク
をする (という) 総額」を縦軸に、棒グラフを描いてみましょう。
経済情報処理演習 II – p.32
* 住宅ローンの毎月返済額を計算する関数
【住宅ローン 毎月返済(元利均等方式) の公式】
年金利 r で P 円の借金をします。そして、これを N 年かけて、毎月返済していきます。
β = r/12 とします。また毎月の返済額を a とし、 n 年後のローン残高を Z(n) とすると、
次の関係式が成立します。
(1 + β)12N β
a=P
,
(1 + β)12N − 1
Z(n) = (1 + β)12n (P −
a
a
)+
β
β
この公式を応用すれば、ローン計算や借り換えシミュレーションなどが簡単に行えます。
maituki <- function(P,r,N) {
beta=r/12
tmp=(1+beta)ˆ(12*N)
a=P*tmp*beta/(tmp-1)
a
}
引数
戻り値
ローン返済額の計算をするための初期条件 (当初借入額 P、年金利 r、返済年数 N )
毎月返済額 a
経済情報処理演習 II – p.33
* 練習 (7)
前ページで作った関数 maituki() は次のようにして利用できます。
maituki(3000,0.03,35)
maituki(4000,0.035,30)-maituki(4000,0.03,30) など
1. 関数 maituki() を利用して、次の処理を行ってみてください。
•
•
3500 万円を 30 年ローンで借りる場合、年金利が 2.5 %のときと 3.5 %のとき
とで、毎月の返済額にどれくらい差が出るかを求めてみてください。
3000 万円を 35 年ローンで借りる場合、年金利が 2.5 %、3.0 %、3.5 %、4
% と変化すると、毎月返済額がどう変化するかを棒グラフにしてください。
2. n 年後のローン残高を計算する関数を、次の仕様で作ってみましょう。
zandaka(P,r,N,n)
引数は、P:当初借入額、r:年金利、N:返済年数、n:何年後の残高を求めるか
戻り値は、n 年後のローン残高
3. 3000 万円を 30 年ローンで借りました。年金利は、当初 5 年間が 3 %、6 年目以降
はときどきの経済状況に応じて変動するという変動金利型の契約です。6 年目に年金
利が 5 %にあがると、毎月返済額はどれくらい増えるでしょうか (zandaka() と
maituki() をどちらも利用)。
経済情報処理演習 II – p.34