Code
- 1
- 前の作業など,rのメモリに入っているものをリセットするコマンド
- 2
-
パッケージ管理用のパッケージである
pacman
が入っていない場合はインストール - 3
- 複数のパッケージを一度に呼び出す
2024/05/20
アイスクリーム店の日別データです。客数(kyaku
)や気温(kion
),天気(tenki
),週末かどうか(weekend
, 週末の時1,平日の時0をとるカテゴリ変数)が含まれています。
ice <- read_csv("data/6_ice.csv")
ice <- ice |>
1 mutate(weekend = as.factor(weekend))
二つの変数,例えば気温とアイスクリーム屋さんの客数との関係を知りたい場合,最も単純な図示の方法は,x軸を気温,y軸を客数として,日毎や時間毎のデータを書き込んでいくこと。これを散布図と言います。
散布図を書いています。散布図を書く一番簡単なコマンドはplot(x軸にしたい変数, y軸にしたい変数)
です。
ggplot2
というパッケージ(tidyverseの中に入っている)を使うと高度にカスタマイズしたグラフが書けます。
ここで,散布図から視覚的にわかることとして,右肩上がりだと正の関係(片方が高いともう片方も高い),右肩下がりだと負の関係,バラバラに散らばっていると関係がなさそう,ということ。
左は正の関係(xが増えるとyも増える),真ん中は関係なし(xとyに特段の関係が見て取れない),右は負の関係(xが増えるとyが減る)
2変数の関係を数値で表すのが共分散と相関係数です。共分散は以下のように計算されます。
\[ Cov_{xy}=\frac{1}{n}\Sigma^n_{i=1}\left( x_i - \bar{x}\right)\left( y_i - \bar{y}\right) \]
Rでは,cov()
関数で計算できます
値が大きいほど関係が強い。ただし,データの単位に依存するので,どれぐらい数字が大きかったら関係が強いと言えるのかはわからない。
そこで,共分散を各変数の標準偏差の積で割って単位に依存しない基準を作る。これを相関係数という
\[ r = \frac{Cov_{xy}}{SD_xSD_y} = \frac{Cov_{xy}}{\sqrt{\frac{1}{n}\Sigma^n_{i=1}\left( x_i - \bar{x}\right)^2}\sqrt{\frac{1}{n}\Sigma^n_{i=1}\left( y_i - \bar{y}\right)^2}} \]
相関係数rは,-1以上1以下の数値をとります。関係が強いほど-1もしくは1に近くなります。
これで,散布図で見た関係性の違いを数値で表すことができました。
相関係数(correlation)は,cor()
関数でできます。先ほどの3つの例の相関係数はそれぞれ以下の通り
a<-ggplot(mapping = aes(x_p, y_p)) + #グラフを作成
geom_point() + #書く数値を点(point)で書く
theme(aspect.ratio = 1)
b<-ggplot(mapping = aes(x, y)) + #グラフを作成
geom_point() + #書く数値を点(point)で書く
theme(aspect.ratio = 1)
c<-ggplot(mapping = aes(x_n, y_n)) + #グラフを作成
geom_point() + #書く数値を点(point)で書く
theme(aspect.ratio = 1)
plot_grid(a, b, c, nrow = 1)
複数の変数のペア毎の相関係数を行列形式で表示するもの。
tibble
形式にして
datasummary_correlation()
で相関行列を出力(modelsummary
パッケージの一部)
x_p | y_p | x | y | x_n | y_n | |
---|---|---|---|---|---|---|
x_p | 1 | . | . | . | . | . |
y_p | .88 | 1 | . | . | . | . |
x | -.13 | -.10 | 1 | . | . | . |
y | -.04 | -.02 | -.04 | 1 | . | . |
x_n | -.19 | -.24 | -.02 | -.02 | 1 | . |
y_n | .18 | .20 | .01 | .05 | -.92 | 1 |
質的変数は,相関係数を算出できないし散布図もかけない。
そこでクロス集計表という表を使ってまとめられることが多い。
例えば,ice
には,天気 (tenki
),と週末かどうか (weekend
)という変数が入っています。これらの関係を見るにはそれぞれを行と列にした表が役立ちます。
これをクロス集計表と言います。
例えば,平日 (weekend = 0)で晴れは6日,休日 (weekend = 1)で雨は1日です。
もう少し見やすい表は,summarytoolsパッケージのctableコマンドで作成可能です。
tenki | 晴れ | 曇り | 雨 | Total | |
weekend | |||||
0 | 6 (60.0%) | 1 (10.0%) | 3 (30.0%) | 10 (100.0%) | |
1 | 1 (25.0%) | 2 (50.0%) | 1 (25.0%) | 4 (100.0%) | |
Total | 7 (50.0%) | 3 (21.4%) | 4 (28.6%) | 14 (100.0%) |
%は行ごとの割合を示しています。例えば平日の晴れは60%で,休日の晴れは25%です。
質的変数と量的変数の関係は一部すでに前回やっています。
例えば平日と休日の客数平均,標準偏差,最大値,最小値を分けて
0 | 1 | |||||||
---|---|---|---|---|---|---|---|---|
mean | sd | max | min | mean | sd | max | min | |
kyaku | 412.20 | 116.47 | 652.00 | 275.00 | 368.00 | 68.18 | 451.00 | 284.00 |
平日と休日で分けた箱ひげ図も
以下は,気温と客数の散布図(再掲)です。
この変数間の関係を直線関係
\[ 客数 = a + b \times気温 \]
を当てはめることを考えます。この当てはめかたとして,最もよく使われるのが最小二乗法で,それによって求められた直線を回帰直線と言います。
計算方法等詳しくは第8回でお話ししますが,このデータを使って推定すると
\[ 客数 = -572.52 + 31.65気温 \]
と求まります。
傾き31.65は,気温が1度上がった時に客数が31.65人増えるということを意味しています。
ただし,回帰分析は,時に真の関係とは違った線を引いてしまうことがあります。
データ6_ice2.csv
には,あるアイスクリームチェーンの立地と客数についての以下の変数が入っています。
お店のid番号
駅からの距離
1日の客数
このデータから,客数と駅からの距離の
1.2はコードをそのまま記入してください。3は文章で説明してください。
2024社会調査法(立命館大学)