[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

Rで何かをしたり、読書をするブログ

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

都道府県別の老年化指数と県内総生産額対前年増加率のデータの分析2 - R のデータフレームの並び替え

Bing Image Creator で生成: Red Gold and Green, photo

www.crosshyou.info

の続きです。

今回はデータフレームの並び替えをします。

arrange() 関数で並び替えできます。

elder_index: 老年化指数を並び替えしてみます。

沖縄県が上位独占、という感じです。よく見ると、2012年度、2013年度、2014年度と年を経るごとに老年化指数が上昇しています。

arrange() 関数の中で desc() 関数を使うと大きい順に並びかえできます。

2019年度の秋田県が一番の老年化指数です。

都道府県の平均値で並び替えしてみましょう。

group_by() 関数と summarize() 関数と mean() 関数を組み合わせます。

沖縄県の次は滋賀県が老年化指数の低い県でした。愛知県、神奈川県、福岡県、埼玉県、東京都、と続きます。

大きい順にも並び替えます。

秋田県が一番の老年化指数です。高知県、青森県、徳島県、山口県、岩手県と続きます。

次は、gdp_growth: 県内総生産額対前年増加率で並び替えます。

2012年度の愛媛県が-7.6%で一番の落ち込みでした。次は、2019年度の三重県の-5.9%です。

大きい順に並びかえます。

2015年度の長崎県が10.1%で一番の成長率です。

2013年度の栃木県が8%で二番目、2015年度の沖縄県が7.1%で三番目です。上位10傑はみな違う県です。

それでは、elder_index: 老齢化指数と同じように、平均値で並び替えてみます。

愛媛県が0.325%で一番低い成長率です。和歌山県、青森県、奈良県、香川県と続きます。

大きい順で並び替えます。

沖縄県が2.66%で一番です。宮城県が2.45%で二番目、福島県が2.16%で三番目です。

以上、今回はデータフレームを arrange() 関数で並び替えてみました。

沖縄県が一番若くて、県内総生産額対前年増加率も一番高いということが発見でした。

今回は以上です。

初めから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。

#
# elder_index: 老年化指数で並び替え
df |> 
  arrange(elder_index)
#
#
# elder_index: 老年化指数 大きい順
df |> 
  arrange(desc(elder_index))
#
# elder_index: 老年化指数 平均値
df |> 
  group_by(pref) |> 
  summarize(avg = mean(elder_index)) |> 
  arrange(avg)
#
# elder_index: 老年化指数 平均値 降順
df |> 
  group_by(pref) |> 
  summarize(avg = mean(elder_index)) |> 
  arrange(desc(avg))
#
# gdp_growth: 県内総生産額対前年増加率
df |> 
  arrange(gdp_growth)
#
# gdp_growth: 県内総生産額対前年増加率 降順
df |> 
  arrange(desc(gdp_growth))
#
# gdp_growth: 県内総生産額対前年増加率
# 都道府県別平均値 昇順
df |> 
  group_by(pref) |> 
  summarize(avg = mean(gdp_growth)) |> 
  arrange(avg)
#
# gdp_growth: 県内総生産額対前年増加率
# 都道府県別平均値 降順
df |> 
  group_by(pref) |> 
  summarize(avg = mean(gdp_growth)) |> 
  arrange(desc(avg))
#

 

都道府県別の老年化指数と県内総生産額対前年増加率のデータの分析1 - R にデータを取り込む

Bing Image Creator で生成: Landscape photograph of Japanese Plum Flowers, background is blue sky and white clouds, photo

今回からしばらくは、都道府県別の老齢化指数と県内総生産額対前年増加率のデータの分析をしてみます。

政府統計の総合窓口 (www.e-stat.go.jp) のウェブサイトからデータを取得します。

47地域を選択して、

老年化指数と県内総生産額対前年増加率(平成27年基準)を選択します。

こんな感じのデータです。

これを CSV ファイルとしてダウンロードしました。

このような CSV ファイルです。

year: 調査年

pref: 地域

elder_index: 老年化指数

gdp_growth: 県内総生産額対前年増加率(平成27年基準)

と変数名を5行目に挿入しました。

このCSV ファイルを R に読み込んで分析します。

はじめに、tidyverse パッケージを読み込みます。

read_csv() 関数でファイルを読み込みます。

na.omit() 関数で NA の行を削除します。

summary() 関数で df のサマリーをみてみましょう。

year と pref をファクター型の変数にしておきましょう。

pref のところを見ると、8となってますから、8年間のデータがあることがわかります。

今回は以上です。

次回は

www.crosshyou.info

です。

 

今回のコードは以下になります。

#
# tidyverse パッケージを読み込む
library(tidyverse)
#
# CSV ファイルを読み込む
df_raw <- read_csv("elder_gdp_growth.csv",
                   skip = 4)
#
# NA 行を削除
df <- na.omit(df_raw)
#
# サマリー
summary(df)
#
# year, pref をファクター型の変数にする
df <- df |> 
  mutate(year = factor(year),
         pref = factor(pref))
summary(df)
#

 

景気ウォッチャー調査の分野・業種DIのデータの分析5 - R で TOPIX の変化率を回帰分析

Bing Image Creator で生成: Close up photo of a Helleborus Niger flower, background is landscape of winter forests, photo

 

www.crosshyou.info

の続きです。

前回は、景気ウォッチャー調査データを使って、TOPIX の水準を回帰分析するモデルを作りました。

トレンド、前月のTOPIXをコントロールした後でも、景気ウォッチャー調査の先行きの方向性は有意な変数であることがわかりました。

今回は水準ではなくて、変化率を回帰分析してみます。

まず、mutate() 関数の中で、diff() 関数を使い、差分の変数を作ります。

そうしたら、変化率の変数を作ります。

df_ts というデータフレームから、ts オブジェクトを作成します。

変化率のグラフを描いてみます。

TOPIX の変化率よりも、景気ウォッチャー調査のデータの変化率のほうがとても大きいとわかります。

では、1か月前の変化率で今月の TOPIX の変化率を説明するモデル線形モデルを OLS で推定します。

現状の水準の p値が 0.0525 と 5% よりも少し上の水準ですが、残りは全て有意な変数です。

c_lev を削除してみます。

c_cur が有意ではなくなってしまいました。c_cur を削除します。

1月前の 先行きの方向性が 1パーセントポイント増えると、今月の TOPIX の上昇率が 0.07 パーセントポイント増えるということです。

c_fut の標準偏差は、

c_fut の標準偏差は 10.6 なので、c_fut が1標準偏差変化すると、10.6 * 0.07036 = 0.74 パーセントポイント、TOPIX の変化率が増えるということです。TOPIX の変化率の標準偏差は、4.69 なので、0.74 / 4.69 = 0.159 標準偏差ぶんの変化です。

実際の変化率とモデルの予測変化率の散布図を描いてみます。

黒い直線は切片が 0 で傾きが 1 の直線です。

もしも実際の変化率とモデルの予測値が全く同じなら、この直線状に点がプロットされますが、実際の散布図はかなりバラツキがあります。

TOPIX の変化率と景気ウォッチャー調査のデータは関連性は認められましたが、この景気ウォッチャー調査のデータで TOPIX の値を予測して儲けるのは難しいような気がします。

今回は以上です。

初めから読むには、

 

www.crosshyou.info

です。

今回のコードは以下になります。

#
# df_tsに差分の変数を加える
df_ts <- df_ts |> 
  mutate(d_cur = c(NA, diff(current)),
         d_fut = c(NA, diff(future)),
         d_lev = c(NA, diff(level)),
         d_tpx = c(NA, diff(topix)))
df_ts
#
# df_tsに変化率の変数を加える
df_ts <- df_ts |> 
  mutate(c_cur = d_cur / current * 100,
         c_fut = d_fut / future * 100,
         c_lev = d_lev / level * 100,
         c_tpx = d_tpx / topix * 100)
df_ts |> 
  select(d_cur:c_tpx)
#
# df_tsからtsオブジェクトを作成
ts_obj <- ts(df_ts,
             start = c(2000, 1),
             frequency = 12)
str(ts_obj)
#
# 変化率のグラフ
df_ts |> 
  ggplot(aes(x = date)) +
  geom_line(aes(y = c_tpx)) +
  geom_line(aes(y = c_cur), color = "red", alpha = 0.5) +
  geom_line(aes(y = c_fut), color = "green", alpha = 0.5) +
  geom_line(aes(y = c_lev), color = "gold", alpha = 0.5) +
  labs(title = "Change Percent Graph",
       subtitle = "Black-TOPIX, Red-Current, Green-Future, Gold-Level") +
  theme_bw()
#
# c_tpxを1か月前の変化率で説明するモデル
model4 <- dynlm(c_tpx ~ L(c_cur) + L(c_fut) + L(c_lev) + L(c_tpx),
                data = ts_obj)
summary(model4)
#
# c_levを削除する
model5 <- dynlm(c_tpx ~ L(c_cur) + L(c_fut) + L(c_tpx),
                data = ts_obj)
summary(model5)
#
# c_curを削除する
model6 <- dynlm(c_tpx ~ L(c_fut) + L(c_tpx),
                data = ts_obj)
summary(model6)
#
# c_fut の標準偏差
df_ts |> 
  summarize(sd = sd(c_fut, na.rm = TRUE),
            avg = mean(c_fut, na.rm = TRUE),
            tpx_sd = sd(c_tpx, na.rm = TRUE),
            tpx_avg = mean(c_tpx, na.rm = TRUE))
#
# df_tsにmodel6の予測値を追加
df_ts <- df_ts |> 
  mutate(model6 = c(NA, NA, model6$fitted.values))
#
# c_tpx と model6 の散布図
ggplot(df_ts, aes(x = c_tpx, y = model6)) +
  geom_point() +
  geom_abline(slope = 1, intercept = 0)
#

 

景気ウォッチャー調査の分野・業種DIのデータの分析4 - R で景気ウォッチャー調査データから TOPIX を回帰分析モデルで予測する

Bing Image Creator で生成: Close up photo of Euphorbia pulcherrima, background is wild green grass fields, photo

 

www.crosshyou.info

の続きです。今回は景気ウォッチャー調査のデータから TOPIX を予測するモデルを作ろうと思います。

まずは分析のために、total: 景気ウォッチャー調査総合値の current, future, level と TOPIX の ts オブジェクトを作ろうと思います。

df_ts という名前でデータフレームを、

time_series という名前で ts オブジェクトを作成しました。

この time_series の有り様を確認してみます。

時系列データを回帰分析するためのパッケージである dynlm を読み込みます。

一番はじめは、TOPIX の水準を、1か月前の current, future, level で説明するモデルを作ってみましょう。

current, future, level 全ての係数が有意な値となっています。current の係数がマイナスなので、current: 現状の方向性が低いと、TOPIX の値は大きくなる、という関係です。

R-squared が 0.2573 なので、25% しか TOPIX を説明していません。

モデルの予測値と実際の TOPIX の値をグラフにしてみます。

はじめにモデルの予測値と実際の TOPIX の値のデータフレームを作っておきます。

1か月前の景気ウォッチャー調査データを使ったモデルなので、一番最初の月の予想値はありません。

ggplot でグラフを描きます。

黒が実際の TOPIX で、赤がモデルの予測値です。同じような値動きですが、2020年以降の実際の TOPIX の上昇にモデルがついていけてないですね。

第2のモデルとして、トレンド項を追加したモデルを作ってみましょう。

トレンドは2乗項も加えました。R-squared が 0.7975 と改善しました。

グラフにしてみます。

緑のラインが2番目もモデルです。赤いラインよりも実際の TOPIX に近づいていることがわかります。

さらに、前月の TOPIX の値を加えたモデルを作ります。

L(current) や L(level) などは有意な係数ではなくなっています。

不要な変数を削除していって、モデルをより簡素なものにしていきます。

まず、L(level) を削除しました。次は、trend(time_series) を削除してみます。

L(future) は有意なままですね。L(current) を削除します。

L(future) は係数は 1.87 で、p値は 0.000442 と 1% 以下の有意水準です。

R-squared は 0.983 と このモデルで、TOPIX の値動きの 98.3% を説明しています。

景気ウォッチャー調査の先行きの方向性が1ポイント上がると、 topix は 1.87 上昇するということですね。

グラフにしてみます。

3番目のモデルの予測値は、ゴールドのラインです。黒い実際の TOPIX とよく似た値であることがわかります。

今回は以上です。

次回は

www.crosshyou.info

です。

 

初めから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。

#
# total の current, future, level と topix のts オブジェクトを作る
df_ts <- df |> 
  select(date, year, month, type, total) |> # 必要な変数だけ
  pivot_wider( # pivot_woder()で変形
    id_cols = c("date", "year", "month"),
    names_from = type,
    values_from = total
  ) |> 
  inner_join(tpx) |> # topixを結合
  arrange(date) # 日付順に並び替え
#
time_series <- ts(df_ts,
                  start = c(2000, 1), frequency = 12)# ts オブジェクトにする
#
# time_series の確認
head(time_series)
tail(time_series)
str(time_series)
#
# dynlm パッケージを読み込む
library(dynlm)
#
# topix を1期前のcurrent, future, level で説明するモデル
model1 <- dynlm(topix ~ L(current) + L(future) + L(level), 
                data = time_series)
summary(model1)
#
# 実際のTopixとモデルのTopix のデータフレームを作る
#
df_topix_model <- 
tibble(
  date = df_ts$date,
  model1 = c(NA, model1$fitted.values),
  topix = df_ts$topix

df_topix_model
#
# 実際のTopixとモデルのTopixのグラフ
df_topix_model |> 
  ggplot(aes(x = date)) +
  geom_line(aes(y = topix)) +
  geom_line(aes(y = model1), color = "red") +
  labs(title = "Black-Topix, Red-Model1")
#
# トレンドを加えたモデル
model2 <- dynlm(topix ~ L(current) + L(future) + L(level) +
                  trend(time_series) + I(trend(time_series)^2),
                data = time_series)
summary(model2)
#
# model2の予測値をdf_topix_modelに加える
df_topix_model <- df_topix_model |> 
  mutate(model2 = c(NA, model2$fitted.values))
df_topix_model
#
# グラフ
df_topix_model |> 
  ggplot(aes(x = date)) +
  geom_line(aes(y = topix)) +
  geom_line(aes(y = model1), color = "red") +
  geom_line(aes(y = model2), color = "green") +
  labs(title = c("Black-Topix, Red-Model1, Green-Model2"))
#
# 前月のtopixも加えたモデル
model3 <- dynlm(topix ~ L(current) + L(future) + L(level) +
                  trend(time_series) + I(trend(time_series)^2) +
                  L(topix), data = time_series)
summary(model3)
#
# model3 の簡素化作業1 L(level) を削除
model3 <- dynlm(topix ~ L(current) + L(future) +
                  trend(time_series) + I(trend(time_series)^2) +
                  L(topix), data = time_series)
summary(model3)
#
# model3 の簡素化作業2 trend(time_series) を削除
model3 <- dynlm(topix ~ L(current) + L(future) +
                  I(trend(time_series)^2) +
                  L(topix), data = time_series)
summary(model3)
#
# model3 の簡素化作業3 L(current) を削除
model3 <- dynlm(topix ~ L(future) +
                  I(trend(time_series)^2) +
                  L(topix), data = time_series)
summary(model3)
#
# model3の予測値をdf_topix_modelに加える
df_topix_model <- df_topix_model |> 
  mutate(model3 = c(NA, model3$fitted.values))
df_topix_model
#
# グラフ
df_topix_model |> 
  ggplot(aes(x = date)) +
  geom_line(aes(y = topix)) +
  geom_line(aes(y = model1), color = "red") +
  geom_line(aes(y = model2), color = "green") +
  geom_line(aes(y = model3), color = "gold", linewidth = 1, alpha = 0.5) +
  labs(title = c("Black-Topix, Red-Model1, Green-Model2, Gold-Model3")) +
  theme_bw()
#

 

読書記録 - 「優しいコミュニケーション 「思いやり」の言語学」 村田 和代 著 (岩波新書)

筆者は龍谷大学の社会言語学の先生です。

社会言語学という学問分野があることをはじめて知りました。

「生きている言葉やコミュニケーションの有り様」を研究するのが社会言語学というものだそうです。筆者の研究の中から「優しいコミュニケーション」とはどういうものかを記述しています。

コミュニケーションというと、話すことに重点が置かれがちです。実際、話し方教室というのはよく目にしますが、聞き方教室というのはあまり目にしないです。

でも、コミュニケーションは、話す人、聞く人、両者の共同作業のようなものだから、話す人は、聞き手が理解しやすいように、聞き手のバックグラウンドやどこまで理解しているかなどを考えながら話す、聞き手も、適切なタイミングで相槌をうったり、話してが進めやすいような質問を投げかけてやったりすることが大切なことだと書かれているます。

また、この本には雑談はその場にいる人たちの感情の一体化を醸し出すのに作用するので大切だ、ということも書かれていました。

この本を読んで、話し手になるときは、聞き手に対する思いやりを、聞き手になるときは話し手に対する思いやりを心掛けるようにしようと思ました。

 

景気ウォッチャー調査の分野・業種DIのデータの分析3 - R で各変数の平均値を算出

Bing Image Creator で生成: Closeup photo of white lily flowers, background is great amazon river, photo

 

www.crosshyou.info

の続きです。

前回は、景気ウォッチャー調査の total: 総合の値の current: 現状の方向性、future: 先行きの方向性、level: 現状の水準のラインチャートを描いてみました。結果は3つともよく似た動きをしていることがわかりました。

 次は家計と企業の動きを見てみましょう。

current: 現状の方向性のラインチャートです。赤が家計、緑が企業、黒が総合です。

同じような動きですね。

それぞれの平均値と標準偏差を group_by() 関数と summarize() 関数で算出してみましょう。

家計のほうが少し、企業よりも平均値が低く、標準偏差も小さいことがわかります。

全ての変数を type で分けないで平均値を算出してみましょう。

一番平均値の小さいのは、h_r_cloth: 家計動向関連_小売関連_衣料専門店で、37.2です。

一番平均値の大きいのは、employ: 雇用関連です。

この2つのラインチャートを描いてみます。

赤が衣料専門店で緑が雇用です。現状の方向性です。

先行きの方向性のラインチャートを同様に作成します。

水準のチャートを見てみます。

水準が一番、両者の違いが大きい感じですね。

今回は以上です。

次回は

www.crosshyou.info

です。

 

初めから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。

#
# 家計と企業のグラフ
df |> 
  filter(type == "current") |> 
  ggplot(aes(x = date)) +
  geom_line(aes(y = household), color = "red") +
  geom_line(aes(y = company), color = "green") +
  geom_line(aes(y = total), color = "black")
#
# total, household, companyの統計値
df |> 
  group_by(type) |> 
  summarize(
    avg_total = mean(total, na.rm = TRUE),
    avg_household = mean(household, na.rm = TRUE),
    avg_company = mean(company, na.rm = TRUE),
    sd_total = sd(total, na.rm = TRUE),
    sd_household = sd(household, na.rm = TRUE),
    sd_company = sd(company, na.rm = TRUE)
  )
#
# 全ての変数の平均値
colMeans(df |> select(total:employ), na.rm = TRUE)
#
# h_r_cloth と employ のラインチャート、current
df |> 
  filter(type == "current") |> 
  ggplot(aes(x = date)) +
  geom_line(aes(y = h_r_cloth), color = "red") +
  geom_line(aes(y = employ), color = "green")
#
# h_r_cloth と employ のラインチャート、future
df |> 
  filter(type == "future") |> 
  ggplot(aes(x = date)) +
  geom_line(aes(y = h_r_cloth), color = "red") +
  geom_line(aes(y = employ), color = "green")
#
# h_r_cloth と employ のラインチャート、level
df |> 
  filter(type == "level") |> 
  ggplot(aes(x = date)) +
  geom_line(aes(y = h_r_cloth), color = "red") +
  geom_line(aes(y = employ), color = "green")
#

景気ウォッチャー調査の分野・業種DIのデータの分析2 - R でラインチャートを描く

Bing Image Creator で生成: Closeup photo of strawberry flowers, background is white mountain, photo

www.crosshyou.info

の続きです。

まず、make_date() 関数で year と month から date という名前で日付を表す変数を作成しましょう。

total のグラフを描いてみます。

current, future, level ともに同じような動きをしていることがわかります。

景気ウォッチャー調査のデータの他に株価のデータも加えてみたいと思います。

e-stat.go.jp 政府統計の総合窓口の中から、景気動向指数の中に東証株価指数(TOPIX)のデータがあるので、それをダウンロードしました。

このようにCSVファイルを加工しました。

これを R に読み込みます。

この tpx といデータフレームに date という変数を加えます。

inner_join() 関数で df に tpx を結合させます。

topix のグラフを描いてみます。

TOPIX の推移のグラフができました。

今回は以上です。

次回は

www.crosshyou.info

です。

 

初めから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。

#
# year と month から date を作る
df <- df_raw |> 
  mutate(date = make_date(year, month, 28)) |> 
  relocate(date)
#
# totalのグラフ
df |>  
  ggplot(aes(x = date, y = total, group = type)) +
  geom_line(aes(color = type))
#
# TOPIXのファイルを読み込む
tpx <- read_csv("topix_202410.csv",
                skip = 7)
#
# tpx の整形
tpx <- tpx |> 
  mutate(date = make_date(year, month, 28)) |> 
  select(date, topix)
tpx
#
# tpx を df に結合
df <- df |> 
  inner_join(tpx, by = "date")
df |> 
  select(date, total, topix)
#
# topix のグラフ
df |> 
  ggplot(aes(x = date, y = topix)) +
  geom_line()
#