原创R语言Logistic逻辑回归算法案例数据分析报告.docx

上传人:b****5 文档编号:3204571 上传时间:2022-11-20 格式:DOCX 页数:8 大小:66.23KB
下载 相关 举报
原创R语言Logistic逻辑回归算法案例数据分析报告.docx_第1页
第1页 / 共8页
原创R语言Logistic逻辑回归算法案例数据分析报告.docx_第2页
第2页 / 共8页
原创R语言Logistic逻辑回归算法案例数据分析报告.docx_第3页
第3页 / 共8页
原创R语言Logistic逻辑回归算法案例数据分析报告.docx_第4页
第4页 / 共8页
原创R语言Logistic逻辑回归算法案例数据分析报告.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

原创R语言Logistic逻辑回归算法案例数据分析报告.docx

《原创R语言Logistic逻辑回归算法案例数据分析报告.docx》由会员分享,可在线阅读,更多相关《原创R语言Logistic逻辑回归算法案例数据分析报告.docx(8页珍藏版)》请在冰豆网上搜索。

原创R语言Logistic逻辑回归算法案例数据分析报告.docx

原创R语言Logistic逻辑回归算法案例数据分析报告

R语言Logistic逻辑回归算法案例

如果线性回归用于预测连续的Y变量,则逻辑回归用于二元分类。

如果我们使用线性回归来模拟二分变量(作为Y),则得到的模型可能不会将预测的Ys限制在0和1之内。

此外,线性回归的其他假设(例如误差的正态性)可能会被违反。

因此,我们建模事件ln的对数几率(P1-P.)升ñ(P1-P),其中,P是事件的概率。

上面的等式可以使用参数glm()设置来建模。

但是我们对事件的概率比事件的对数几率更感兴趣。

因此,上述模型的预测值,即事件的对数几率,可以转换为事件概率,如下所示:

family"binomial"

使用该plogis()函数实现此转换,如下所示,当我们构建logit模型并进行预测时。

示例问题

让我们尝试使用基于adult数据中可用的人口统计变量的逻辑回归来预测个人是否会获得超过50,000美元的收入。

在这个过程中,我们将:

1.导入数据

2.检查课堂偏见

3.创建培训和测试样本

4.计算信息值以找出重要变量

5.构建logit模型并预测测试数据

6.做模型诊断

导入数据

inputData<-read.csv("

head(inputData)

#=>AGEWORKCLASSFNLWGTEDUCATIONEDUCATIONNUMMARITALSTATUS

#=>139State-gov77516Bachelors13Never-married

#=>250Self-emp-not-inc83311Bachelors13Married-civ-spouse

#=>338Private215646HS-grad9Divorced

#=>453Private23472111th7Married-civ-spouse

#=>528Private338409Bachelors13Married-civ-spouse

#=>637Private284582Masters14Married-civ-spouse

#OCCUPATIONRELATIONSHIPRACESEXCAPITALGAINCAPITALLOSS

#=>1Adm-clericalNot-in-familyWhiteMale21740

#=>2Exec-managerialHusbandWhiteMale00

#=>3Handlers-cleanersNot-in-familyWhiteMale00

#=>4Handlers-cleanersHusbandBlackMale00

#=>5Prof-specialtyWifeBlackFemale00

#=>6Exec-managerialWifeWhiteFemale00

#HOURSPERWEEKNATIVECOUNTRYABOVE50K

#=>140United-States0

#=>213United-States0

#=>340United-States0

#=>440United-States0

#=>540Cuba0

#=>640United-States0

检查类偏差

理想情况下,Y变量中事件和非事件的比例应大致相同。

因此,让我们首先检查因变量中类的比例ABOVE50K。

table(inputData$ABOVE50K)

#01

#247207841

显然,存在阶级偏差,当事件的比例远小于非事件的比例时观察到的条件。

所以我们必须以大致相等的比例对观测结果进行采样,以获得更好的模型

创建培训和测试样本

解决类偏差问题的一种方法trainingData是以相等的比例绘制(开发样本)的0和1。

在这样做时,我们会将inputData未包含的其余部分用于培训testData(验证样本)。

因此,开发样本的大小将小于验证,这是可以的,因为有大量的观察结果(>10K)。

#CreateTrainingData

input_ones<-inputData[which(inputData$ABOVE50K==1),]#all1's

input_zeros<-inputData[which(inputData$ABOVE50K==0),]#all0's

set.seed(100)#forrepeatabilityofsamples

input_ones_training_rows<-sample(1:

nrow(input_ones),0.7*nrow(input_ones))#1'sfortraining

input_zeros_training_rows<-sample(1:

nrow(input_zeros),0.7*nrow(input_ones))#0'sfortraining.Pickasmany0'sas1's

training_ones<-input_ones[input_ones_training_rows,]

training_zeros<-input_zeros[input_zeros_training_rows,]

trainingData<-rbind(training_ones,training_zeros)#rowbindthe1'sand0's

#CreateTestData

test_ones<-input_ones[-input_ones_training_rows,]

test_zeros<-input_zeros[-input_zeros_training_rows,]

testData<-rbind(test_ones,test_zeros)#rowbindthe1'sand0's

接下来,需要找到变量的信息值,以了解它们在解释因变量(ABOVE50K)时的价值。

为分类变量创建WOE(可选)

或者,我们可以WOE为所有分类变量创建等价物。

这只是一个可选步骤,为简单起见,此步骤不适用于此分析。

for(factor_varinfactor_vars){

inputData[[factor_var]]<-WOE(X=inputData[,factor_var],Y=inputData$ABOVE50K)

}

head(inputData)

#>AGEWORKCLASSFNLWGTEDUCATIONEDUCATIONNUMMARITALSTATUSOCCUPATION

#>1390.1608547775160.797410413-1.8846680-0.713645

#>2500.2254209833110.7974104130.93483311.084280

#>338-0.1278453215646-0.52012579-1.0030638-1.555142

#>453-0.1278453234721-1.780502170.9348331-1.555142

#>528-0.12784533384090.7974104130.93483310.943671

#>637-0.12784532845821.3690863140.93483311.084280

#>RELATIONSHIPRACESEXCAPITALGAINCAPITALLOSSHOURSPERWEEK

#>1-1.0153180.080647150.32811872174040

#>20.9418010.080647150.32811870013

#>3-1.0153180.080647150.32811870040

#>40.941801-0.807946760.32811870040

#>51.048674-0.80794676-0.94801650040

#>61.0486740.08064715-0.94801650040

#>NATIVECOUNTRYABOVE50K

#>10.025383180

#>20.025383180

#>30.025383180

#>40.025383180

#>50.116715640

#>60.025383180

计算信息值

该smbinning:

:

smbinning函数使用递归分区将连续变量转换为分类变量。

我们将首先将它们转换为分类变量,然后捕获所有变量的信息值iv_df

library(smbinning)

#segregatecontinuousandfactorvariables

factor_vars<-c("WORKCLASS","EDUCATION","MARITALSTATUS","OCCUPATION","RELATIONSHIP","RACE","SEX","NATIVECOUNTRY")

continuous_vars<-c("AGE","FNLWGT","EDUCATIONNUM","HOURSPERWEEK","CAPITALGAIN","CAPITALLOSS")

iv_df<-data.frame(VARS=c(factor_vars,continuous_vars),IV=numeric(14))#initforIVresults

#computeIVforcategoricals

for(factor_varinfactor_vars){

smb<-smbinning.factor(trainingData,y="ABOVE50K",x=factor_var)#WOEtable

if(class(smb)!

="character"){#heckifsomeerroroccured

iv_df[iv_df$VARS==factor_var,"IV"]<-smb$iv

}

}

#computeIVforcontinuousvars

for(continuous_varincontinuous_vars){

smb<-smbinning(trainingData,y="ABOVE50K",x=continuous_var)#WOEtable

if(class(smb)!

="character"){#anyerrorwhilecalculatingscores.

iv_df[iv_df$VARS==continuous_var,"IV"]<-smb$iv

}

}

iv_df<-iv_df[order(-iv_df$IV),]#sort

iv_df

#>VARSIV

#>RELATIONSHIP1.5739

#>MARITALSTATUS1.3356

#>AGE1.1748

#>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1