原创R语言高级回归模型算法案例数据分析报告论文附代码数据Word格式.docx
《原创R语言高级回归模型算法案例数据分析报告论文附代码数据Word格式.docx》由会员分享,可在线阅读,更多相关《原创R语言高级回归模型算法案例数据分析报告论文附代码数据Word格式.docx(36页珍藏版)》请在冰点文库上搜索。
-0.1278
0.1289
-0.9922
Residualstandarderror:
2.441on17degreesoffreedom
比较性能rlm()与lm()
让我们构建等效lm()模型,以便我们可以将错误与相应的拟合值进行比较。
lm_mod<
-lm(stack.loss~.,stackloss) #lmregmodel
计算错误
mae mse rmse mape
#Errorsfromlm()modelDMwR:
:
regr.eval(stackloss$stack.loss,lm_mod$fitted.values)
2.36662028.51571252.91816940.1458878
#Errorsfromrlm()modelDMwR:
regr.eval(stackloss$stack.loss,rlm_mod$fitted.values)
2.19522329.07352833.01222980.1317191
正如预期的那样,稳健回归模型的误差小于线性回归模型。
概率回归
Probit回归可以用来解决二元分类问题,就像逻辑回归一样。
虽然逻辑回归使用累积逻辑函数,但是概率回归使用正态累积密度函数用于估计模型。
指定概率模型类似于逻辑回归,即使用glm()函数但family参数设置为
binomial(link="
probit"
)。
示例问题
让我们使用逻辑回归中的相同示例,并尝试预测一个人是否会赚取超过50,000美元。
因此,在运行构建概率模型的下面的代码之前,您必须按照逻辑回归的步骤导入并准备培训和测试数据。
probitMod<
-glm(ABOVE50K~RELATIONSHIP+AGE+CAPITALGAIN+OCCUPATION+
EDUCATIONNUM,data=trainingData,family=binomial(link="
)) #buildthelogitmodel
predicted<
-predict(probitMod,testData,type="
response"
) #predicttheprobabilityscores
summary(probitMod) #modelsummary#>
EDUCATIONNUM,family=binomial(link="
),data=trainingData)
glm(formula=ABOVE50K~RELATIONSHIP+AGE+CAPITALGAIN+OCCUPATION+
DevianceResiduals:
-4.5104 -0.5506 -0.0005 0.6515 3.6745#>
Estimate
zvalue
Pr(>
|z|)
-2.590e+00
1.401e-01
-18.492
<
2e-16
***
RELATIONSHIPNot-in-family -1.330e+00 4.039e-02-32.929 <
2e-16***
RELATIONSHIPOther-relative
-1.565e+00
1.406e-01
-11.135
2e-16
RELATIONSHIPOwn-child
-1.986e+00
8.785e-02
-22.611
RELATIONSHIPUnmarried
-1.466e+00
6.308e-02
-23.241
RELATIONSHIPWife
1.758e-01
6.387e-02
2.753
0.005910
**
AGE
1.523e-02
1.358e-03
11.214
CAPITALGAIN
1.744e-04
9.158e-06
19.045
OCCUPATIONAdm-clerical
4.955e-01
9.583e-02
5.170
2.34e-07
OCCUPATIONArmed-Forces
7.364e-01
1.034e+00
0.712
0.476343
OCCUPATIONCraft-repair
7.247e-01
9.246e-02
7.838
4.59e-15
OCCUPATIONExec-managerial
1.141e+00
9.117e-02
12.520
OCCUPATIONFarming-fishing
7.620e-02
1.237e-01
0.616
0.537808
OCCUPATIONHandlers-cleaners 3.048e-01 1.295e-01 2.3530.018599*
OCCUPATION
Machine-op-inspct
4.044e-01
1.060e-01
3.816
0.000136***
Other-service
8.727e-02
1.098e-01
0.795
0.426548
Prof-specialty
9.801e-01
9.354e-02
10.477
Protective-serv
8.934e-01
1.271e-01
7.031
2.06e-12
Sales
8.024e-01
9.325e-02
8.605
Tech-support
9.705e-01
1.157e-01
8.387
OCCUPATIONPriv-house-serv -1.605e+00 1.245e+00 -1.2890.197400
EDUCATIONNUM 1.575e-01 7.696e-03 20.464 <
OCCUPATIONTransport-moving 6.133e-01 1.054e-01 5.8215.86e-09***
---
Signif.codes:
0'
***'
0.001'
**'
0.01'
*'
0.05'
.'
0.1'
'
1#>
Nulldeviance:
15216.0 on10975 degreesoffreedom
(Dispersionparameterforbinomialfamilytakentobe1)#>
Residualdeviance:
8753.6 on10953 degreesoffreedom#>
AIC:
8799.6
NumberofFisherScoringiterations:
8
几乎所有的X小号有P值小于0.05。
所以预测因子的重要性应该在这里引起关注。
可以忽略几个OCCUPATION不重要的类别级别,因为大多数其他级别具有可接受的p值。
模型诊断
概率模型的模型诊断与逻辑回归的情况相同。
确定最佳截止
library(InformationValue)
optCutOff<
-optimalCutoff(testData$ABOVE50K,predicted_scores)[1]#=>
[1]0.88
ROC曲线
plotROC(testData$ABOVE50K,predicted_scores)
ROC曲线下的面积略高于logit模型的面积。
因此,这可能是首选的模型。
和谐
Concordance(testData$ABOVE50K,predicted)#>
$Concordance
[1]0.891276
一致性与logit模型的数据类似。
错误分类错误
misClassError(testData$ABOVE50K,predicted_scores,threshold=optCutOff)#=>
0.0894
错误分类错误略高于logit模型。
特异性和敏感性
sensitivity(testData$ABOVE50K,predicted_scores,threshold=optCutOff)#>
0.359541
specificity(testData$ABOVE50K,predicted_scores,threshold=optCutOff)#>
0.9780574
检测事件的能力(即收入超过50美元的人)比具有相同公式的logit模型高5%。
但与
logit相比,相当高的特异性略低。
混乱矩阵
0 1
confusionMatrix(testData$ABOVE50K,predicted_scores,threshold=optCutOff)#Thecolumnsareactuals,whilerowsarepredicteds.
0188101507
1 422 846
多项回归
多项回归与逻辑回归非常相似,但当响应变量是具有多于2个级别的名义分类变量时适用。
介绍
多项Logistic回归可以实现mlogit()从mlogit包,multinom()从nnet包。
我们将使用后者作为这个例子。
示例:
预测避孕方法的选择
在这个例子中,我们将尝试预测女性首选避孕药的选择(1=不使用,2=长期,3=短期)
。
我们将教育,工作,宗教,儿童人数,媒体曝光率和生活水平作为cmc数据中可用的变量。
在这个例子中,我们将避孕方法的选择建模cmc为所有这些变量的函数。
导入数据
cmcData<
-read.csv("
http:
//archive.ics.uci.edu/ml/machine-learning-databases/cmc/cmc.data"
stringsAsFactors=FALSE,header=F)colnames(cmcData)<
-c("
wife_age"
"
wife_edu"
hus_edu"
num_child"
wife_rel"
wife_work"
hus_occu"
sil"
media_exp"
cmc"
)head(cmcData)
1
24
2
3
1
0 1
2
45
10
4
3
43
7
wife_agewife_eduhus_edunum_childwife_relwife_workhus_occusilmedia_expcmc
4
42
9
5
36
8
6
19
将数字转换为因子
cmcData$wife_edu<
-factor(cmcData$wife_edu,levels=sort(unique(cmcData$wife_edu)))cmcData$hus_edu<
-factor(cmcData$hus_edu,levels=sort(unique(cmcData$hus_edu)))cmcData$wife_rel<
-factor(cmcData$wife_rel,levels=sort(unique(cmcData$wife_rel)))cmcData$wife_work<
-factor(cmcData$wife_work,levels=sort(unique(cmcData$wife_work)))cmcData$hus_occu<
-factor(cmcData$hus_occu,levels=sort(unique(cmcData$hus_occu)))
cmcData$sil<
-factor(cmcData$sil,levels=sort(unique(cmcData$sil)))cmcData$media_exp<
-factor(cmcData$media_exp,levels=sort(unique(cmcData$media_exp)))
cmcData$cmc<
-factor(cmcData$cmc,levels=sort(unique(cmcData$cmc)))
创建培训和测试数据
#PrepareTrainingandTestData
set.seed(100)
trainingRows<
-sample(1:
nrow(cmcData),0.7*nrow(cmcData))training<
-cmcData[trainingRows,]
test<
-cmcData[-trainingRows,]
建立多项模型
library(nnet)
multinomModel<
-multinom(cmc~.,data=training)#multinomModel
summary(multinomModel)#modelsummary
multinom(formula=cmc~.,data=training)#>
(Intercept) wife_age wife_edu2wife_edu3wife_edu4 hus_edu2
hus_edu3
2 -1.5937363-0.043606441.078715672.0445226 2.835641-1.407238-
1.268765
3 0.4376064-0.109238320.030952920.4308403 0.979347 1.073331
hus_edu4num_child wife_rel1wife_work1 hus_occu2 hus_occu3
1.150374
hus_occu4
2-1.31026610.3060657-0.4455628 0.1165996-0.4943500-0.40723995
1.2664442
3 0.86070950.3376620-0.2072181 0.3427517-0.1950799 0.04609764
sil2 sil3 sil4media_exp1
0.5596847
20.814453611.26558421.3311827-0.2440084
30.036576880.31551160.5562075-0.9285685
Std.Errors:
(Intercept) wife_agewife_edu2wife_edu3wife_edu4 hus_edu2 hus_edu3#>
2 0.99643780.014850640.55208320.56499660.58345940.62704680.5823429
hus_edu4 num_childwife_rel1wife_work1hus_occu2hus_occu3hus_occu4
3 0.92251930.014000970.31817590.33684720.36290880.68856760.6837955
20.58861780.050944300.2391401 0.20014340.24739450.24444050.6986301
30.69156290.045956590.2373718 0.18145540.23027290.22261370.6189151
20.54620330.52294960.5268553 0.4951397
30.31063830.29070370.2943716 0.3819526#>
ResidualDeviance:
1930.658#>
2002.658
预测测试数据
6
0.2699230
0.18691129
0.54316572
predicted_scores<
-predict(multinomModel,test,"
probs"
)#predictonnewdata
9 0.36264760.085238140.55211422
10 0.75649120.194090050.04941879
12 0.76804390.058513520.17344257
14 0.89618080.047476380.05634281
17 0.66773570.236838000.09542632#>
.
14640.55235150.028519880.4191287
14710.18163400.410554670.4078114
14720.53698370.168642370.2943739
predicted_class<
-predict(multinomModel,test)#>
[1]331111
Levels:
123
混淆矩阵和误分类错误
112
26
58
37
21
55
39
75
table(predicted_class,test$cmc)#>
predicted_class 1 2 3
mean(as.character(predicted_class)!
=as.character(test$cmc))#=>
0.4932127
错误分类错误49.3%可能太高了。
也许可以通过改进模型术语来改进,或者可能是变量在解释所使用的避孕方法方面不太好。
无论哪种方式,我都会鼓励调查员尝试其他ML方法以解决这个问题。
有序逻辑回归可用于模拟有序因子响应。
包中的polr()函数MASS可用于构建比例赔率逻辑回归并预测多类有序变量的类。
下面描述一种这样的用例。
预测汽车评估
以下是我们如何使用有序逻辑回归来预测基于汽车评估数据集的汽车评估的示例。
这些汽车被评价为下列内容之一verygood,good,acceptable或unacceptable。
可用于预测此决策的汽车属性为:
1.购买:
v-high,high,med,low
2.maint:
3.门:
2,3,4,5多个
4.人:
2,4,更多
5.lug_boot:
小,中,大
6.安全:
低,中,高
此外,值得注意的是,大约70%的汽车被评估为不可接受。
有序多类Y的类分布如下:
类 ñ
N[%]
unacc 1210 (70.023%)
ACC 384 (22.222%)
好 69 (3.993%)
V-好 65 (3.762%)
通过首先导入数据并将正确的顺序分配给因子变量,让我们成为建模过程。
carsd