Tableau+R連携で回帰分析をやってみる(単回帰分析)

投稿者:
  • 回帰分析とは例えば、気温が上がればアイスクリームの販売数が上がるというのは、経験上私たちが感じていることかと思いますが、気温とアイスクリームの販売数に何らかの計算式が成り立ち、気温によってアイスクリームの販売数が予測できたら便利ですよね。

    回帰分析とは説明変数(ここでは気温)をxとしたとき、目的変数(ここではアイスクリームの販売個数)の間に y=f(x) という関係が成り立つとして目的変数を説明する統計モデルをデータから求めたり、実際の目的変数を予測したりする分析方法です。

    例えば今年の夏は最高気温が36度だとして、その日のアイスクリーム販売量は他の日の単回帰分析気温とアイスクリーム販売数の関係から大体予測がつくということです。

    これでアイスクリームの品切れも防止できそうですね!

     

     

     

     

  • 線形単回帰分析をやってみようまずは簡単な線形単回帰分析です。単回帰分析は説明変数が1つということで、線形とは説明変数と目的変数の関係が一次方程式 y= a  + b x  で表せるということです。 

    ここでサンプルを見てみましょう。

    Rに付属のcarsサンプルを Rからテキストファイルに落とします。

    データセットcarsは車の速度とブレーキをかけた後、車が止まるまでの距離に関して50回の実験結果を記録しています。

     

    添付のデータ(cars)をダウンロードして、Tableauから接続→ テキストを選択し出力ファイルに接続します。

    早速、散布図を描いてみましょう

    Tableauのワークシートで 

    + speed (速度) を列にドラッグする

    + dist(停止するまでの距離)をドラッグする

    + id を詳細にドラッグする

    これで散布図がかけました。

次に傾向線を引いてみます。

ツールバーの 分析→傾向線→傾向線の表示 です。

傾向線が引けました。

 

傾向線にマウスを当てると傾向線の説明が現れます。

ここで、 dist = 3.93241 * speed -17.5791  とあらわされており distを目的変数y, speedを説明変数x として y = bx +a のモデルが作成されています。まさにこれが線形単回帰のモデルです。

X軸の編集で範囲を伸ばすと、speed 30 の時のdistを予測することができます。

傾向線から 3.93241 * 30 -17.5791 = 100.3932  となります。

 

 

  •  Rでもやってみましょう。

同じことをRでもやってみましょう。

 

Rから cars とRに付属するデータセットが表示されます。

 

plot(cars)で散布図が見れます。

Rには線形回帰分析の関数lmがあります。

y=a+bx のモデルを作成するためには lm (y~x,data=xxx) とします。

ここでは以下のように打ちます。carsデータから,speedを説明変数として線形単回帰モデルを作成します。

 

> cars.lm <- lm (dist~speed ,data=cars)

 

> summary(cars.lm)

Call:
lm(formula = dist ~ speed, data = cars)

Residuals:
Min      1Q  Median      3Q     Max
-29.069  -9.525  -2.272   9.215  43.201

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.5791     6.7584  -2.601   0.0123 *
speed         3.9324     0.4155   9.464 1.49e-12 ***

Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared:  0.6511,        Adjusted R-squared:  0.6438
F-statistic: 89.57 on 1 and 48 DF,  p-value: 1.49e-12

 

ここでsummaryの結果のCoefficientsを見ると、

切片:(Intercept) と傾き:speed の数値が傾向線の説明と一致していることが分かります。

 

Coefficients:
Estimate Std.

(Intercept) -17.5791
speed         3.9324

 

  •  Tableau からRコマンドの呼び出し

次はTableauからRのコマンドを呼び出し、傾向線を引いてみます。

 

+ 前準備としてdistとspeedのデータ型を整数(小数)に変更しておきます。

 

 

+ Rコンソール(Rstudio)からRserveを呼び出し、起動します。

 

> library (Rserve)
> Rserve()
Starting Rserve…
“C:\Users\TIWAHA~1\DOCUME~1\R\WIN-LI~1\3.3\Rserve\libs\x64\Rserve.exe”

 

 

+ Tableauのヘルプ→ 設定とパフォーマンス→外部サービス接続の管理 から

Rのポートを指定しておきます。(デフォルトは6311)

 

+ Tableauから”fit_lm_Dist~Speed” という名前で計算式を作成します。

 

中身は以下です。

 

SCRIPT_REAL(”

 

Dist <- .arg1;

Speed <- .arg2;

 

fit <- lm(Dist ~ Speed);

fit$fitted;

“,

SUM([dist]), SUM([speed]))

 

 

 

+ speedを列に、distを行に、idを詳細にドラッグします。

+ ”fit_lm_Dist~Speed”を行のdistの隣にドラッグします。

+ ”fit_lm_Dist~Speed”を右クリックし、次を使用して計算でidを選択します。

マークで”fit_lm_Dist~Speed”の表示形式を”線”にします。

+ 行の”fit_lm_Dist~Speed”を右クリックし、2重軸を選択します。

+ 右側のY軸をクリックし軸の同期を選択します。

+ 色から”メジャーネーム”を削除します。

 

以上で出来上がりです。

 

+ さらに一捻りして、残差によって個々のプロットに色を付けてみます。

残差をRで計算する計算フィールドを作成します。名前は”residuals_lm_Dist~Speed”

として、以下の計算式を入力します。

 

SCRIPT_REAL(”

 

Dist <- .arg1;

Speed <- .arg2;

 

fit <- lm(Dist ~ Speed);

fit$residuals;

“,

SUM([dist]), SUM([speed]))

 

+ ”residuals_lm_Dist~Speed” を色にドラッグし、右クリックで次を使用して計算→ id を選択します。

 

+ 以下のように残差によって散布図の各プロットに色付けがされます。

+ Tableau であれば、残差の大きいプロットにマウスを当てるとそのプロットid等の情報がツールチップに表示されるため、どのidがどれだけ予測から外れていたのか一発でわかるので大変便利です。

 

ワークブックのダウンロードはこちらから↓

単回帰分析

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です