全文链接:http://tecdat.cn/?p=24141
在本文中,贝叶斯模型提供了变量选择技术,确保变量选择的可靠性。对社会经济因素如何影响收入和工资的研究为应用这些技术提供了充分的机会,同时也为从性别歧视到高等教育的好处等主题提供了洞察力(点击文末“阅读原文”获取完整代码数据)。
背景
下面,贝叶斯信息准则(BIC)和贝叶斯模型平均法被应用于构建一个简明的收入预测模型。
这些数据是从 935 名受访者的随机样本中收集的。该数据集是_计量经济学数据集_系列的一部分 。
相关视频
拓端
,赞30
加载包
数据将首先使用该dplyr
包进行探索 ,并使用该ggplot2
包进行可视化 。稍后,实现逐步贝叶斯线性回归和贝叶斯模型平均 (BMA)。
数据
数据集网页提供了以下变量描述表:
变量 | 描述 |
---|---|
wage | 每周收入(元) |
hours | 每周平均工作时间 |
IQ | 智商分数 |
kww | 对世界工作的了解得分 |
educ | 受教育年数 |
exper | 多年工作经验 |
tenure | 在现任雇主工作的年数 |
age | 年龄 |
married | =1 如果已婚 |
black | =1 如果是黑人 |
south | =1 如果住在南方 |
urban | =1 如果居住在都市 |
sibs | 兄弟姐妹的数量 |
brthord | 出生顺序 |
meduc | 母亲的教育(年) |
feduc | 父亲的教育(年) |
lwage | 工资自然对数 wage |
探索数据
与任何新数据集一样,一个好的起点是标准的探索性数据分析。汇总表是简单的第一步。
代码语言:javascript复制# 数据集中所有变量的汇总表--包括连续变量和分类变量
summary(wage)
编辑
编辑
因变量(工资)的直方图给出了合理预测应该是什么样子的。
代码语言:javascript复制#工资数据的简单柱状图
hst(wge$wae, breks = 30)
编辑
直方图还可用于大致了解哪些地方不太可能出现结果。
代码语言:javascript复制# 检查图表 "尾部 "的点的数量
sm(wage$ge < 300)
代码语言:javascript复制## [1] 6
代码语言:javascript复制sm(wae$wge > 2000)
代码语言:javascript复制## [1] 20
简单线性回归
由于周工资('wage')是该分析中的因变量,我们想探索其他变量作为预测变量的关系。我们在数据中看到的工资变化的一种可能的、简单的解释是更聪明的人赚更多的钱。下图显示了每周工资和 IQ 分数之间的散点图。
代码语言:javascript复制gplot(wae, es(iq, wge)) gom_oint() gom_smoth()
编辑
点击标题查阅往期内容
R语言和STAN,JAGS:用RSTAN,RJAG建立贝叶斯多元线性回归预测选举数据
左右滑动查看更多
01
02
03
04
IQ 分数和工资之间似乎存在轻微的正线性关系,但仅靠 IQ 并不能可靠地预测工资。尽管如此,这种关系可以通过拟合一个简单的线性回归来量化,它给出:
工资 i = α β⋅iqi ϵiwagei = α β⋅iqi ϵi
代码语言:javascript复制m_wg_iq = lm(wge ~ iq, dta = age)
coefients
编辑
工资 i = 116.99 8.3 ⋅iqi ϵiwagei = 116.99 8.3 ⋅iqi ϵi
在转向贝叶斯改进这个模型之前,请注意贝叶斯建模假设误差 (ϵi) 以恒定方差正态分布。通过检查模型的残差分布来检查该假设。如果残差高度非正态或偏斜,则违反假设并且任何后续推论都无效。要检查假设,请按如下方式绘制残差:
代码语言:javascript复制# 用散点图和模型误差残差的直方图来检查正态性假设
glot(dta = mwag_q, es(x = .ite, y = .rd))
gemittr()
编辑
代码语言:javascript复制plot(dta = m_g_iq, aes(x = .reid))
histgm(bnwth = 10)
变量变换
两个图都显示残差是右偏的。因此,IQ(因为它目前存在于数据集中)不应用作贝叶斯预测模型。但是,对 仅具有正值的偏斜_因_变量使用(自然)对数变换 通常可以解决问题。下面,该模型使用转换后的工资变量进行了重新拟合。
代码语言:javascript复制# 用IQ的自然对数拟合th模型
lm(lage ~ iq, data = wae)
编辑
代码语言:javascript复制# 残差sctterplot和转换后数据的柱状图
plt(data = m_lag_iq, es(x = .fited, y = .reid))
geiter()
编辑
代码语言:javascript复制ggpot(dta = m_lwgeiq, as(x = .resd))
gostgam(binwth = .1)
编辑
残差确实大致呈正态分布。然而,由此产生的 IQ 系数非常小(只有 0.0088),这是可以预料的,因为 IQ 分数提高 1 分几乎不会对工资产生太大影响。需要进一步细化。数据集包含更多信息。
多元线性回归和 BIC
我们可以首先在回归模型中包含所有潜在的解释变量,来粗略地尝试解释尽可能多的工资变化。
代码语言:javascript复制# 对数据集中的所有变量运行一个线性模型,使用'.'约定。
full = lm(lwge ~ . - wage, dta = wge)
编辑
完整线性模型的上述总结表明,自变量的许多系数在统计上并不显着(请参阅第 4 个数字列中的 p 值)。选择模型变量的一种方法是使用贝叶斯信息准则 (BIC)。BIC 是模型拟合的数值评估,它也会按样本大小的比例惩罚更多的参数。这是完整线性模型的 BIC:
代码语言:javascript复制BIC(full)
编辑
BIC 值越小表示拟合越好。因此,BIC 可以针对各种缩减模型进行计算,然后与完整模型 BIC 进行比较,以找到适合工资预测工作的最佳模型。当然,R 有一个功能可以系统地执行这些 BIC 调整。
代码语言:javascript复制# 用step计算模型
pIC(lwge ~ . - wge, dta = na.oi(wge))lg(lgth(na.mit(wge))))
编辑
代码语言:javascript复制# 显示逐步模型的BIC
BIC(se_mol)
编辑
调用 step找到产生最低 BIC 的变量组合,并提供它们的系数。很不错。
贝叶斯模型平均(BMA)
即使BIC处于最低值,我们能有多大把握确定所得到的模型是真正的 "最佳拟合"?答案很可能取决于基础数据的规模和稳定性。在这些不确定的时候,贝叶斯模型平均化(BMA)是有帮助的。BMA对多个模型进行平均化,获得系数的后验值和新数据的预测值。下面,BMA被应用于工资数据(排除NA值后)。
代码语言:javascript复制# 不包括NA
a_ona = na.omt(wae)
# 运行BMA,指定BIC作为判断结果模型的标准
BMA(wge ~ . -wge, daa= ae_o_a,
pror = "BIC",
moepor = ufom())
# 显示结果
summary
编辑
结果表显示了五个最有可能的模型,以及每个系数被包含在真实模型中的概率。我们看到,出生顺序和是否有兄弟姐妹是最不可能被包含的变量,而教育和智商变量则被锁定。BMA模型的排名也可以用图像图来显示,它清楚地显示哪些变量在所有模型中,哪些变量被排除在所有模型之外,以及那些介于两者之间的变量。
代码语言:javascript复制ge(b_lge, tp.oels)
编辑
我们还可以提供模型系数的95%置信区间。下面的结果支持了关于包括或排除系数的决定。例如,在区间包含零,有大量证据支持排除该变量。
代码语言:javascript复制confint(ceflae)
进行预测
构建模型后,pediction 只是插入数据的问题:
代码语言:javascript复制# 用一个虚构的工人的统计资料来预测数据的例子
# 进行预测
redict = pedct(e_odl, newdt = wrkr,eitr = "BMA")
# 将结果转换为元
exp(wk_pedct)
编辑
预计这名化妆工作人员的周薪为 745 元。这到底有多准确?你得问她,但我们对我们的变量选择很有信心,并对现有的数据尽了最大努力。应用的贝叶斯技术使我们对结果有信心。
编辑
本文摘选《R语言用贝叶斯线性回归、贝叶斯模型平均 (BMA)来预测工人工资》,点击“阅读原文”获取全文完整代码和数据资料。
编辑
点击标题查阅往期内容
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像
MATLAB随机森林优化贝叶斯预测分析汽车燃油经济性
R语言中贝叶斯网络(BN)、动态贝叶斯网络、线性模型分析错颌畸形数据
使用贝叶斯层次模型进行空间数据分析
MCMC的rstan贝叶斯回归模型和标准线性回归模型比较
python贝叶斯随机过程:马尔可夫链Markov-Chain,MC和Metropolis-Hastings,MH采样算法可视化
Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现
matlab贝叶斯隐马尔可夫hmm模型实现
贝叶斯线性回归和多元线性回归构建工资预测模型
Metropolis Hastings采样和贝叶斯泊松回归Poisson模型
贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析免疫球蛋白、前列腺癌数据
R语言RSTAN MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据
R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性
PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像
贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析免疫球蛋白、前列腺癌数据
R语言JAGS贝叶斯回归模型分析博士生延期毕业完成论文时间
R语言Metropolis Hastings采样和贝叶斯泊松回归Poisson模型
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户
R语言贝叶斯MCMC:用rstan建立线性回归模型分析汽车数据和可视化诊断
R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例
R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数
随机森林优化贝叶斯预测分析汽车燃油经济性
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数
R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归
Python贝叶斯回归分析住房负担能力数据集
R语言实现贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析
Python用PyMC3实现贝叶斯线性回归模型
R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型
R语言Gibbs抽样的贝叶斯简单线性回归仿真分析
R语言和STAN,JAGS:用RSTAN,RJAG建立贝叶斯多元线性回归预测选举数据
R语言基于copula的贝叶斯分层混合模型的诊断准确性研究
R语言贝叶斯线性回归和多元线性回归构建工资预测模型
R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例
R语言stan进行基于贝叶斯推断的回归模型
R语言中RStan贝叶斯层次模型分析示例
R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化
R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型
WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较
R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样
R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例
R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化
视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型
R语言MCMC:Metropolis-Hastings采样用于回归的贝叶斯估计