アクセスデータをRで解析〜ステップ関数を使う

GoogleAnalyticsのアクセスデータを重回帰分析していきます。
前回の反省をふまえ、今回は私の別ブログのアクセスデータをつかって解析していきます。

さっそくGAでアクセスデータを持ってきます。

GAのカスタムレポートで以下の設定をおこないます。

指標グループ
・ページビュー数
・訪問数
・訪問時の平均滞在時間
・直帰率
・離脱率
・オーガニック検索
・新規訪問数

ディメンション詳細
・月(年間)

フィルタ
・ページ
 正規表現:/

上記の設定をすることで、指標グループに設定した各指標を月別の総数で見ることができます。
タイトル行が日本語だとうまく読み込んでくれないで、指標グループを下記に修正します。

・ページビュー数 → PV
・訪問数 → Visitor
・訪問時の平均滞在時間 → VistorAVG
・直帰率 → BounceR
・離脱率 → PageExitR
・オーガニック検索 → Search
・新規訪問数 → Newer

修正したデータを変数dataに格納します。
読み込めたかチェック。

> data
Month_Year Visitor VistorAVG BounceR PageExitR Search Newer PV
1 201212 937 69.36499 0.8559232 0.6859444 753 711 1366
2 201302 941 58.45484 0.8405951 0.7101887 660 667 1325
3 201301 838 59.02029 0.8424821 0.7488829 656 637 1119
4 201211 554 54.89170 0.8592058 0.7318362 496 469 757
5 201304 526 60.07605 0.8307985 0.7013333 392 404 750
6 201303 475 45.19158 0.8715789 0.7410296 309 328 641
7 201207 145 26.00690 0.8827586 0.8146067 138 128 178

なんだか塩っぱいデータが出ていますが、置いておきます。

ここで、lm()関数を使って回帰分析。

> lm.set <- lm(PV~ Visitor+VistorAVG+BounceR+PageExitR+Search,data=data) ん? 「Newer」がないぞ。 これは、この変数が入るとなぜだかエラーを連発。 テキストデータになっていないか、であるとか色々調べましたが、この変数が入るとこの後出てくるSummary()関数やextractAIC()関数でもNAが出てしまい困りましたが、この変数を除くことで解決。未解決ですが、解決。そういうもんです。 気を取り直して、summaryを見ていきます。 > summary(lm.set)

Call:
lm(formula = PV ~ Visitor + VistorAVG + BounceR + PageExitR +
Search, data = data)

Residuals:
1 2 3 4 5 6 7
21.024 -5.540 -1.115 -27.773 9.529 -11.333 15.208

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2071.2923 2954.2535 0.701 0.611
Visitor 1.1441 0.3886 2.944 0.208
VistorAVG -6.9887 9.2550 -0.755 0.588
BounceR -154.9496 1888.6572 -0.082 0.948
PageExitR -2234.6320 1803.4416 -1.239 0.432
Search 0.4673 0.6667 0.701 0.611

Residual standard error: 41.18 on 1 degrees of freedom
Multiple R-squared: 0.9984, Adjusted R-squared: 0.9905
F-statistic: 126.4 on 5 and 1 DF, p-value: 0.06743

キタ!
重相関係数が0.9905!
かなり有意です。

続いて、AICを調査。

> extractAIC(lm.set)
[1] 6.00000 50.42994

さらに、AICを用いてモデル・変数を選択する便利関数 step()を使います。

> step.lm <- step(lm.set) Start: AIC=50.43 PV ~ Visitor + VistorAVG + BounceR + PageExitR + Search Df Sum of Sq RSS AIC - BounceR 1 11.4 1707.2 48.477 1695.8 50.430
- Search 1 833.0 2528.8 51.227
- VistorAVG 1 967.0 2662.8 51.588
- PageExitR 1 2603.6 4299.4 54.942
- Visitor 1 14700.1 16395.9 64.312

Step: AIC=48.48
PV ~ Visitor + VistorAVG + PageExitR + Search

Df Sum of Sq RSS AIC
1707.2 48.477
- Search 1 1224.7 2931.9 50.262
- VistorAVG 1 1644.5 3351.7 51.199
- PageExitR 1 3441.6 5148.8 54.204
- Visitor 1 23187.1 24894.3 65.235

先ほど、extractAIC()関数で出力されたAIC(50.42994)よりも、改善(48.477)したモデルが整いました。変数BounceRを除きます。

係数を出力します。

> round(coefficients(step.lm),2)
(Intercept) Visitor VistorAVG PageExitR Search
1856.53 1.16 -6.45 -2153.98 0.43

<回帰モデル>
PV = 1856.53 + 1.16*Visitor -6.45*VistorAVG -2153.98*PageExitR + 0.43*Search

<回帰診断図>
> par(mfrow=c(2,2))
> plot(step.lm)
スクリーンショット 2013-05-01 1.34.37

グラフの解説は、matsuou1の日記様Rで線形単回帰分析を参考にさせていただきました。

残差とフィット値のプロット(左上)
>横軸が予測値、縦軸が残差。
>残差の全体像を概観するために使用する。

残差の正規Q-Qプロット(右上)
>データの正規性考察するために使用する。
>データが正規分布に従っている場合は、直線上に並ぶ。

残差の平方根プロット(左下)
>残差の変動状況を考察するために使用する。
>標準化した残差の絶対値の平方根を縦軸にし、予測値を横軸にした散布図。

残差と影響力プロット(梃子値とクック距離)(右下)
>1つのデータがモデルの当てはまりへの影響力を測るために使用する。
>クックの距離が0.5を超えると影響力あり、1を超えると特異に大きい。
>横軸は梃子値で、縦軸は標準化した残差。点線でクックの距離0.5を示している。

Q-Qプロットの片端が外れてはいますが、概ね正規分布と言っても良いような数値が出ました。

今日はこの辺で。

Leave a Reply

%d人のブロガーが「いいね」をつけました。