1. 程式人生 > >R語言|資料預處理--4變數分析及相關性

R語言|資料預處理--4變數分析及相關性

因變數與自變數之間的關係包括兩種:自變數為數值型別和分類型別

請參考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(方差膨脹因子)來檢驗多重共線性問題。如果存在多重共線性,即有可能存在兩個變數高度相關,需要降維或剔除處理。