ロジスティック解析を使ったデータ分析の方法

### 概要
Wantedlyの場合、トライアルとビジネスのプランがあり、トライアルの企業が満足するとビジネス(有料)のプランを使ってもらってます
トライアルの企業が満足したかどうかは、アップグレードしたかどうかで判断することができ、アップグレードするためにはどのようなことをすればアップグレードするのか、どの数字が影響しているか調べています
例えば、応募数が多い、ソーシャルへの拡散が多い、電話でのサポートをしている、社員を登録しているなど、いろいろな数字があります
それぞれの数字がどのくらいアップグレードすることに対して影響があるか、判断する方法のひとつとして、ロジスティク解析を使った判断方法を紹介します

### ロジスティック回帰とはなにか
いくつかのパラメータと、結果が0か1になるものになります
そのときに、それぞれのパラメータの何が結果にどのように影響を与えているか調べることができます
例えばパラメータが3つ(x, y, z)で、結果(result 0 1)がのときは、``log(p/(1-p)) = a0 + a1 * X1 + a2 * X2 + a3 * X3``になる

インプットするデータ(パラメータと結果)

```
[3, 1, 40, ...] => 0
[1, 4, 30, ...] => 1
[3, 4, 20, ...] => 0
```
アウトプットされるデータは先ほどの数式のa0, a1, a2, a3が分かる

### 準備
```
install.packages("aod")
```

### データのインポートとどのようなデータか確認する方法
* 今回分析のために、実際のデータでなく、適当なデータを作ってテストしています。

```
> 
> data <- read.table("input.txt") # space区切りの場合
> data <- read.csv("input.txt") # csv区切りの場合
> data <- read.csv("http://www.xxxx.com") # urlでもよい
> data <- read.table("input", header=T) # 1行目に列名がある場合は、headerのオプションをつける
> data <- read.table("input", skip=1) # 1行目をスキップする場合は、skipオプションをつける

> head(data) # 最初のデータを見る
  V1 V2 V3 V4
1  0  1  9  6
2  1  6 28 64
3  0  2  7  8
4  0  1  3  2
5  0  1  8  5
6  0  2  7  1

> summary(data) # データがどのような分布か確認できる
       V1               V2              V3               V4
 Min.   :0.0000   Min.   : 1.00   Min.   : 0.000   Min.   : 0.000
 1st Qu.:0.0000   1st Qu.: 1.00   1st Qu.: 1.000   1st Qu.: 0.000
 Median :0.0000   Median : 1.00   Median : 2.000   Median : 3.000
 Mean   :0.1651   Mean   : 1.42   Mean   : 6.712   Mean   : 8.736
 3rd Qu.:0.0000   3rd Qu.: 1.00   3rd Qu.: 8.250   3rd Qu.: 8.250
 Max.   :1.0000   Max.   :11.00   Max.   :60.000   Max.   :82.000

> sapply(data, sd) # それぞれの項目の標準偏差
        V1         V2         V3         V4
 0.3721444  1.0522753 10.5828817 14.4089242
```

### ロジスティック解析
```
> mylogit <- glm(V1 ~ V2 + V3 + V4, data = mydata, family = "binomial")
> summary(mylogit)

Call:
glm(formula = V1 ~ V2 + V3 + V4, family = "binomial", data = mydata)

Deviance Residuals:
    Min       1Q   Median       3Q      Max
-2.1410  -0.3622  -0.2913  -0.2613   2.5080

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.40434    0.46586  -7.308 2.72e-13 ***
V2           0.04438    0.23737   0.187 0.851679
V3           0.12144    0.03290   3.692 0.000223 ***
V4           0.04583    0.01924   2.382 0.017212 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 189.96  on 211  degrees of freedom
Residual deviance: 113.82  on 208  degrees of freedom
AIC: 121.82

Number of Fisher Scoring iterations: 5

```
* 今回の数字の場合だとV2はp値も高く、パラメータの意味はもっとも低い
* V3とV4ではV3のほうが3倍くらい影響が大きい

### さらに
``e^(a0 + a1 * X1 + a2 * X2 ..)``と式を変換するとよりオッズ比(p/(1-p))が分かりやすい

```
> exp(coef(mylogit))
(Intercept)          V2          V3          V4
  0.0332289   1.0453831   1.1291271   1.0468976
```

epiDisplayのパッケージを使うと、Wald型の信頼区間などさまざまな検定結果のデータを出力してくれる

```
> require("epiDisplay")
> logistic.display(mylogit)

Logistic regression predicting V1

                crude OR(95%CI)   adj. OR(95%CI)    P(Wald's test) P(LR-test)
V2 (cont. var.) 2.14 (1.43,3.19)  1.05 (0.66,1.66)  0.852          0.849

V3 (cont. var.) 1.18 (1.12,1.25)  1.13 (1.06,1.2)   < 0.001        < 0.001

V4 (cont. var.) 1.1 (1.07,1.14)   1.05 (1.01,1.09)  0.017          0.015

Log-likelihood = -56.9092
No. of observations = 212
AIC value = 121.8185
```

### 参考
* [UCLA] R Data Analysis Examples: Logit Regression http://www.ats.ucla.edu/stat/r/dae/logit.htm