因变量与自变量之间的关系包括两种:自变量为数值类型和分类类型

请参考R项目客户回复预测与效益最大化

 

1、分别查看数据的属性为数值型和因子类型的属性

which(sapply(cup98, is.numeric))
> idx.num
 ODATEDW     DOB  CLUSTER      AGE NUMCHLD   INCOME  WEALTH1     HIT 
       1       6       10       11      17       18       20      21 
。。。
 
>which(sapply(cup98, is.factor))
  OSOURCE    STATE       ZIP  PVASTATE RECINHSE    MDMAUD    DOMAIN 
        2         3         4         5         7         8         9 
       64       65        67 
。。。

2、求数值/分类变量与因变量的相关性:

1)、查看因变量与其他数值型变量之间的相关系数:

> correlation <- cor(cup98$TARGET_D, cup98[, idx.num], use="pairwise.complete.obs")    use为对存在缺失值计算相关系数的方法,即使在数据中存在缺失值,相关系数的计算结果也不可能为NA

> correlation<-abs(correlation)
> correlation<- correlation[, order(correlation, decreasing=T)]
> correlation
    TARGET_D    TARGET_B     LASTGIFT     RAMNTALL      AVGGIFT 
1.00000000000.7742323755 0.0616784458 0.0448101061 0.0442990841 
    MAXRAMNT       INCOME     CLUSTER2     NUMPRM12      WEALTH1 
0.03922375090.0320627023 0.0290870830 0.0251337775 0.0248673117 
    MINRAMNT    LASTDATE      NUMPROM      CLUSTER     CARDPM12 
0.02015786860.0188471021 0.0173371740 0.0171274879 0.0163577542 
     NUMCHLD    CONTROLN     CARDPROM     FISTDATE      ODATEDW 
0.01492048990.0133664439 0.0113023931 0.0075324932 0.0069484311 
         HIT    CARDGIFT     NGIFTALL     MAXADATE      TIMELAG 
0.00664837280.0064498822 0.0048990126 0.0044963520 0.0036115917 
         DOB    HPHONE_D          AGE       RFA_2F 
0.00275414720.0024315898 0.0022823598 0.0009047682

 

查看任意两个数值型变量之间的相关系数,并绘制散布图:

> cor(cup98[,idx.num])
> pairs(cup98)

 

绘制数值变量的散布图,并基于目标变量设置点的颜色:

使用函数jitter()添加少量的噪声数据,在存在大量重叠时间点的情况这种设置很有用

> color <-ifelse(cup98$TARGET_D > 0, "blue", "black")
> pch <-ifelse(cup98$TARGET > 0, "+", ".")
>plot(jitter(cup98$AGE), jitter(cup98$HIT), pch=pch, col=color, cex=0.7,ylim=c(0, 70), xlab="AGE", ylab="HIT")
>legend("topleft", c("TARGET_D>0","TARGET_D=0"), col=c("blue", "black"),pch=c("+", "."))

 

2)、对于分类变量,使用卡方检验查看自变量与因变量之间的关系:

> myChisqTest<- function(x) {
+  t1 <- table(cup98pos[,x], cup98pos$TARGET_D2)
+  plot(t1, main=x, las=1)
+  print(x)
+  print(chisq.test(t1))
+ }
>myChisqTest("GENDER")
[1]"GENDER"
        Pearson's Chi-squared test
data:  t1
X-squared = NaN, df= 42, p-value = NA

卡方值越大,说明相关性越小

 

对所有的分类变量求与因变量的卡方值:

> idx.cat <-which(sapply(cup98pos, is.factor))
>sapply(names(idx.cat), myChisqTest)

 

3、数据集接 《3缺失值离群点处理》中2

变量分析

#1)单变量分析

#简单地看下部分变量的分布,比如对于age变量,如下图:

ggplot(traindata,aes(x = x2, y = ..density..)) + geom_histogram(fill = "blue", colour= "grey60", size = 0.2, alpha = 0.2) + geom_density()

 

#可以看到年龄变量大致呈正态分布,符合统计分析的假设。再比如月收入变量,也可以做图观察观察,如下:

ggplot(traindata,aes(x = x5, y = ..density..)) + geom_histogram(fill = "blue", colour= "grey60", size = 0.2, alpha = 0.2) + geom_density() + xlim(1,20000)

#月收入也大致呈正态分布,符合统计分析的需要。

 

#2)变量之间的相关性:建模之前首先得检验变量之间的相关性,如果变量之间相关性显著,会影响模型的预测效果。下面通过corrplot函数,画出各变量之间,包括响应变量与自变量的相关性。

cor1 <-cor(traindata[, 1:11])
library(corrplot)
corrplot(cor1)
corrplot(cor1,method="number")

#由上图可以看出,各变量之间的相关性是非常小的。其实Logistic回归同样需要检验多重共线性问题,不过此处由于各变量之间的相关性较小,可以初步判断不存在多重共线性问题,当然我们在建模后还可以用VIF(方差膨胀因子)来检验多重共线性问题。如果存在多重共线性,即有可能存在两个变量高度相关,需要降维或剔除处理。