Crime&Shock数据集分析展示探索性数据分析CommunitiesandCrimeUnnormalizedDataSet(Datasource)一、数据预处理#导入crime数据,修改变量名称,并查看数据属性crim=read.table("crim.txt",sep=",",na.string="?")name=read.table("attr_vol.txt")name=name[,2]colnames(crim)<-namesummary(crim)dim(crim)观测值:2215变量数:147部分数据严重缺失四、犯罪率分布情况在3月份的行业销售旺季,东北地区及北部地区销售额占到公司全月总额的70%,西部地区仅为10%,西部死去市场潜力还需深度挖掘。可看出violentPerPopnonViolPerPop都出现了不同程度的拖尾特征,考虑对数据进行对数变换由图可知四、对数化变换做变换后两变量数据较为对称由图可知四、犯罪率地区差异三个地区犯罪率的中位数由西向东递减,分布相对集中,但东部地区出现了较为明显的离群值缺失值处理nrow(crim[!complete.cases(crim),])##缺失值项的总行数#基本每行都有缺失值na.sta=c()for(iin1:2215){na.sta=c(na.sta,length(which(is.na(crim[i,]))))}max(na.sta)#缺失值基本在20左右,没有#缺失过于严重的样本,无需删除缺失值处理:临近值插补从数据集中选取若干条其他属性和它相似的样本(即和它在空间欧式距离最短的n条样本),求其中位数进行插补crim$gangUnit=as.factor(gangUnit)crim1=crim[,c(6:126,128:147)]library(cluster)##调用R语言中的cluster包#计算空间距离dist.mtx<-as.matrix(daisy(crim1,stand=T))##计算这2215个样品的空间距离缺失值处理:临近值插补#先处理非因子型变量的缺失值,需要将以下步骤进行两次for(rinwhich(!complete.cases(crim1)))crim1[r,which(is.na(crim1[r,]))]<-apply(data.frame(crim1[c(as.integer(names(sort(dist.mtx[r,])[2:20]))),which(is.na(crim1[r,]))]),2,median,na.rm=T)#再处理因子型变量的for(rin1:2215){if(is.na(gangUnit[r])){index=sort(dist.mtx[r,],index.return=T)$ixif(all(is.na(gangUnit[index[2:20]])))gangUnit[r]=gangUnit[intersect(index,which(is.na(gangUnit)==F))][1]else{gangUnit[r]=levels(gangUnit[index[2:11]])[which.max(table(gangUnit[index[2:11]]))]}}}crim2=data.frame(cbind(crim[,1:5],crim1[,1:126],gangUnit,crim1[,-(1:126)]))Crossvalidation#设置五折交叉验证n=2215;zz1=1:n#zz1为所有观测值(行)的下标zz2=rep(1:5,ceiling(n/5))[1:n]set.seed(200);zz2=sample(zz2,n)#zz2为1:5的随机排列zz2[1:100]#dd保存每一折下标,令testset选其中之一,则共可做五次交叉验证dd=list()for(iin1:5)dd[[i]]=zz1[zz2==i]ddModelbuilding——traditionalmethodsLinearRegressioncrim.test=crim1[dd[[1]],]crim.train=crim1[-dd[[1]],]lm.vio=lm(violentPerPop~.,data=crim.train[,c(6:129,146)])summary(lm.vio)#对因变量做对数变换lm.logvio=lm(log(violentPerPop)~.,data=crim.train[,c(6:129,146)])summary(lm.logvio)shapiro.test(lm.vio$residuals)shapiro.test(lm.logvio$residuals)LinearRegression结果显示对因变量做对数变换后并未使模型显著度明显增强。注:由于空间原因只显示未对数化处理模型的部分结果LinearRegression:anova注:由于空间原因只显示部分结果LinearRegression:anovaav=anova(lm.vio)#显示回归中系数不显著的前十个变量名称names(crim[,6:129])[sort(av[,5],decreasing=T,index.return=T)$ix[1:20]]注:红线标注的为两个模型中都非常不显著变量(pvalue>0.7)LinearRegressionfor(iin1:5){crim.test=data.frame(crim1[dd[[i]],])crim.train=data.frame(crim1[-dd[[i]],])lm.vio=lm(violentPerPop~.,data=crim.train[,c(6:129,146)])pre.train=predict(lm.vio)pre.test=predict(lm.vio,crim.test[,c(6:129,146)])NM.train=mean((crim.train$violentPerPop-pre.train)^2)/mean((mean(crim.train$violentPerPop)-crim.train$violentPerPop)^2)NM.test=mean((crim.test$violentPerPop-pre.test)^2)/mean((mean(crim.test$violentPerPop)-crim.test$violentPerPop)^2)M.train=mean((crim.train$violentPerPop-pre.t...