1 パッケージのインストール

1.1 はじめに

  • メキシコの地図をsfrnaturalearthを用いて描く。
  • まず、必要なパッケージのインストールを行う必要がある。
  • 地図描画に必要なsfパッケージとrnaturalearthパッケージのインストールには10分以上の時間がかかることがある。
  • 初回のみ以下のコードを実行して、パッケージをインストールする。
  • rnaturalearthhiresパッケージは、remotesパッケージを用いてGitHubからインストールする必要がある。
options(timeout = 3600)   # 1時間
install.packages("rnaturalearth")
install.packages("sf")
install.packages("remotes")
remotes::install_github("ropensci/rnaturalearthhires")

1.2 Posit Cloudでの注意点

  • 特に、Posit Cloudでは時間切れにならないように、options(timeout = 3600)のようにタイムアウト時間を延長してからインストールする。
  • Posit Cloudの場合、R 4.3.3ではパッケージのインストールに成功するが、R 4.5.2ではパッケージのインストールに失敗した(2025年12月時点)。パッケージとR、Linux OSなどの互換性に問題がある可能性がある。
  • Posit Cloudでは、以下の画像のように、Rのバージョンを選択できるので、インストールに失敗する場合、Rのバージョンを古いバージョンに変更する必要がある。

1.3 その他の必要なパッケージ

  • インストールしていない場合は、そのほかに必要なパッケージも必要に応じてインストールする。
install.packages("ggplot2")
install.packages("dplyr")
install.packages("rio")
install.packages("viridis")

1.4 パッケージのバージョン確認

# Rのバージョン確認
R.version.string
## [1] "R version 4.5.2 (2025-10-31)"
# 主なパッケージのバージョン確認
packageVersion("ggplot2")
## [1] '4.0.1'
packageVersion("rnaturalearth")
## [1] '1.1.0'
packageVersion("sf")
## [1] '1.0.21'

1.5 renvパッケージを用いた環境管理

  • 分析環境を保存・復元するために、renvパッケージを用いることを推奨する。
install.packages("renv")
renv::init()  # 環境の初期化
renv::snapshot()  # 現在の環境を保存
renv::restore()  # 保存された環境を復元 

2 パッケージの読み込み

library(ggplot2)
library(rnaturalearth)
library(sf)

3 メキシコの州データを取得

map <- ne_states(country = "Mexico", returnclass = "sf")

3.1 州の3桁コードを取り出す。

  • map$iso_3166_2の値は、“MX-SON”のようになっている。
  • substr関数を用いて、州の3桁コード”SON”を取り出す。
map$state_code <- substr(map$iso_3166_2, 4, 6)

4 地図を描く

4.1 州の名前nameを表示する地図

ggplot(data = map) +
  geom_sf(fill = "lightblue", color = "black") +
  geom_sf_text(aes(label = name), size = 2) +
  theme_minimal() +
  labs(title = "Mexico - State Boundaries with Names")

ggsave("mexico_states_map.png", width = 10, height = 8)

4.2 州の3桁コードstate_codeを表示する地図

ggplot(data = map) +
  geom_sf(fill = "lightblue", color = "black") +
  geom_sf_text(aes(label = state_code), size = 2) +
  theme_minimal() +
  labs(title = "Mexico - State Boundaries with State Codes")

ggsave("mexico_states_code_map.png", width = 10, height = 8)

5 メキシコの州に関するデータを地図データに結合

5.1 メキシコの郡レベルデータ

  • outcomesV2.dta: Caballero et al. (2023)のデータセットから作成したデータ。
    • Caballero, M. E., Cadena, B. C., & Kovak, B. K. (2023). The international transmission of local economic shocks through migrant networks. Journal of International Economics, 145. https://doi.org/10.1016/j.jinteco.2023.103832
# メキシコの郡レベルデータの読み込み
df_mexico <- rio:: import("outcomesV2.dta")

# 州レベルで`trade_shock`と`emp_shock`と`hom_rate05_10`平均値を集計
library(dplyr)
df_mexico <- df_mexico %>%
  group_by(state_code) %>%
  summarise(trade_shock = mean(trade_shock, na.rm = TRUE),
            emp_shock = mean(emp_shock, na.rm = TRUE),
            hom_rate05_10 = mean(hom_rate05_10, na.rm = TRUE),
            state_abbr = first(state_abbr)
            )

6 州データと地図データの結合

map_merged <- merge(map, df_mexico,
                    by.x = "state_code",
                    by.y = "state_code",
                    all.x = TRUE)

7 コロプレスマップの作成

7.1 米国からの貿易ショック

  • 米国からの貿易ショック(trade_shock)に基づく、コロプレスマップの作成。
m1 <- ggplot(data = map_merged) +
  geom_sf(aes(fill = trade_shock), color = "black") +
  geom_sf_text(aes(label = state_code), size = 2, color = "white") +
  scale_fill_viridis_c(option = "plasma", na.value = "grey") +
  theme_minimal() +
  labs(title = "Mexico - US Trade Shock by State",
       fill = "Trade Shock")
m1

ggsave("mexico_trade_shock_map.png", width = 10, height = 8)

7.2 米国からの雇用ショック

  • 米国のからの雇用ショック(emp_shock)に基づく、コロプレスマップの作成。
m2 <- ggplot(data = map_merged) +
  geom_sf(aes(fill = emp_shock), color = "black") +
  geom_sf_text(aes(label = state_code), size = 2, color = "white") +
  scale_fill_viridis_c(option = "plasma", na.value = "grey") +
  theme_minimal() +
  labs(title = "Mexico - US Employment Shock by State",
       fill = "Employment Shock")
m2

ggsave("mexico_emp_shock_map.png", width = 10, height =8)

7.3 2005年から2010年の殺人率の変化

  • 2005年から2010年の殺人率の変化(hom_rate05_10)に基づく、コロプレスマップの作成。
m3<-ggplot(data = map_merged) +
  geom_sf(aes(fill = hom_rate05_10), color = "black") +
  geom_sf_text(aes(label = state_code), size = 2, color = "white") +
  scale_fill_viridis_c(option = "plasma", na.value = "grey") +
  theme_minimal() +
  labs(title = "Mexico - Change in Homicide Rate (2005-2010)",
       fill = "Homicide Rate Change")
m3

ggsave("mexico_homicide_rate_change_map.png", width = 10, height= 8)

補論:基本的なmapsパッケージを用いる

install.packages("maps")
library(maps)

map1 <- map("world", "Mexico", fill = TRUE, col = "lightblue")
title("Mexico Map")

補論:メキシコの地図パッケージmxmaps

はじめに

  • mxmapsパッケージは、メキシコの地図を簡単に描画できるパッケージである。
  • mxmapsパッケージの詳細は以下のサイトを参照。
    • https://www.diegovalle.net/mxmaps/ * 以下では、このサイトの例を参考にして、mxmapsパッケージを用いたメキシコの地図描画方法を示す。

インストール

  • mxmapsパッケージは、GitHubからインストールする必要がある。
  • インストールは以下の通り、devtoolsパッケージを用いて行う。
  • sfパッケージが必要である。
if (!require("devtools")) {
    install.packages("devtools")
}
devtools::install_github("diegovalle/mxmaps")

コロプレスマップ例

  • メキシコの地図の表示は以下の通り。
  • 以下の例では、各州の総人口を示すコロプレスマップを作成している。
library("mxmaps")

# メキシコの州レベルの人口
df_mxstate_2020$value <- df_mxstate_2020$pop
# 州レベルのコロプレスマップの描画
mxstate_choropleth(df_mxstate_2020,
                   title = "Total population, by state")

# 
rio::export(df_mxstate_2020, "mxstate_population_2020.xlsx")
  • メキシコの郡レベルデータを用いたコロプレスマップの例は以下の通り。
  • Mexican municipiosは、メキシコの郡レベルの行政区画(アメリカのcountiesに相当)である。
  • 以下の例では、先住民言語を話す人口の割合を示すコロプレスマップを作成している。
data("df_mxmunicipio_2020")
df_mxmunicipio_2020$value <-  df_mxmunicipio_2020$indigenous_language / 
  df_mxmunicipio_2020$pop * 100
mxmunicipio_choropleth(df_mxmunicipio_2020, 
                       num_colors = 1,
                       title = "Percentage of the population that speaks\nan indigenous language",
                       legend = "%")

ヘックスビンコロプレスマップ例

  • さらに、mxmapsパッケージを用いたヘックスビンコロプレスマップ(hexbin choropleth maps)の例は以下の通り。
  • 以下の例では、アフロ・メキシコ人の割合を示すヘックスビンコロプレスマップを描画する。
library("mxmaps")

data("df_mxstate_2020")
df_mxstate_2020$value = df_mxstate_2020$afromexican / df_mxstate_2020$pop * 100
mxhexbin_choropleth(df_mxstate_2020, num_colors = 1,
                    title = "Percentage of the population that identifies as Afro-Mexican",
                    legend = "%",
                    auto_contrast = TRUE)

外部データの結合

  • outcomesV2.dtaデータセットを用いて、mxmapsパッケージの地図データと外部データを結合する例は以下の通り。

データの準備

library(dplyr)
library(mxmaps)
# メキシコの郡レベルデータの読み込み
df_mexico <- rio:: import("outcomesV2.dta")
# 州レベルで`trade_shock`の平均値を集計
df_mexico <- df_mexico %>%
  group_by(state_abbr) %>%
  summarise(trade_shock = mean(trade_shock, na.rm = TRUE),
            emp_shock = mean(emp_shock, na.rm = TRUE),
            hom_rate05_10 = mean(hom_rate05_10, na.rm = TRUE)
  )

州データと地図データの結合

  • 州コードstate_abbrをキーにして、df_mexicodf_mxstate_2020を結合する。
map_merged <- merge(df_mxstate_2020, df_mexico,
                    by.x = "state_abbr",
                    by.y = "state_abbr",
                    all.x = TRUE)

コロプレスマップの作成

  • 米国からの貿易ショック(trade_shock)に基づく、コロプレスマップの作成。
map_merged$value <- map_merged$trade_shock
# 州レベルのコロプレスマップの描画
mxstate_choropleth(map_merged,
                   title = "Mexico - US Trade Shock by State")

ヘックスビンコロプレスマップ例

library("mxmaps")

map_merged$value <- map_merged$trade_shock
mxhexbin_choropleth(map_merged, num_colors = 1,
                    title = "Mexico - US Trade Shock by State",
                    legend = "Trade Shock",
                    auto_contrast = TRUE)