【高级数理统计R语言学习】无序多分类分析
作者:互联网
一、背景
数据集展示了人们休闲的相关数据。试分析年龄、性别、教育程度、月收入对人们的休闲方式是否有显著影响以及有怎样的影响。
二、要求和代码
#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