R-统计分析的一些R包和函数

Python013

R-统计分析的一些R包和函数,第1张

横截面数据回归经典方法

quantreg 分位数回归

MASS  BOX-COX变换

survival 生存函数、COX比例危险回归模型

mfp  COX比例危险回归模型多重分数多项式

car 可以检查vif

ridge 岭回归

lars  lasso回归

msgps adaptive lasso

pls 偏最小二乘

横截面数据 回归机器学习 方法

rpart.plot 画回归树

mboost  boosting回归

ipred  bagging回归

randomForest 随机森林回归

e1071  or kernlab  SVR支持向量机回归

nnet+caret  or neuralnet 神经网络

横截面数据 分类 经典方法

glm( ) 广义线性模型

MASS 的 lda( ) or   mda 的 mda( ) or   fda 的 fda( ) 线性判别

横截面数据 分类机器学习 方法

rpart.plot 画分类树

adabag  adaboost分类、bagging分类

randomForest 随机森林分类

e1071  or kernlab  SVR支持向量机分类

kknn 最近邻分类

nnet 神经网络分类

横截面数据 计数或有序因变量

Possion 散布问题(方差不等于均值):

dglm 双广义线性模型(Tweedie分布)

MASS 的 glm.nb( ) (负二项分布)

pscl 的 zeroinfl( ) 零膨胀计数数据模型

rminer 支持向量机

mlogit 多项logit模型

MASS 的 loglm( )  or nnet 的 multinom( ) 多项分布对数线性模型

MASS 的 polr( )  or VGAM 的 vglm( ) 多项分布对数线性模型

纵向数据:多水平模型、面板数据

lme4 的 lmer( )  or nlme 的 lme( ) 线性随机效应混合模型

REEMtree 拟合固定效应部分的决策树

coxme  cox随机效应分析

JM 联合模型

plm 拟合面板数据

多元分析

factanal( ) 因子分析

cluster 分层聚类

ICGE  INCA指数

ggmap 画地图

NbClust 一系列聚类方法

CCA 典型相关分析

MASS 对应分析

以下为非经典多元数据分析

FactoMineR 主成分分析、对应分析(补充元素作为测试集);多重对应分析(可以包含数量变量和分类变量)、多重因子分析、分层多重因子分析、基于主成分分析的分层聚类

多元数据的关联规则分析

arules 关联规则分析

路径建模数据的PLS分析

plspm 的函数 plspm( ) 偏最小二乘

lavvan 加协方差关系

可以用assign函数对每一次循环得到的结果进行赋值

试试IPREDMED <- c (IPREDMED,quantile(b,0.50)) ?

保险起见循环开始前先IPREDED = NULL

缺失值的处理有3种:不处理(做建模铁定不选),删除(可以考虑),数据补差(99%的同僚选择)

而补差的方式主要用下面的5类,重点是第五个,插值法

1. 补插均值/中位数/众数

2. 使用固定值 .

3. 最近邻补插

4. 回归方法

5. 插值法

插值法又包含好多种:(1)拉格朗日插值法(最容易看的懂的,用的人较多,用错的也多)(2)牛顿插值法(3)Hermite插值 (4)分段插值 (5)样条插值 (后三种相对用的较少)

(1)拉格朗日插值法(划重点)

其原理百度就是构建一个多项式,这个多项式很厉害,假如说我们的数据是城市里的银行位置坐标,那这个多项式就是一条过所有银行的公路,所以,当我们要问50km外的银行在哪儿时,我们顺着这条路算就可以算出来。当然,算出来的坐标只是一个近似值。(当给出的已知银行坐标点越多,近似误差越小)。

关于拉格朗日多项式的构建原理,这里不说了,百度各种解释,这里只说一下它的优缺点:优点就是过程简单,很容易找到插值,而且还是唯一的。缺点也明显,就是当已知的点很多时候,阶数也会很高,所以不适合插那些百十来个数据点的题。处理十来个的还是很好的。(我个人建议还是用牛顿)

(2)牛顿插值法8

相比较与拉格朗日,其优点是当新增加插值点时,得到的拟合函数变化不大。其原理解释还是看百度或者找老师问吧,我的理解就是从第一个插值点开始修路,每修到一个银行就进行一次校正(高阶差商我的理解),然后这样的话插未知点就准一点。所以用的比较多吧也。

(x<-c(1,2,3,NA))

is.na(x) #返回一个逻辑向量,TRUE为缺失值,FALSE为非缺失值

table(is.na(x)) #统计分类个数

sum(x) #当向量存在缺失值的时候统计结果也是缺失值

sum(x,na.rm = TRUE) #很多函数里都有na.rm=TRUE参数,此参数可以在运算时移除缺失值

(x[which(is.na(x))]<-0) #可以用which()函数代替缺失值,which()函数返回符合条件的响应位置

(test<-data.frame(x=c(1,2,3,4,NA),y=c(6,7,NA,8,9)))

is.na(test) #test中空值的判断

which(is.na(test),arr.ind = T) #arr.ind=T可以返回缺失值的相应行列坐标

test[which(is.na(test),arr.ind = T)]<-0 #结合which进行缺失替代

(test_omit<-na.omit(data.frame(x=c(1,2,3,4,NA),y=c(6,7,NA,8,9)))) #na.omit函数可以直接删除值所在的行

str(airquality)

complete.cases(airquality) #判断个案是否有缺失值

airquality[complete.cases(airquality),] #列出没有缺失值的行

nrow(airquality[complete.cases(airquality),]) #计算没有缺失值的样本量

airquality[!complete.cases(airquality),] #列出有缺失的值的行

nrow(airquality[!complete.cases(airquality),]) #计算有缺失值的样本量

is.na(airquality$Ozone) #TRUE为缺失值,FALSE为非缺失值

table(is.na(airquality$Ozone))

complete.cases(airquality$Ozone) #FALSE为缺失值,TRUE为非缺失值

table(complete.cases(airquality$Ozone))

可用sum()和mean()函数来获取关于缺失数据的有用信息

sum(is.na(airquality$Ozone)) #查看缺失值的个数

sum(complete.cases(airquality$Ozone)) #查看没有缺失值的个数

mean(is.na(airquality$Ozone)) #查看缺失值的占比

mean(is.na(airquality)) #查看数据集airquality中样本有缺失值的占比

列表缺失值探索

library(mice)

md.pattern(airquality)

图形缺失值探索

library(VIM)

aggr(airquality,prop=FALSE,number=TRUE)

aggr(airquality,prop=TRUE,number=TRUE) #生成相同的图形,但用比例代替了计数

aggr(airquality,prop=FALSE,number=FALSE) #选项numbers = FALSE(默认)删去数值型标签

airquality[complete.cases(airquality),] #方法一:删除缺失值行

na.omit(airquality) #方法二:删除缺失值的行

newnhanes2<-nhanes2

sub<-which(is.na(newnhanes2[,4])) #返回newnhanes2数据集中第4列NA的行标识

datatr<-newnhanes2[-sub,] #方法一:将第4列不为NA的数存入数据集datatr中

datatr<-newnhanes2[complete.cases(newnhanes2[,4]),] #方法二:将第4列不为NA的数存入数据集datatr中

datate<-newnhanes2[sub,] #方法一:将第4列为NA的数存入数据集datate中

datate<-newnhanes2[is.na(newnhanes2[,4]),] #方法二:将第4列为NA的数存入数据集datate中

fit<-lm(chl~age,data = datatr) #利用datatr中age为自变量,chl为因变量构建线性回归模型lm

newnhanes2[sub,4]<-round(predict(fit,datate)) #利用datate中数据按照模型fit对nhanes2中chl中的缺失数据进行预测

library(missForest)

z<-missForest(airquality) #用随机森林迭代弥补缺失值

air.full<-z$ximp

zz<-missForest(nhanes2)

nhanes2.full<-zz$ximp

mice::md.pattern(airquality)

index1<-is.na(airquality$Ozone) #对Ozone变量进行缺失值处理

dput(colnames(airquality)) #求出变量列名称

Ozone_train<-airquality[!index1,c("Ozone", "Wind", "Temp", "Month", "Day")] #训练集,需注意什么时候用!,什么时候用-

Ozone_test<-airquality[index1,c("Ozone", "Wind", "Temp", "Month", "Day")] #测试集

fit<-lm(Ozone~.,data = Ozone_train) #建立线性回归模型

summary(fit)

airquality[index1,"Ozone"]<-predict(fit,newdata =Ozone_test )

index2<-is.na(airquality$Solar.R) #Solar.R变量进行缺失值处理,Ozone变量数据已补齐

Solar.R_train<-airquality[!index2,] #训练集

Solar.R_test<-airquality[index2,] #测试集

Solar.R_fit<-lm(Solar.R~.,data = Solar.R_train)

summary(Solar.R_fit)

airquality[index2,"Solar.R"]<-predict(Solar.R_fit,newdata = Solar.R_test)

mice::md.pattern(airquality)

举例:knn和bag缺失值插补(利用caret包中的preProcess函数,method参数有多种方式可选)

question<-read.csv("问卷调研数据.csv")

question<-question[,-1]

str(question)

for(i in 1:ncol(question)){

question[,i]<-as.factor(question[,i])

} #批量修改为因子类型

str(question)

question<-read.csv("问卷调研数据.csv")

question<-question[,-1]

mice::md.pattern(question) #列表缺失值探索

library(caret)

knn.model<-preProcess(question,method = "knnImpute") #KNN处理数值型数据(欧式距离),不能处理因子型数据

question1<-predict(knn.model,newdata = question)

install.packages("RANN")

mice::md.pattern(question1)

table(question1$性别) #不是之前的1和2了

table(question$性别)

最后结果:knn不适合处理该数据,需要做哑变量处理,再套模型

question<-read.csv("问卷调研数据.csv")

question<-question[,-1]

mice::md.pattern(question) #列表缺失值探索

library(caret)

bag.model<-preProcess(question,method = "bagImpute") #bag算法模型建立

install.packages("ipred")

question2<-predict(bag.model,question) #预测结果

mice::md.pattern(question2) #列表缺失值探索

table(question2$性别)

最后结果:bag算法不适合处理该数据