Featured image of post 等额本金和等额本息比较分析

等额本金和等额本息比较分析

# 提出需求

贷款 100 万,贷款利率为 6%(年利率),贷款期限 3 年。分别计算等额本金和等额本息两种还款方式下每月偿还本金、偿还利息、偿还本息、剩余本金。并对两种还款方式进行比较分析。

# 加载 R 包、设置关键参数

library(ggplot2)
library(dplyr)
library(kableExtra)

# 设置贷款余额 value
value = 1000000

# 设置贷款年利率 rate
rate = 0.06

# 设置贷款期限 term
term = 3

# 设置还款方式 mode
mode1 = 1  # 等额本金
mode2 = 2  # 等额本息

# 编写函数计算不同模式下月供

repayment = function(value, rate, term, mode) {
  
  # 年利率换算为月利率
  rate_m = rate / 12
  # 还款期限换算成月
  t = term * 12
  # 生成还款期次向量
  N = 1:t  # 还款期次
  
  # 等额本金模式
  if (mode == 1) {
    MBA = value / t  # 每月应还本金
    MYA = value - MBA * (N-1)  # 截至当月还款前贷款余额
    MYAA = value - MBA * N  # 还贷后剩余本金
    MIA = MYA * rate_m  # 当月应还利息
    MPA = MIA + MBA  # 当月应还本息和
    tbl = data.frame(N, MYA, MBA, MIA, MPA, MYAA)
    colnames(tbl) = c(
      "还款期次", "贷款余额", "应还本金", 
      "应还利息", "应还本息", "剩余本金"
    )
  }
    
  # 等额本息模式
  if (mode == 2) {
    # 每月应还的等额本息
    MPB = value * rate_m * (1 + rate_m)^t / ((1 + rate_m)^t - 1) 
    # 截至当月还款前贷款余额
    MYB = value *(1 + rate_m)^(N-1) - MPB * ((1 + rate_m)^(N-1) - 1) / rate_m
    MIB = MYB * rate_m  # 当月应还利息
    MBB = MPB - MIB  # 当月应还本金
    MYBB = MYB - MBB  # 剩余本金
    tbl = data.frame(N, MYB, MBB, MIB, MPB, MYBB)
    colnames(tbl) = c(
      "还款期次", "贷款余额", "应还本金", 
      "应还利息", "应还本息", "剩余本金"
    )
  }
  
  # 返回生成的数据框
  return(tbl)

}

# 生成还款表

# 等额本金模式

df1 = repayment(
  value = value,
  rate = rate,
  term = term, 
  mode = mode1
)
print(df1)
#>    还款期次   贷款余额 应还本金  应还利息 应还本息  剩余本金
#> 1         1 1000000.00 27777.78 5000.0000 32777.78 972222.22
#> 2         2  972222.22 27777.78 4861.1111 32638.89 944444.44
#> 3         3  944444.44 27777.78 4722.2222 32500.00 916666.67
#> 4         4  916666.67 27777.78 4583.3333 32361.11 888888.89
#> 5         5  888888.89 27777.78 4444.4444 32222.22 861111.11
#> 6         6  861111.11 27777.78 4305.5556 32083.33 833333.33
#> 7         7  833333.33 27777.78 4166.6667 31944.44 805555.56
#> 8         8  805555.56 27777.78 4027.7778 31805.56 777777.78
#> 9         9  777777.78 27777.78 3888.8889 31666.67 750000.00
#> 10       10  750000.00 27777.78 3750.0000 31527.78 722222.22
#> 11       11  722222.22 27777.78 3611.1111 31388.89 694444.44
#> 12       12  694444.44 27777.78 3472.2222 31250.00 666666.67
#> 13       13  666666.67 27777.78 3333.3333 31111.11 638888.89
#> 14       14  638888.89 27777.78 3194.4444 30972.22 611111.11
#> 15       15  611111.11 27777.78 3055.5556 30833.33 583333.33
#> 16       16  583333.33 27777.78 2916.6667 30694.44 555555.56
#> 17       17  555555.56 27777.78 2777.7778 30555.56 527777.78
#> 18       18  527777.78 27777.78 2638.8889 30416.67 500000.00
#> 19       19  500000.00 27777.78 2500.0000 30277.78 472222.22
#> 20       20  472222.22 27777.78 2361.1111 30138.89 444444.44
#> 21       21  444444.44 27777.78 2222.2222 30000.00 416666.67
#> 22       22  416666.67 27777.78 2083.3333 29861.11 388888.89
#> 23       23  388888.89 27777.78 1944.4444 29722.22 361111.11
#> 24       24  361111.11 27777.78 1805.5556 29583.33 333333.33
#> 25       25  333333.33 27777.78 1666.6667 29444.44 305555.56
#> 26       26  305555.56 27777.78 1527.7778 29305.56 277777.78
#> 27       27  277777.78 27777.78 1388.8889 29166.67 250000.00
#> 28       28  250000.00 27777.78 1250.0000 29027.78 222222.22
#> 29       29  222222.22 27777.78 1111.1111 28888.89 194444.44
#> 30       30  194444.44 27777.78  972.2222 28750.00 166666.67
#> 31       31  166666.67 27777.78  833.3333 28611.11 138888.89
#> 32       32  138888.89 27777.78  694.4444 28472.22 111111.11
#> 33       33  111111.11 27777.78  555.5556 28333.33  83333.33
#> 34       34   83333.33 27777.78  416.6667 28194.44  55555.56
#> 35       35   55555.56 27777.78  277.7778 28055.56  27777.78
#> 36       36   27777.78 27777.78  138.8889 27916.67      0.00

# 等额本息模式

df2 = repayment(
  value = value, 
  rate = rate, 
  term = term, 
  mode = mode2
)
print(df2)
#>    还款期次   贷款余额 应还本金  应还利息 应还本息      剩余本金
#> 1         1 1000000.00 25421.94 5000.0000 30421.94  9.745781e+05
#> 2         2  974578.06 25549.05 4872.8903 30421.94  9.490290e+05
#> 3         3  949029.02 25676.79 4745.1451 30421.94  9.233522e+05
#> 4         4  923352.22 25805.18 4616.7611 30421.94  8.975470e+05
#> 5         5  897547.05 25934.20 4487.7352 30421.94  8.716128e+05
#> 6         6  871612.84 26063.87 4358.0642 30421.94  8.455490e+05
#> 7         7  845548.97 26194.19 4227.7449 30421.94  8.193548e+05
#> 8         8  819354.78 26325.16 4096.7739 30421.94  7.930296e+05
#> 9         9  793029.62 26456.79 3965.1481 30421.94  7.665728e+05
#> 10       10  766572.83 26589.07 3832.8641 30421.94  7.399838e+05
#> 11       11  739983.75 26722.02 3699.9188 30421.94  7.132617e+05
#> 12       12  713261.73 26855.63 3566.3087 30421.94  6.864061e+05
#> 13       13  686406.10 26989.91 3432.0305 30421.94  6.594162e+05
#> 14       14  659416.20 27124.86 3297.0810 30421.94  6.322913e+05
#> 15       15  632291.34 27260.48 3161.4567 30421.94  6.050309e+05
#> 16       16  605030.86 27396.78 3025.1543 30421.94  5.776341e+05
#> 17       17  577634.08 27533.77 2888.1704 30421.94  5.501003e+05
#> 18       18  550100.31 27671.44 2750.5016 30421.94  5.224289e+05
#> 19       19  522428.87 27809.79 2612.1444 30421.94  4.946191e+05
#> 20       20  494619.08 27948.84 2473.0954 30421.94  4.666702e+05
#> 21       21  466670.24 28088.59 2333.3512 30421.94  4.385817e+05
#> 22       22  438581.65 28229.03 2192.9083 30421.94  4.103526e+05
#> 23       23  410352.62 28370.17 2051.7631 30421.94  3.819824e+05
#> 24       24  381982.45 28512.03 1909.9122 30421.94  3.534704e+05
#> 25       25  353470.42 28654.59 1767.3521 30421.94  3.248158e+05
#> 26       26  324815.84 28797.86 1624.0792 30421.94  2.960180e+05
#> 27       27  296017.98 28941.85 1480.0899 30421.94  2.670761e+05
#> 28       28  267076.13 29086.56 1335.3807 30421.94  2.379896e+05
#> 29       29  237989.58 29231.99 1189.9479 30421.94  2.087576e+05
#> 30       30  208757.59 29378.15 1043.7879 30421.94  1.793794e+05
#> 31       31  179379.44 29525.04  896.8972 30421.94  1.498544e+05
#> 32       32  149854.40 29672.67  749.2720 30421.94  1.201817e+05
#> 33       33  120181.73 29821.03  600.9087 30421.94  9.036070e+04
#> 34       34   90360.70 29970.13  451.8035 30421.94  6.039057e+04
#> 35       35   60390.57 30119.98  301.9528 30421.94  3.027058e+04
#> 36       36   30270.58 30270.58  151.3529 30421.94 -9.385985e-10

# 两种还款方式比较分析

# 月还款利息对比

df1$mode = "等额本金"
df2$mode = "等额本息"
df = rbind(df1, df2)

df %>% 
  ggplot(aes(`还款期次`, `应还利息`, color = mode)) + 
  geom_line(linewidth = 0.8) + 
  theme(legend.title = element_blank())
# 等额本金累计还利息
interest_mode1 = sum(df1$`应还利息`)

# 等额本息累计还利息
interest_mode2 = sum(df2$`应还利息`)

# 大小判断
direction = ifelse(
  interest_mode1 > interest_mode2,
  "等额本金累计还利息比等额本息方式多",
  "等额本金累计还利息比等额本息方式少"
)

# 计算差异
change = abs(interest_mode1 - interest_mode2)

从上图我们可以可以清洗地发现:等额本金累计还利息比等额本息方式少。 统计结果显示: 等额本金累计还利息92500.00元, 等额本息累计还利息95189.75元, 两者相差2689.75元。

# 月还本息对比

df %>% 
  ggplot(aes(`还款期次`, `应还本息`, color = mode)) + 
  geom_line(linewidth = 0.8) + 
  theme(legend.title = element_blank())

从图上可以看出,等额本金还款模式前期还款压力较大,后期还款压力逐渐递减,等额本息模式每期还款压力不变。

红线与坐标轴围成的面积即为等额本金下还款总额。同理,蓝线与坐标轴围成的面积即为等额本息下还款总额;很明显蓝线围成的面积更大,即等额本息还款总额较多。

# 还款总额对比

df %>% 
  group_by(mode) %>% 
  summarise(`还款总额` = round(sum(`应还本息`), 2)) %>% 
  ggplot(aes(mode, `还款总额`, fill = mode)) + 
  geom_bar(stat = "identity") + 
  geom_text(aes(label = `还款总额`), vjust = -0.3) + 
  xlab("")  + 
  guides(fill = "none")

从总还款额同样也能清晰地看出等额本金累计还利息比等额本息方式少。