ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【高级数理统计R语言学习】无序多分类分析

2021-02-09 23:33:23  阅读:330  来源: 互联网

标签:休闲 读取数据 16 Age 分类 无序 a1 数理统计 data9


一、背景
数据集展示了人们休闲的相关数据。试分析年龄、性别、教育程度、月收入对人们的休闲方式是否有显著影响以及有怎样的影响。

二、要求和代码

#1
#利用R读取数据
data9 <- read.csv(file="E:/hxpRlanguage/homework9.csv",header=TRUE,sep=",",stringsAsFactors = F,na.strings=c("","NA"))

#2
#显示数据的前10条记录
data9[1:10,]

#3
#对变量重新命名,一律用英文字母命名变量
cnames <- c("number","bornyear","gender","education","outyear",
"nowincome","status","leisure")
colnames(data9)<-cnames

#4
#显示数据框中每个变量的属性
str(data9)

#5
#离散变量leisure,status,sex,education分类编码过程
#①对休闲方式进行编码
for (i in 1:nrow(data9)){
  a1 <- data9$leisure[i]
  b1 <- switch(as.character(a1),
         "D.看休闲类书籍"=1, "E.上公园"=1, "F. 爬山郊游"=1, "G. 跳舞唱歌"=1, "T. 逛街"=1, "U. 旅行"=1,
         "L. 健身房锻炼"=2, "M. 体育锻炼"=2,
         "C. 看报纸杂志"=3, "H. 学习"=3, "I. 看专业书籍"=3, "J. 在业余学校学习"=3, "K. 上网学习"=3,
         "B. 看电影"=4, "N. 看电视"=4, "O. 打牌"=4, "P. 搓麻将"=4, "Q.打网络游戏"=4, "R. 亲友聚会"=4, "S.聊天"=4
  )
  data9$Leisure[i] <- b1
}
#②对再迁移状况进行编码
data9$Status[data9$status=="A. 北京" ] <- 0
data9$Status[data9$status=="B. 北京以外的地区" ] <- 1
#③对性别进行编码
data9$Gender[data9$gender=="B. 女" ] <- 0
data9$Gender[data9$gender=="A. 男" ] <- 1
#④对教育程度进行编码
data9$Education[data9$education=="A. 小学" | data9$education=="B. 初中" | data9$education=="C. 高中" | data9$education=="D. 中专"] <- "1"
data9$Education[data9$education=="E. 大专" | data9$education=="F. 大学本科"] <- "2"
data9$Education[data9$education=="G. 硕士" | data9$education=="H. 博士"] <- "3"

#6
#转换为因子变量
data9$fGender <- as.factor(data9$Gender)
data9$fStatus <- as.factor(data9$Status)
data9$fEducation <- as.factor(data9$Education)
data9$fLeisure <- as.factor(data9$Leisure)

#7
#对年龄和月收入进行处理
#数据调查时间是2017年;个体的年龄应该大于等于16岁小于等于65岁;个体的月收入不能低于500元
#①年龄age的处理
data9$Age <- 2017-(data9$bornyear)
d1 <- which(data9$Age>=16 & data9$Age<=65)
data9 <- data9[d1,]
#②删除收入小于500的个体,再将收入转换为对数收入
data9 <- data9[-c(which(data9$nowincome<500)),]
data9$logIncome <- log(data9$nowincome)

#8
#显示前10条数据记录
data9[1:10,]

#9
#画出描述类人们休闲方式的扇形图
tab <- table(data9$fLeisure)
pct <- paste(round(100*tab/sum(tab), 2), "%")
pie(tab,labels = pct,col = rainbow(length(tab)),main="外来人口各类休闲方式所占比例")
legend("topright",c("放松型","健身型","学习型","娱乐型"),cex=1,fill=rainbow(length(tab)))


#*************************************变量关系问题****************************

#1
#安装和载入神经网络包nnet,使用无序回归模型需要用到这个包
#install.packages("nnet")
library(nnet)

#2
#利用无序多类别logistic模型拟合检验集休闲方式和自变量的关系
glm0 <- multinom(fLeisure~1, data=data9)
glm1 <- multinom(fLeisure~Age+logIncome+fGender+fEducation, data=data9)

#3
#对模型glm1进行方差分析
anova(glm0,glm1)

#4
#显示参数估计情况
summary(glm1)

#5
#计算变量的显著性水平
train <- summary(glm1)
z = train$coefficients/train$standard.errors
p = (1-pnorm(abs(z),0,1))*2
p

#**********************************预测问题*********************************
#0
#分别以“健身型”和“学习型”休闲方式为参照组,预测人们休闲方式的类型,计算出预测正确率。
#健身型=2,学习型=3

#1
#将数据集data9分为训练集和预测集两部分,随机抽取100条记录作为预测集
sub1 <- sample(nrow(data9),100,replace=F) 
data9p <- data9[sub1,]  #预测集
data9m <- data9[-sub1,] #训练集

#2
#利用无序多类别logistic模型训练数据
glm2 <- multinom(fLeisure~Age+logIncome+fGender+fEducation, data=data9m)

#3
#根据AIC和BIC搜索最优的logistic模型
logistic.aic2 <- step(glm2,trace=0)
summary(logistic.aic2)
logistic.bic2 <- step(glm2,k=log(nrow(data9m)),trace=0)
summary(logistic.bic2)

#4
#利用AIC标准的logistic模型对预测集进行预测
data9p$fLeisure.pred2 <- predict(logistic.aic2,data9p)
table(data9p$fLeisure,data9p$fLeisure.pred2,deparse.level=2) #deparse.level=2表示显示维度维度参数

#5
#选择fLeisure=2的类别作为参照组进行模型拟合
data9m$fLeisure.ref2 <- relevel(data9m$fLeisure,ref="2") #选择参照组
glm3 <- multinom(fLeisure.ref2~Age+logIncome+fGender+fEducation,data=data9m)

#6
#根据AIC和BIC搜索最优的logistic模型
logistic.aic3 <- step(glm3,trace=0)
summary(logistic.aic3)
logistic.bic3 <- step(glm3,k=log(nrow(data9m)),trace=0)
summary(logistic.bic3)

#7
#利用AIC标准的logistic模型对预测及进行预测
data9p$fLeisure.pred3 <- predict(logistic.aic3,data9p)
table(data9p$fLeisure,data9p$fLeisure.pred3,deparse.level=2)

#8
#选择fLeisure=3的类别作为参照组进行模型拟合
data9m$fLeisure.ref3 <- relevel(data9m$fLeisure,ref="3") #选择参照组
glm4 <- multinom(fLeisure.ref3~Age+logIncome+fGender+fEducation,data=data9m)

#9
#根据AIC和BIC搜索最优的logistic模型
logistic.aic4 <- step(glm4,trace=0)
summary(logistic.aic4)
logistic.bic4 <- step(glm4,k=log(nrow(data9m)),trace=0)
summary(logistic.bic4)

#10
#利用AIC标准的logistic模型对预测及进行预测
data9p$fLeisure.pred4 <- predict(logistic.aic4,data9p)
table(data9p$fLeisure,data9p$fLeisure.pred4,deparse.level=2)

标签:休闲,读取数据,16,Age,分类,无序,a1,数理统计,data9
来源: https://blog.csdn.net/pamelaaaaa/article/details/113777109

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有