R语言数据分析与探索8-使用随机森林模型对家庭资产的回归预测分析

一、研究背景

家庭资产分析在现代经济学中的重要性不仅限于单个家庭的财务健康状况,它还与整个经济体的发展紧密相关。家庭资产的增长通常反映了国家经济的整体增长,而资产分布的不均则暴露了经济不平等的问题。通过对家庭资产的细致研究,可以揭示经济增长的实际受益者,并为制定更公平、更有效的经济政策提供实证基础。在全球化的今天,家庭资产分析对于理解不同国家之间经济互动也至关重要。随着跨国投资和全球贸易的增加,家庭资产的构成和增长路径越来越受到全球经济趋势的影响。因此,全球视角下的家庭资产分析可以揭示国际经济动态,有助于在全球范围内制定更有效的财富管理和经济政策。

二、具体案例分析

本文数据选取为美国财富网站家庭资产的数据集,其中特征为familynum、consump_total、income_total、debt,响应变量为asset。

首先读取数据集并且展示数据前五行:

df<- read.csv("data_clean.csv")
df

# 显示数据框的前几行
head(df)
str(df)

接下来查看数据字符类型:

观测值数量:数据框包含34,609个观测值。变量数量:共有5个变量,每个变量代表数据集中的一个特征。其中familynum:这是一个整数(int)类型的变量,代表家庭成员的数量。consump_total:是一个数值类型的变量,代表家庭的总消费。incfome_total:这是一个数值类型的变量,代表家庭的总收入。debt:这是一个整数(int)类型的变量,代表家庭的债务。asset:这是一个数值(num)类型的变量,代表家庭的资产。

接下来进行数据缺失值查看:

# 导入必要的库
library(randomForest)
library(pROC)
library(caret)
library(ggplot2)
library(dplyr)
library(tidyr)

##数据预处理
###数据预处理
# 创建一个指示缺失值的数据框
missing_df <- df %>% 
  mutate(row_id = row_number()) %>%  # 添加行索引
  pivot_longer(cols = -row_id, names_to = "variable", values_to = "value") %>%
  mutate(value = ifelse(is.na(value), "Missing", "Not Missing"))
# 绘制热图
ggplot(missing_df, aes(x = row_id, y = variable, fill = value)) +
  geom_tile() +
  scale_fill_manual(values = c("Missing" = "red", "Not Missing" = "gray")) +
  theme_minimal() +
  labs(x = "Row Number", y = "Variable", fill = "Status", title = "Heatmap of Missing Values")


# Checking for missing values
cat("Missing Values:\n")
print(sum(is.na(df)))

热图中的深色部分表明数据值“不缺失”(Not Missing),而如果存在缺失值,我们通常会看到标记为其他颜色(通常是红色或其他醒目颜色)的条带。从图中可以看出,这个数据集在所有五个变量中似乎没有显示任何缺失值。

接下来对部分数据可视化

options(scipen = 999)
hist_plots <- df %>%
  pivot_longer(cols = everything(), names_to = "variables", values_to = "values") %>%
  ggplot(aes(x = values, fill = variables)) +
  geom_histogram(bins = 30, color = "black") +
  facet_wrap(~variables, scales = 'free_x') +
  theme_minimal() +
  scale_fill_viridis_d()
print(hist_plots)


box_plots <- df %>%
  pivot_longer(cols = everything(), names_to = "variables", values_to = "values") %>%
  ggplot(aes(x = as.factor(variables), y = values)) +
  geom_boxplot() +
  facet_wrap(~variables, scales = 'free') +
  theme_minimal()
print(box_plots)


library(corrplot)
cor_mat <- cor(df)
corrplot(cor_mat, method = "color")

从热力图可知,家庭成员数与其他变量似乎没有显示出很强的相关性。总消费与总收入之间显示出一定的正相关性,这是合理的,因为通常收入水平较高的家庭可能会有更多的消费。总收入与资产之间似乎也有一定的正相关性,这表明收入水平较高的家庭可能会有更多的资产。债务与asset之间显示出负相关性,这可能表明债务水平较高的家庭资产较少,这种情况可能会因为负债而减少可用资产等等。

值得注意的是,相关系数热图只能提供变量间线性关系的强度和方向的信息,并不能表明因果关系。而且,如果数据中存在非线性关系,传统的相关系数可能无法充分捕捉这些关系。

接下来正式进入随机森林建模和预测,这里的训练集和测试集的划分比例为3:7。

# 数据分割
set.seed(42) # 为了可重复性设置随机种子
train_index <- sample(1:nrow(df), 0.7 * nrow(df))
train_data <- df[train_index, ]
test_data <- df[-train_index, ]

# 建立随机森林模型
rf_model <- randomForest(asset ~ ., data = train_data, ntree = 100)
rf_model

从上图可以看得,模型设置了100棵树,并且在每次分裂时尝试了1个变量。 模型中建立了100棵决策树。随机森林是通过结合多棵决策树的预测来提高整体预测准确性和鲁棒性的。平均平方残差约为2.517×10¹²。这是衡量模型拟合数据的一个指标,它计算了实际观察值和模型预测值之间差异的平方的平均值。数值越小,表明模型的拟合越好。模型解释了大约37.7%的目标变量的方差。

最后可视化一下特征重要性图,在特征中对比一下:

从该图可知,特征按重要性降序排列,具有以下特点:

income_total(总收入): 这个特征在模型中的重要性最高,表现为最长的黄色条形。这意味着总收入在预测家庭资产方面起着最关键的作用。consump_total(总消费): 紧随其后的是总消费,以较长的紫色条形表示。这表明消费也是一个影响家庭资产的重要因素。debt(债务): 债务的条形较短,以蓝色表示,这意味着它在模型中的重要性较低,但仍有一定的影响。familynum(家庭成员数): 家庭成员数的重要性最低,绿色条形最短。这表明在预测家庭资产时,家庭成员数对模型的贡献最小。

三、总结与展望

本次实验通过随机森林回归模型分析了影响家庭资产的几个关键变量,包括家庭成员数、总消费、总收入以及债务。通过对34,609个观测值进行建模,我们得到了一些初步的结论:

总收入对家庭资产的预测作出了最大的贡献,这表明收入水平是影响家庭资产积累的一个重要因素。总消费也是家庭资产预测的一个重要变量,但其影响力度低于总收入。债务与家庭资产之间存在一定的相关性,尽管其影响不如收入和消费那么显著。家庭成员数对家庭资产的影响相对较小,这可能暗示其他未考虑的因素在资产积累中发挥了作用。模型的性能指标显示了一定的预测能力,但也表明有提升空间。模型解释了大约37.7%的方差,而平均平方误差和平均绝对误差的数值指出预测精度还有待提高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值