論理の流刑地

地獄の底を、爆笑しながら闊歩する

【R備忘】ggplot2で不要な図内の余白を消したい時/凡例を一つにまとめたいとき、にどうするか

百回忘れたことに対して百一回目の忘却を防ぐだけのためのメモ
いやーggplotはありがたいパッケージではあるんだけど、毎日使うわけじゃないから細かい設定とかを忘れがち


不要な図内の余白を消す

例によって{panelr}パッケージのWageDataをつかう。
このデータに含まれている変数から、対数変換済賃金(lwage)をY軸に、週当たり労働時間(wks)をX軸にプロットすることを考えよう。
このデータは、労働時間5h以上の労働者を対象としているので、X軸でx < 5の部分はいらない。
ので、scale_x_conutuous() の引数limitsに下限5を設定して一度描画してみる

library( panelr)
data(WageData)
gg_tst1 <- ggplot(data= WageData ,
                  mapping = aes( x = wks , y = lwage)) +
          theme_light(base_family = "Meiryo")+
          scale_x_continuous(  breaks = seq( 5, 55 , by = 5)) +
          geom_point( shape=18 , color = "firebrick4" ) + labs(title="Test1")

できあがったグラフは以下のようになる

定義上値が存在しないはずのx <5 の部分も図に含まれてしまっていて、気持ちが悪い。

こういうときは、引数expandにc(0,0)を指定すると、limitsに指定した上限/下限値で図の表示領域を区切ることができる

gg_tst2 <- ggplot(data= WageData ,
                  mapping = aes( x = wks , y = lwage)) +
          theme_light(base_family = "Meiryo")+
          scale_x_continuous(  breaks = seq( 5, 55 , by = 5), limits = c( 5, 55),
                               expand= c(0,0)) +
          geom_point( shape=18 , color = "firebrick4" ) + labs(title="Test1")

きちんと、想定通りの表示になっている。

凡例をひとつにまとめる

scale_xxx_manual()などを使って、

  • 散布図の各点のshape
  • 折れ線グラフの線の形状(Ex. 実線, 破線, 点線..)
  • 点・線の色

などを各属性ごとに指定していくと、凡例が分裂してしまったりすることがある。

たとえば、以下のように学歴三段階(高/中/低)、性別(男/女)別に賃金の推移を折れ線グラフで確認するとする
このとき、何も考えないで適当にコードを書いてしまうと、以下のように凡例が分裂してしまうことがある。

#教育年数から学歴カテゴリをつくる
WageData <- WageData %>%
  mutate( ed3  = case_when( 
    ed <= 9 ~ 1 , 
    ed %in% 10:12 ~ 2,
    ed > 12 ~ 3), 
    Sex = if_else( fem == 1 , "Female", "Male")) 

#学歴× 性別の6グループでの平均賃金を求める
dfWage <- WageData %>% group_by(
            Sex , ed3) %>%
        summarize( N = n() ,
                   lwageM = mean( lwage , na.rm=T)) %>%
        as.data.frame()


gg_tst3 <- ggplot( data = dfWage,
                   mapping= aes( x = ed3 ,  group = Sex,
                                 y = lwageM, color = Sex ,
                                 linetype= Sex )) +
            theme_light( base_family = "Meiryo") +
            scale_x_continuous(breaks=1:3 ) + 
            geom_line( size = 0.9) + 
            scale_color_manual( breaks= c("Female", "Male"),
                                values = c("firebrick4", "darkblue"), 
                                name = "性別") +
            scale_linetype_manual( breaks = c( "Female","Male"),
                                values = c("dashed", "solid")
                                )

こういうときに、焦ってると何を修正すればいいんだっけ?ってなる。
結論からいうと、以下のふたつが必要である

  1. 同じ変数をマッピングでのそれぞれの属性(具体的には、mapping=aes(color = XXX , linetype=XXX)のとこ)に指定しているのであれば、scale_xxx_manual側で以下属性に指定する値が揃うようにする
    • name(凡例タイトル)
    • labels(凡例における各値のラベル)
    • breaks(値を指定するための水準)
  2. もしcolor=XXXと、linteype=XXXに指定している変数が違うのであれば、組み合わせ水準をinteraction()で作成してcolorとlinetype双方で指定する

colorの指定とlinetypeの指定に使っている変数が異なるときは、
interaction(sex , age)のように二要因の組み合わせ水準をmappingに指定してから、
各値をscale_xxx_manual()のvaluesで指定すればいい(以下URL参照)

※参考
stackoverflow.com

修正すると、以下のように凡例がひとつにまとまる

gg_tst3_2 <- ggplot( data = dfWage,
                   mapping= aes( x = ed3 ,  group = Sex,
                                 y = lwageM, color = Sex ,
                                 linetype= Sex )) +
            theme_light( base_family = "Meiryo") +
            scale_x_continuous(breaks=1:3 ) + 
            geom_line( size = 0.9) + 
            scale_color_manual( breaks= c("Female", "Male"),
                                values = c("firebrick4", "darkblue"), 
                                name = "性別",
                                labels = c("女","男")) +
            scale_linetype_manual( breaks = c( "Female","Male"),
                                values = c("dashed", "solid"),
                                name = "性別",
                                labels = c("女","男")
                                )


求める出力となっている


www.youtube.com


Enjoy!

{glba}パッケージ 備忘録

体調管理が、何よりいちばん難しいタスク。

Introduction

response time(回答時間)をどうやって行動予測や(関心のある変数の)効果の推定精度につなげるか、というハナシをやっている界隈がある。
ご多分に漏れず、この分野にもいくつかの流派があるのだが、そのうちLBA(線形弾道蓄積)モデルを使った分析を提供しているのが{glba}パッケージである。

このパッケージにはよくあるvignette(解説文)がないし、そもそも日本語での情報がほぼほぼないので、色々使いながら試していく。


◆参考URL

LBAの概要かいつまみ

(本項の内容は、参考URLの国里先生のほうがより端的に、より分かりやすくまとまっているのでそちらも参照されたい。まぁ自分の言葉で書いたほうが定着しやすい、というのをより重視して書いているだけである)

上述のBrown and Heathcote(2008)を一読して大まかな概要を理解した。
簡単に言ってしまえば、複数の回答選択肢*1に対する選択式問題の回答がある一定時間でなされるメカニズムを、「証拠蓄積evidence accumulate」という理論モデルで捉えることにその要諦がある。

問題文や選択課題が提示されたときから回答を行うまでの時間は大別して、

  1. 問題・課題の意味を理解するためのインプット刺激の処理のための時間(非決定時間 non decision time,以下non-DTと略記)
  2. 問題の意味を解してからの、判断・選択までの時間(決定時間decision time、以下DTと略記)

の二つに分けられる。

LBA(「線形弾道蓄積」)というモデルの名称が意味をもってくるのは、DTの決定メカニズムの表現においてである。
回答時間と回答選択の同時モデリングという課題においては、「どの選択肢が回答者によってえらばれるか」だけが解くべき単一の問いとはならず、同時に「同じ選択肢を選んだ回答者のなかでも回答時間に差異が出るのはなぜか」という問いに対しても答えを用意せねばならない。

そこで、「ある選択肢をある時間で選ぶ」という事象を「非決定時間が終了し決定時間に各回答者は証拠蓄積のモデルで捉え、その個人差を

  • 蓄積のスピード(=直線の傾き)
  • 蓄積開始地点の値(=直線の切片)
  • 閾値(=回答基準)

という三つのパラメータで把捉するのが、LBAだ。
また、各パラメータを変数ではなく(共変量と係数の線形結合としての)関数として推定できるのも、LBAのアピールポイントである

色々すっ飛ばして*2、CDF(累積密度関数)を導出すると、以下のような形になる。

LBAのcumulative density function

(上記URL1:国里先生の記事より引用)

ここで、式中のnotationは以下の通りである

  • Aは、直線の切片aのドロー元である一様分布の上限値
  • bは、閾値
  • vは、直線の傾きdのドロー元である正規分布の平均値(sは正規分布の誤差の標準偏差だけど、scalingの問題で1に固定

国里先生の至極丁寧な記事では、本モデルでのStanでのbayes実装が公開されていて、そちらも尤度(密度)関数をスクラッチで組んでいてとてもとても参考になる。
しかしここでは、最尤推定(正確にはFIML:完全情報最尤推定法)を用いた推定パッケージとしてRで公開されている{glba}を使ってみる

Main Function

{glba}パッケージに含まれている関数は、

  • lba()
  • rlba()
  • tablba()

の三つで、rlbaは架空データの生成用関数、tablba()はlba()の推定結果を受け取って表示するだけの関数なので、実質{glba}はlba()という一つの関数を提供しているパッケージである。

ひとまず、何はともあれコード例をみてみよう

# loading data
data( "numpp1")
dfNpp <-  numpp1

# setting  starting values and estimation
pars <- c(.25,.3,.1,.2,.9,.75,.6)
m1 <- lba(rt=rt,response=acc,drift=~diff-1,data=dfBH,
          startpars=pars, hessian =T)
#show estimates
tablba(m1)

引数は、以下のように分けられる

  • データ指定系
    • rt:回答時間変数の変数名(character)
    • response:回答値変数の変数名(character)
    • data :分析対象となるデータフレーム(data.frame)
    • weights :case weights
  • モデル指定系(指定しないと単なる関数ではなく単なるパラメータとして各値を推定)
    • sddr:drift rateの標準偏差の決定モデル式(formula)
    • sp:弾道蓄積の切片の決定モデル式(formula)
    • bound:閾値の決定モデル式(formula)
    • nond:被決定時間の決定モデル式(formula)
    • drift:drift rateの平均値の決定モデル式(formula)
    • scaling:識別不能を回避するためのパラメータ制約("sum" or "fixedSD")。"fixedSD"を指定した場合、startparsのはじめに標準偏差の値を指定する
    • loglink:各モデル(sddr, sp , nond ,bound)にlog link functionを用いるかどうか(logical)
    • sdstart:drift rateの初期値。scaling = "fixedSD"のときに使用(startparsの最初の値と同じ値を指定するということ?だと思う)
  • 推定手続き指定系
    • startpars:optim()に内部で引き渡すパラメータ推定の初期値(numeric)
    • fixed:もしstartparsに引き渡した初期値のまま固定させたいパラメータがあるときはここで指定(logical)
    • method:optimの引数と一緒。どの最適化法を使うかの指定("Nelder-Mead"とか"BFGS"とか)
    • hessian:ヘシアンをoutputするか否か(logical)

lba()は内部でoptimを使って最適化していて、そのためパラメータの初期値をstartparsでそのまま指定しなければならない*3

だから、とくに各パラメータに関して共変量をかませた式を推定するときは、パラメータの数を正しく把捉しなければならない。
このパッケージをたくさん使う必要があるのなら、自動的にstartparsを生成するwrapper functionを作った方がいいかもしれない。
(あと、factor型の変数の扱いがイマイチわかりづらい*4ので、カテゴリ変数はあらかじめ{0,1}のダミー変数化して投入すべきかもしれない)

上記コードの、出力結果は以下のようになる

talba()の出力する推定結果表

ひとまず、{glba}パッケージを用いた一通りの分析の手続きがわかった。



www.youtube.com

Enjoy!

*1:二択だけでなく、三択以上の多値問題を扱うことが容易にできるのが、LBAの強みだと本論文では主張されている

*2:紙とペンを取り出して、appendixを見ながら式変形してみた。ちゃんとたどり着けると嬉しい(単純な老兵の感想)

*3:referenceだと、そのうちstarting valuesの設定はautomatedにするかもしれないけど今はやってねHAHAHA...って感じになってますが、このパッケージ数年updateがないので、このままでしょう...

*4:dummy codingしてくれないっぽい?たとえば下の出力結果の画像で共変量diffは3水準の因子だけど、estimatesが3つある

Jane Jacobs『発展する地域 衰退する地域:地域が自立するための経済学』

正月気分が抜けないが、それを恥じるのではなく
むしろ種火のように大事に育てていき、気分だけは年中正月でいるのがいいのかもしれない(これが今年の目標*1


はじめに

アメリカ大都市の死と生』などで有名なジェイン・ジェイコブス御大の著。
(有名とかいっておきながら、浅学な私は御大のかいたもので読んだことのあるものは、『市場の倫理 統治の倫理』だけである。これもまた味わい深い知的刺激に満ちた本で、近いうちに再読したい*2
原著は1984年なので、40年前近く前の本ということになるが、解説のお二人が言っているように御大ならではの鋭い分析視角の価値は、21世紀も1/4近くがすぎた(マジかよ)いまでも色褪せない。

年末年始の休みの読書の為、ジュンク堂に別の地域問題系の書籍を探しに行った(お目当ての品切れだった)ら、近くの棚にあったので年末年始のスキマ時間で読んでいたが、経済学素人の私でも面白く読めた(まぁ仕事とか仕事とか色々あって結局年末年始休みでは読了できなかったけども)。
こういう出会いがあるから、リアル書店はやっぱずっと頑張ってほしいなと思うわけですね。

一読しての感想

  • 本題に入る前の第一章(前置きの章)では、ディマンド・サイド側の説明もサプライ・サイド側の説明もうまく立ち行かなくなったことの例として米国社会における1960~70年代におけるスタグフレーションの継起が挙げられている。だいたい合理的期待形成学派が出てくる前夜くらいの時代感で書かれていて、時代を感じる。
  • ケインジアンにとってはフィリップス曲線の妥当性が現実のデータに裏切られる時代に入ったことが、マネタリストにとっては金融引き締めと減税の同時実行提言がさらなる雇用・財政状況の悪化をもたらしたことが、彼らそれぞれの奉ずる理論の現実への説明力に対して疑義を呈される要因となった..と説明されている。ここらへん(とくにフィリップス曲線と現実のデータの突合)、一年前に読んだ「日本経済のマクロ分析」でも多く言及されていたところであった

ronri-rukeichi.hatenablog.com

  • ケインジアンでありながらフィリップス曲線に疑義を呈したアーサー・オーカンの「経済的不快指数」(失業率とインフレ率を足してスタグフレーションの数字にするという冗談)のアイディアは面白かった(p.43-45)。別に経済(学)だけの話ではなく、指標Aと指標Bが両方改善しなきゃいけないんだけどその間にはトレードオフがあって、どっちかを改善するとどちらかは悪化しやすくなる、みたいな関係があるとき、その合成指標や指標間に働くゆるやかな制約のほうに目を向けることは重要である。
  • 都市は、つねに従来の仕事を失いつづけている」(p.70)は名句だと思った。

都市は、つねに従来の仕事を失いつづけている。
その原因としては、たとえば、これまで顧客であった都市が自ら輸入置換を開始し、これまで輸入していた品目の生産者として競争相手にさえなる場合が挙げられる。
また、基礎がしっかり固まった企業が、最初は都市の共生的な温床で発展を遂げるが、のちには、創業の範囲を、たとえばピケンズ郡のような遠方へ移す場合もある
また、従来の仕事と、従来の多くの企業とが陳腐化する場合もある。
(p.70)

  • 経済発展と都市の存在は不可分であり、その構成要素は以下の五つ(一応以下の順番は時間軸もあらわしているらしい)である、というのが本書の一番大事な枠組みである(pp.71-74)
    1. 市場:「おもに農村的財と他の都市で生産されるイノベーションの産物とからなる、新しい輸入品に対する都市市場」
    2. 仕事:「輸入置換都市における仕事の量と職種の急激な増大」
    3. 移植工場:「従来の企業が過密化のために押し出された結果、都市の仕事が農村地帯へ大幅に移植されたこと」
    4. 技術:「技術、とりわけ農村の生産と生産性を上昇させる技術の新しい利用方法」
    5. 資本:「都市における資本の成長」
  • 「経済活動を孵化するのは軍需生産ではなく、都市なのである」(p.297)というまでのロジックが面白かった。軍需は確かに短期的な(少なくない)経済効果は見込めるのだけれど、一方で内製化につながるような輸入につながらないから、乗数効果が一次的なものに限定される、ということである。実際にデータから導き出された考察ではないが、論理は通ってはいる。軍事拡大を是とするような議論のひとつにその経済効果を説くものがあるが、それはあくまでも刹那的なものにすぎない、ということだろうか

しかし、軍需生産の長期化が、経済ブームをも長期化するかどうかを理解することが重要である。
ひとたび軍事的仕事の乗数効果が吸収されると、事態は沈静化する(p.289)

  • ジェイコブス御大は活動家としても名を馳せてるので、上述の軍需を軸とした経済への活性化などは結論先取のバイアスのかかった議論なのでは..と食って掛かりたくもなるが、いっぽうで貧困地域への一方的な援助に対して疑念を表明しているところが誠実なところである。彼女曰く、輸入置換や輸入のための経済力の稼得につながるような仕事の多様な拡大につながらないような貧困地域への補助金交付金は、「衰退の取引」でしかない(pp.298-300)。それは、ただ単に(都市の稼得を移転するような形で)購買力を底上げするだけでは、インプロビゼーションや輸入代替につながらず、援助への依存度が下がる蓋然性は低いままにとどまるからである。都市間の共生的取引ではなく、都市-農村の非対称的な関係性における取引という形が変わらない。
  • 以下のフレーズがかっこよかった(だけでなく本著の基本的アイディアを表しているように思えた)

都市は、二つの形で継続的なエネルギーのインプットを必要とする。
すなわち、一つはイノベーションであり、それは根本において人間洞察のインプットである。
いま一つは豊富な輸入代替であり、それは根本において、適応性のある模倣を行う人間能力のインプットである。
都市の有用性は、こうしたインプットー洞察と適応ーを日常の経済活動にうまく取り込めるような関係を提供できる点にある
(p.301)

  • 割と発展段階論的なお話の組み方というべきか、経済の発展に欠かせない都市も、その生産物の輸出先がなくなってくるので、衰退は避けられない、というのが彼女の見方である。そこで提唱されるのは、「主権の分割」という処方箋だ。個人的にはこの見立ては楽観的すぎるように思える。自生的秩序がかならずしも創発的たりえるのかしら、と思っちゃうのである。

およそ政治単位たるものは、それを統一させるのをあえて避けることによって、衰退の取引の誘惑に抵抗すべきだろう。
それゆえ、根底的な不連続とは、単一の主権をより小さな複数の主権の形に分割することになるだろう。
しかもそれは、事態が崩壊と解体の段階に行きついてからではなく、そのはるか手前の、事態がまだ順調に進んでいる間になされなくてはならない。国がこのように行動すれば、分割による主権の複数化によって、経済発展にも、また増大する経済的、社会的活動の複雑さにも、無理なく対応できるだろう。
(p.334)

  • なぜ楽観的すぎるように思うかというと、(貨幣のフィードバック作用の実現性*3のほうも正直疑問があるけどそっちは一旦おいといて)労働力の移動がそこでは捨象されているからだ。そもそも地域間人口移動の方に非対称性があって、「うまくいってきた都市」はだいたいどこも地方からの人材流入によって支えられてきた面があり、本書でいうところの「都市地域」(都市経済圏、的な意味で使われている)における中心部だけでなく、近隣部・周縁部にとってもその存在は無視できないのでは、と思う。「主権分割」に際して移動の自由はどうなるのか、というところが気になった。

その他雑感

  • フィリップス曲線(物価(賃金のときもある)と失業率の関係をあらわす曲線)の考案者である、アルバン・フィリップスはもともと電気技術者だったらしい。トリビアだった(wikiをみたらワニのハンター(!)や映画館のマネージャーもやってたらしいし、LSEには経済学ではなく社会学を学びに入学したらしい。変態的多才だ)
  • 訳者あとがきでimport replacementの訳語に(「輸入代替ではなく)「輸入置換」を"思い切って"あてたと書いてあるが、だいたい文中で使われているときそれは「内製化」の意味で使われているので、もっと思い切って「輸入内製化」とかにしてしまったほうがよかったのではないか*4
  • 解説(この本はめずらしく、解説を二人の人が書いている。ひとりは元知事の政治学者、ひとりは経済学者)で知ったのだけど、トロント市はジェイコブスの誕生日を公式にジェイン・ジェイコブス・デイとして宣言していて、色んな催しものが行われているらしい。すごい。
  • バブル崩壊前で「ジャパン・アズ・ナンバーワン」とかも刊行されていた時代のものなので、全体的にめっちゃ日本(経済)が褒められているのですが、それが結構今の未来視点からみるとむず痒い感じがある。本書を通じて都市の発展における鍵概念としての(中小企業の相互共生的関係を強みとした)「インプロビゼーション」の成功例とされている日本の製造業etc.は、その後バブル崩壊後ももれなく幸せになれたのかというと...??って感じなので。
  • 上の主権の分割に対してのツッコミでも書いたんだけど、やっぱり現実に対しての提言に関しては急に夢想的になるのがちょっと「!?」ってなるんだけど、ジェイコブス御大は別に経済学者でも政策立案のブレインでもなく、あくまでもジャーナリストとしてこの著を記しているので、精緻な理論化を求めるのは、そもそも間違っているのかもしれない。この著に限らず、彼女の著作はさまざまなその後の研究に対してアイディアの種を蒔いているという意味で、とても示唆的かつインパクトのあるものであり、それは各時代・各専門領域のトップ層の学者であってもなかなかなしえないことであるのだよな。


www.youtube.com

Enjoy!

*1:意識が低すぎる目標ではあるのだが、意外とうつろうつろぼんやりしてるときの生産性と、「おっしゃ、やるぞー!」みたいなテンションのときの生産性って変わらんのではないかと最近思ったりしている。前者のほうが持続性があるのなら、アベレージでみたら正月気分でいるのが幸福かつ効率的なのかもしれない

*2:だがボリュームがえぐい。割と枝葉末節の部分がすごいボリューミーなのである。まぁそこの面白さも含めての名著なのだけど

*3:分割した主権=地域単位ごとに通貨を発行することで、通貨価値の下落がうまく地域間の購買力や輸出競争力の格差を是正すると御大はかなり楽観的に考えている。あとそもそも地域通貨ってなかなか実現はむずいのよってのは解説で元知事の政治学者が触れている

*4:難癖ですね、すみません..

猪木武徳, 2021, 『経済社会の学び方』

Introduction

新幹線でサクッと読んだ本
結論からいうと、「良くも悪くも引っ掛かりのない本」という感じだった。
スルスル食えるけど味もすぐ忘れそうな感じの。

普段結構(色々必要に迫られて泣きながら読んでるものも含め)読んでいても忙しさにかまけて
ブログとかにはまとめないんだけど、引っ掛かりがなさすぎて逆になんか書かないと読んだことすら忘れそう、と思ったので書いている次第。
だいたい経済学が何やってるか、ということに関して土地勘があるとそこまで時間をかけて読むべきものでもないのかもしれない。

すごーく偉い”大家”の先生が書く本って, たまにものすごくアクが強かったり延々と英雄譚(本人だけでなくその周辺のビッグネームたちも含む)が綴られていたりしますが、この本はまったくそんなことはなく、近年の特定のトピックにも理論にもそこまで絶賛もダメだしもすることなく淡々と進んでいく。
森嶋通夫とかその弟子の橘木先生とかの本はそのアクがもう濃縮還元状態だったけど、その分印象深い部分も多かった。下の過去記事参照)
ronri-rukeichi.hatenablog.com


おそらく著者である猪木先生がすごーい謙虚かつ良心的な学問的姿勢をもっている感じがして、その奥ゆかしさが全体的な薄味感につながっている気がしないでもないのです。

とりとめのない所感

まず読み始めると「自然科学」と対比させる形で「社会研究」という語が出てくる(あれ?「社会科学」じゃないんだ、となる人は多いと思う)。ここに「社会科学」という語を使わないことにある意味この書を通底する慎重なスタンスがあらわれている

「自然科学らしい体裁」を社会研究が(選択性を自覚することなく)とることへの違和感がその背後にあり、それがこの書のすべてといっても過言ではないのだろう。

本書を全部読み終わったところで、著者このような姿勢を堅持することの理由について無理やり二点にまとめると

  1. 自然科学と社会科学(社会研究)では知識として探究すべき真実性のレベルが違うこと
  2. 社会研究が「認識の二重構造」と不可分な関係にあるということ

となるだろう。

前者については、以下の引用部分が端的に著者の考えを表している。

すでに第1章で、「真理」と「真らしさ」を区別し、学問には厳密に数理的に論証できるような性質の研究と、厳密論証はできないが、「真らしさ」を探究するという二つの分野があると述べた。
論証する(verify)学と探究し(explore)し続ける学があり、すべての問いかけを論証する、論理的に証明することだけが「学の本質」ではない」
(p.208)

後者については、以下のように述べられている

「事実」と「その時代の人々が信じた事実」は、ほとんど重なり合う部分があるとしても、基本的には別物と考えなければならない。

これは、社会研究における「認識の二重構造」とも関係している。
端的に表現すれば、「社会研究をするものは、人々がその社会をどのように認識しているのかについて認識している」という二重性である

まぁ当たり前というか、わりと社会科学の方法論的な書とか科学哲学系とかの入門書では耳タコな話ではあるんだけど、意外と無自覚な「科学っぽさ」装備をしてしまうことについてはどれだけ警戒してもしすぎることはないのだろう、と感じた。

個人的に印象に残っている部分

読みながら「せやせや」と頷いたところだけ抜き書き。
(内容が、ってか表現がかっこいいと思っただけかもしれんですが)

演繹論理の偏重や徹底は自由な発想を妨げることがある。
「徹底する」精神は個人の思考や行動に限れば尊いものを生み出すかもしれない。

しかし社会全体に関しては、極端や徹底は必ず他者への強制につながる。
理論を徹底させて現実と混同すると、自由を奪うような思想へと変貌しやすい。

その意味では、中庸を射抜くことは必要であり、思想や政治的選択における妥協点を見つけることを軽視してはならない
(p.70)

「中庸を射抜く」って表現がかっこいいから惹かれたってのはあるんですが、なんというか自分が人生で一番尊敬してる学生時代の恩師が、こういう姿勢を体現しているような人だったので。

理論が個別具体的な事実をそのまま説明していると考えるのはあまりにも単純だ。
ある現象を解釈するときには、概念なりモデルは必要だが、そのモデルと現実が完全には合致していないからこそ、はじめて「なぜ」という真っ当な問いが生まれる。
なぜモデル通りに社会の変動や歴史の動きを説明できないのかと問うことが意味をもつのだ。

経済理論をそのまま経済政策に当てはめようとすることの問題はここにある。
理論ではこうだけれども、そうなってないのはなぜか、という「理論の否定的使用」にこそ理論の意味がある。
(p.79)

シンプルな基本モデルによる説明を試みたうえで、アノマリー(逸脱的事態、事象)をみつけることの重要性、みたいなものはビジネスでも研究でもかわらないのだろう。

こうした「証拠に基づく医療」という考え方が、公共政策、特にミクロの経済政策の分析に転用されるようになった。
ただし、医療と公共政策には根本的な違いがある。

治療の場合は、患者の治療という点では医師と患者の目指すところ(利益)は一致している。
そのためいかなる治療を選択するのかについて、「目標価値」の不一致はほとんどない。

しかし公共政策においては利害関係者の目標が一致しないことが多い。
そうした場合、どの政策を選択するのかについて、「価値」の選択をめぐる争いが表面化することは避けられない。
(p.197)

言われてみれば当然のことではあるのだけど、自分はEBMとEBPMの違いを考えるとき医学・疫学と政策科学のアプローチや対象の性質の違いばかり考えていたので、メモ。


あと、さいごに備忘として書き残しておくと、ちょくちょく色んな関連領域の研究からreferされているものとして、グローバルヒストリーものの有名どころ(「銃・病原菌・鉄」とか)に関してはいい加減積読を解消していかなきゃな..と思ったのでした。この本でもちょっと出てきてた。

年末年始の休み(休みとは言ってない)中に、あと3-4冊の積読と5本くらいの積論文を解消したいところ...


www.youtube.com

Enjoy!!

Rでパレート優越ソート

{rPref}パッケージの使い方についてのメモ。
必要に追われて調べたときに日本語資料がほぼみつからなかったので、自分の備忘ついでに書く

はじめに:パレート優越性と多目的最適化問題

パレート最適(性)」は厚生経済学などで用いられる概念として有名である。
経済学自体を専門的に学んだひとでなくても、書籍や記事などを通じて知っている人は多い概念だといえよう

一応パレート最適という概念について述べておく。
有限個の資源配分の選択肢が与えられているとする。どの選択肢をえらぶかによって、社会を構成する各主体の効用が変化(増減)するとする。
ある選択肢を別の選択肢にきりかえることで、ある主体の効用を低下させることなく、他の主体の効用を改善することができるとき、そのような改善の仕方を「パレート改善」と呼ぶ。
これ以上パレート改善できることができないような資源配分が達成されているとき、その選択肢は「パレート最適」であると呼ぶ(素人による簡単な解説おわり)。

さて、このパレート最適性の概念は多目的最適化問題にも応用することができる。
仮想ケースとして、最大化したい指標がK( K≧2)個あるとしよう。
つまり指標がC_1, C_2, \ldots, C_Kとあり、ある最適化モデルiの評価が\begin{pmatrix}c_{i1} & c_{i2} & \ldots & c_{ik} \end{pmatrix}という形で表せるとする。
このとき、他のモデルjを選べば、他のすべての指標の値を低下させることなく、ひとつ以上の指標の値を改善することができるとする。
このようなケースをモデルiはモデルjに優越されているModel i is dominated by model j)と表現する。

さて、多次元最適化の実際の話をすると、複数の最適化対象指標があるときに、
すべての指標において他の解より優れているような解(ユートピア解というらしい)がある場合というのは稀である。

なので、実用的には"パレート最適となるような解集合"を特定するというのが最適化問題におつける目標となる。
解どうしのパレート優越性を先述のような形で評価できるので、パレート優劣な解をもたない解の集合がパレート最適集合となる

また単に最適集合を求めるだけでなく、パレート優劣性による序列評価のさらなる転用として「ランク」付けができる。
集合に属する解の各々に対して、「この解にパレート優越する解はいくつあるか」を評価することができる。
各解に対して、「該当の解にパレート優越する解の個数+1」をランクとすると、すべての解にランクがつき、ランクによる分類&ソートが可能となる。
(いうまでもなく、最適集合はランク=1の集合。「完全上位互換」がいない奴らの集合体)
最適集合だけでなく準最適集合、準々最適集合のようなものも最適化問題のアウトプットとしてほしいときはランク=2,3の解を拾ってこればよい。

解のパレート最適集合をつないでできる曲線のことを、経済学で頻出するfrontierの概念になぞらえてパレート最適フロントとよぶ。

f:id:ronri_rukeichi:20211210142545p:plain
Satoshi, Kato氏の資料(下記参照, p.12)より


さて、前置きが長くなったが、{rPref}パッケージはこのようなパレート優越性の評価・ソート・分類を行ってくれるパッケージである。
本記事では一通りの使い方を記していく。

<参考URL>

基本的な使い方

rPrefは、大まかにいって

  1. 条件式指定
  2. psel()関数によるパレート優越性の評価・分類・ソートの実行。
  3. (必要なら 可視化 or データ確認)

といった流れでつかう。
せっかくなので, 2021年シーズンに通算900分以上出場して20本以上シュートを打ったJリーグの選手のなかで

  • 決定率
  • 90分あたりシュート数
  • 枠内率

のみっつの指標でパレート優越ソートすることを試みる。

##条件指定
fw_cond1 <- high( Goal_Rate ) * high(Shots_p90) * high(Target_Rate)

##ソート・分類実行
fw_pref1 <- psel(fw_smr , fw_cond1, show_level =T, top = nrow( fw_smr))

この3指標でパレート最適ソートをしたところ最適集合に含まれるランク=1の選手は12人であった。
この12人は「完全上位互換」がいないという意味で第一グループに含まれる

f:id:ronri_rukeichi:20211213132502p:plain
パレート優越ソートで最適集合とされた選手たち


この結果をみてもわかるように、パレート優越ソートによる抽出結果としての最適集合は、利用した指標のうち一つに最上位レベルのものがあった場合、別の指標の数値がよくなくても選ばれてしまうという点は実用上の欠点として理解したほうがよい。

たとえば前年ベストイレブンであるにも関わらず低空飛行を続けた鹿島のエヴェラウドは、90分あたりのシュート数がリーグトップレベルのためここに含まれているものの、枠内シュート率や決定率はおそろしく低く、少なくとも今年に関して彼を「優秀なFW」と判断するのはあまり適切ではないように思える。
しかし「完全上位互換」が何人いるかで序列化するパレート優越ソートでは、シュート数で彼を上回る人間がいないだけでエヴェラウドはトップグループに含まれてしまう。
(あと、シュート数は少ないけど決定力と枠内率はそこらへんのFWを凌駕する菊池流帆が「やぁ」って顔をのぞかせている)

L. ダミアンや前田大然、D.オリベイラや古橋、上田といった選手はカバーできているものの、このような「ノイズ」も入ってくる。
このような性質を考えれば、あくまでもパレート優越ソートは「足切り」のための手法として理解したほうがいいだろう。

カスタマイズ

条件指定関数

対象の変数をどういう形で最適化するかを指定

  • rPref::high(A)→ Aが高ければ高いほど高評価
  • rPref::low(A)→ Aが低ければ低いほど低評価
  • rPref::true(A) →条件A=TRUEであるものをFALSEよりも高評価

複数条件指定系

  • "A * B"は、AとBが最適化対象の対等な次元として組あわせられることを示す(基本はコレつかう)
  • "A & B"は, まずAで評価したのちにBで評価する、という形で対象指標間に序列を導入する。

抽出方法指定系

  • top: 上位n件を抽出
  • top_level : 上位nグループを抽出
  • at_least:最低でもn件を抽出(n件目と同じ序列のものまですべて抽出)
  • and_connected(=TRUE or FALSE):top/top_level/at_leastが複数指定されたときのみ意味をもつ。たとえばpsel(.., and_connected=T,top_level=3 , top=10)なら「上位10件かつ上位3グループに含まれるもの」を抽出。FALSEならOR条件。

範囲指定系

  • between( var, left, right):left<= var <= rightの範囲を示す(”&"と組み合わせて条件抽出などに使える)
  • around(var ,center) : varがcenterに近いほど高く評価する
  • layered/pos : layeredは優先カテゴリを設定する、たとえばlayered( Position, "DF","MF")など。pos(expr , pos_value)はtrue(expr %in% pos_value)と同じで、値を複数指定したい時とかに使う

その他

  • {dplyr}のgroup_by()に対応していてグループ化してからソート・抽出することが可能

たとえば、各クラブの空中戦勝率&地上戦勝率の地空デュエル勝率にもとづいたDFの最適集合を抽出するときは、以下のようなコードとなる

#条件指定
duel_cond <- rPref::true( Position == "D") &
 high(aDuels_Rate) *
 high(gDuels_Rate) 
#クラブを単位としてグループ化したデータにパレート優越ソートを実行し、最上位グループだけ抽出
duel_pref_grp <- psel( group_by( duel_info ,Club),
   pref = duel_cond, top_level = 1) %>% 
   as.data.frame()
#表示
duel_pref_grp %>>% select(Club ,
   PlayerName, aDuels_Rate , gDuels_Rate , .level )

この結果から最後10件だけ抽出すると、以下のようになる

f:id:ronri_rukeichi:20211213142318p:plain
クラブ別パレート優越ソートの結果(地空デュエル勝率)

最上位グループが1人しかいないクラブ(上図でいうと東京、横浜、ベガルタ)は空中戦最強と地上戦最強が同じ選手であり、上述のユートピア解が存在している。
FC東京における渡辺剛はユートピア解だ。
空中戦最強と地上戦最強が別のDFであるクラブの場合は、最適集合は2人以上になる。

機械学習パッケージの多次元最適化部分で見つけたので色々調べてみたけど、まぁなんというか、便利ではあるけど意思決定のひとつ前の段階での補助的な手法という印象をもった。




www.youtube.com



Enjoy!!

*1:見つかった日本語情報はこれくらい, この方がslideshareにあげられている資料をみたけど,かなり勉強になるものばかりだ。

各選手の先発ポジションを取得する

ほしいもの

過去記事などで触れたようにSofaScoreから各選手の試合別スタッツは取得できる。
ronri-rukeichi.hatenablog.com

だが、若干分析上不便であるのが、ポジションがGK/DF/FW/MFの4区分でしか取得*1できないことである。
集計・グループ分けしてポジション別に比較をしたい、となったときCBとSBがごっちゃになったりボランチとトップ下とSHが一緒くたになるのは都合が悪い。

そこで活用できるのがFootBoolLABの選手別ページ(例:森下の2021年版となる)

f:id:ronri_rukeichi:20211211102001p:plain
名古屋グランパス・森下選手の先発ポジション分布

上のように、その選手の先発ポジションの分布が年別に表示されている。
このページを見れば、ある選手がある年にSBで何試合、CBで何試合出たのかといったことが分かる。

このページからのデータ取得を試みる

How to

個別選手について

先発ポジ分布図について、Google Chromeの検証ツールをみて構造を確認すると、以下のように表示されている。

f:id:ronri_rukeichi:20211211110319p:plain
Chromeの検証ツール

dlタグ配下のdtタグがポジション名を、ddタグが先発試合数を表わす
ということで、以下のコードのような関数をかけば取得できる

getPosition <- function( url ){
  tgt_pg <- read_html( url)
  #Position情報を含むNodeを検出する
 pos_nodes <- html_nodes(tgt_pg, css = ".playerPos dl")

  pos_info <- lapply( pos_nodes , function(pos_node){
    pos_name <- pos_node %>>% html_node("dt") %>>% html_text()
    pos_n <- pos_node %>>% html_node("dd") %>>% html_text()
    return( data.frame( Name = pos_name , N = pos_n))
  })
  ret_df <- do.call( bind_rows , args = pos_info)
  
  return(ret_df)
} #func

#森下選手のURL
mori_url <- "https://www.football-lab.jp/player/1629426/?year=2021"
#森下選手のポジション分布を取得
mori_pos <- getPosition(mori_url)

実際に、データは以下のような形で取得できる。

f:id:ronri_rukeichi:20211211112736p:plain

クラブ単位での取得

さて、最終的にはこれを全選手について取得したデータベースを作りたい、というのが目指すところである。
各クラブ別に所属選手を全取得したDBを自動的に生成できるようにすれば、リーグ全体のDBも容易に作成できる。

方針としては、クラブごとのサマリページ(例:名古屋のページ)から
各選手ページへのリンクを取得し、そこから先ほどの関数を適用して選手別データをひろってくる。

getClubPos <- function(club_name, year = 2021){
  #対象URLを取得
  tgt_url <- paste0( "https://www.football-lab.jp/" ,club_name,"/?year=", year)
  cat(tgt_url)
  clb_page <- read_html( tgt_url)
  
  #選手名, 背番号, 個別ページへのリンクを取得
  player_links <- html_nodes(clb_page,css = ".statsTbl10 a") %>>% sapply( function(x){html_attr( x, name= "href")})
  player_names <- html_nodes(clb_page , css = ".statsTbl10 a") %>>% sapply( html_text)
  player_no <-  html_nodes(clb_page ,css = ".statsTbl10 tr td:first-child+td") %>% sapply( html_text) %>>% as.numeric
  
  
  #選手ごとのループを回す
  player_dfs <- lapply( player_links , function(p_chr){
    full_url <- paste0(  "https://www.football-lab.jp", p_chr, "?year=", year)
    player_df <- getPosition( full_url)
    
    #タテからヨコに
    df_w <- pivot_wider( player_df ,names_from= "Name", values_from="N")
    return(df_w)
  } ) #player_dfs


  #横になったものをタテにつなげる
  ret_df <- do.call(bind_rows   , args = player_dfs )
  #選手名、背番号の列を追加
  ret_df <- data.frame(PlayerName = player_names , ShirtNo = player_no ) %>>% bind_cols( ret_df)


  return( ret_df)
} #function

ngePosInfo <- getClubPos("nago")

Hadley神が創りし神関数であるtidyr::pivot_wider()を利用して、タテからヨコにデータを溶かしているのが肝です。
確認すると、以下のような形でデータができている

f:id:ronri_rukeichi:20211211134540p:plain

あとは、J1の全チームに同じ処理を回して、タテにつなげればよい。
これで、「SBとして15試合以上先発している選手」どうしの比較などができるようになった。



www.youtube.com


Enjoy!!

*1:スクレイピングをおこなうさいは、politeパッケージなどを利用して(参考URL)迷惑がかからないようにしましょう。

【データ検証】2021夏、名古屋の守備に何が起きているのか(前編)

今は見守るしかできない最高のキャプテンに、責任や焦りを感じさせないクラブでありたい。

はじめに

名古屋の「堅守」がいま、揺らいでいる。

無失点記録がどこまで伸びるか、という関心が高まるほどに堅くゴール前に鍵をかけていたシーズン序盤がウソのように、守備ブロックのいたる所にほころびができている。
いわゆるディアゴナーレを完遂できなくなった結果できてしまう「門」から、簡単に裏へのパスやクサビを入れられてしまう。

その結果、CBが釣り出されることも多くなり、昨年リーグ最少であった被シュートの枠内率の低さを支えた、「ゴール裏で最後まで粘り切る」ことを可能にするための時間や人数を確保できなくなってしまっている。

今年のはじめに、

  • 風間期→マッシモ期の守備の変化
  • リーグの他クラブと比較したときの守備の特徴

というふたつの観点からデータ分析を行い、守備に関しての昨季のレビュー記事をグラぽで執筆させていただいた(以下URL参照)。
grapo.net

本記事では、いわば中間点検的に、

  • この記事で指摘したマッシモ名古屋の守備の強みのうち、何が失われているのか
  • 同じく記事で指摘した昨季のマッシモ名古屋の守備の課題は、改善しているのか

という二点を、まずデータから読み解いていく。

その次にポジション別・個人別のスタッツを活用しつつ、チームにおきているデータ上の変化をより深く解釈していく。
最後に、私見も交えた今後への課題・展望を述べる。

そういう記事である。

使用データ

Football LABおよびSofaScoreから、2020/2021年の各指標データを利用している。
※データ取得の方法に関しては過去記事を参照(記事1, 記事2

守備に関する指標としては、上述のシーズンレビューでも用いた、以下の数値(の1試合あたり平均値)を確認していく。

  • 失点
  • 被ゴール期待値
  • 被シュート数
  • 被枠内シュートの失点率
  • 被シュート到達率
  • ペナルティエリア被侵入率
  • タックル数
  • タックル成功率
  • インターセプト
  • ファウル数
  • パス阻止率
  • クロス阻止率
  • ドリブル阻止率
  • KAGI(LABの独自指標、定義はココ

また、2021年に関しては丸山が受傷した清水戦(2021/5/15)の前後で各指標の比較を行う。すなわち、

  • 丸山受傷前(5/12の鹿島戦以前の16試合)
  • 丸山受傷後(5/22の徳島戦~8/12横浜FM戦、の6試合)

分析した時期の都合上、最新のマリノス戦(8/12)が含まれていないことや丸山受傷後の試合数はそもそもサンプル数が少ないことに留意されたい。

分析:各指標の変化の確認

守備に関する各指標について、去年/今年(丸山離脱前)/今年(丸山離脱後)で比較を行ったのが、以下の表となる。
丸山離脱後に数値が悪い方向に変化した指標を赤で、改善した指標は緑で強調している。

f:id:ronri_rukeichi:20210814170215p:plain
守備の主要指標の変化(2020-2021, 名古屋グランパス

さて、読み取れるのは以下のようなことである。

  • 各指標が全体的に悪化しているわけではなく、被シュート到達率やペナルティエリアへの被侵入率は丸山離脱後も低い水準に抑えられている。
  • 一番目を引くマイナスの変化は、被枠内シュートがゴールに結びついてしまう率が丸山離脱後、大きく高まってしまっていることである。離脱後のケース数が少ないため、もう少し今後数値が落ち着く可能性があるが、それでも枠内シュートを打たれたときの失点率が20%ポイント以上増加しているのは見逃せない。
  • タックル数が少なくなっている。タックル成功率自体は変わらないので、確実に奪えるような機会を選んで限定しているのではなく、単に奪取の試行回数が減ってしまっている
  • 上記のシーズンレビューで2021年の課題だと指摘したインターセプト数の少なさは、丸山離脱前までは2020年より明確に多く成功していたが、離脱後は2020年と同様のペースに落ちてしまっている
  • DFの地空のデュエル勝率については、興味深い反転現象が起きている。2020を含め丸山離脱前は、空中のデュエル勝率が約5割&地上でのデュエル勝率が6割、というどちらかといえば地上の戦いに比較優位をもっていた。しかし丸山離脱後は空中戦勝率が大きく上昇(48.1%→61.3%)した代わりに地上戦勝率が低下(62.9%→50.7%)している。どちらかといえば空中戦を得手とするようになっている。

守備指標の変化に関する解釈・仮説

これらの見出された変化については、
① 丸山→木本というキャスティングの変化によるもの
ACLや過密日程による疲労
③ 他クラブによる対策の精度向上

などが主な要因の候補として頭に浮かんでくる。

さらなるデータ分析に進む(次回記事)まえに、各変化点とその要因についての個人的な見立てを記す。

まず、空中戦勝率の上昇については、獲得当時のグラぽの記事(柿谷曜一朗と木本恭生はどんな選手なのか | グラぽ)でも指摘されているように、木本は空中戦の強さを特長とする選手なので①が大きく作用していると思われる。
地上戦勝率の低下は、2020年のJリーグでぶっちぎりのトップで地上戦が強いDFだった丸山(下表参照)の不在がまず大きく、そこに疲労や他チームの対策など、複合的な要因が作用していると思われる(①②③)。

f:id:ronri_rukeichi:20210814181807p:plain
地上戦のデュエルマスターだった丸山(各チームのエースを相手にしてるのに4回に3回勝つ漢) ※データ出所:Sofascore

インターセプト数に関しては、今年から(というか昨年の終盤くらいから)状況によってはかなりCHを前に出してハメに行くようになっていたが、体力的にフレッシュで周りが呼応できたこともあり、それがうまくハマっていたのが開幕当初であったといえる。
しかし疲労(②)や他クラブによる名古屋の守備組織の攻略(③)があって、うまく一人が飛び出しても周りが反応できなくなったり、むしろその穴を的確に突かれる場面が目立つようになり、ボールが引っ掛けられなくなった、というのが現状ではないだろうか。

最後に、枠内シュートの失点率の大幅上昇については、ランゲラック自体のパフォーマンスが顕著に短期間で落ちるということは考えづらい(実際見ていても絶体絶命のピンチを多く救っている)。
では、何が問題かというと、シュートを枠に打たれるにしても、

  1. 多くの人数で
  2. 一歩でも身体を寄せて
  3. 最後の瞬間まで

プレッシャーをかけるという、ゴール前の最後の粘りや一度抜かれてからの戻りのスピードが疲労等で落ちているのではないか、というのが個人的な仮説である。

上のシーズンレビューでは

「風間前監督時に比べて、2020年の名古屋の守備は何が一体改善されたのか?」というメインの問いへの答えをひとことでまとめると、「侵入を許した「後」の自ゴール前での最終局面での対応が改善した」
(中略)
シュートを打たれること自体は回避できなくても、より「質が低い」シュートを打たせることができていたのが2020年の名古屋だといえます。

といったまとめ方をしたのだけれど、その強みが失われているのが今であるように思う。

この点に関して、最近のグラぽのマリノス戦レビューではマテウスの攻め残りへの指摘が指摘されていたが、

疲労の色が濃く、ボールを奪っても即奪回し返されてしまう展開が続くなかで、マテウスだけでなく全体的にMFやFWが戻り切れなくなっているのではないだろうか。

みぎさんが昨年の時点で既に以下のような指摘をしていたが、こういった名古屋の守備の構造的問題点があまりにも痛い形で露顕しているのが今、という見方ができる。

みぎさんの指摘に自分なりの解釈も加えて、今の状況にいたる図式についての個人的な見解を述べると、

  1. もともとそこまでライン設定は高くなく、前線と連動して奪いにいくときは中盤の選手が長距離を一気に走る必要があるという構造的問題があった
  2. 今年は(昨年比で)シーズン開幕当初はかなり前から行くことを意識づけていており、まだ選手がフレッシュかつ丸山が健在であった序盤はうまくいっていたインターセプト数の上昇に反映)。
  3. 連戦の疲労で全体の運動量が低下していることに加え、裏やサイドへのカバー範囲の広さを持つ丸山が離脱した。そのため、下がらざるをえないDFラインと戻り切れないFW/MFの間隙が目立つようになり、守備の堅さが目立つようになった(おそらくシーズン最序盤の「前から奪う」の意識もここでは裏目に作用している)。
  4. (その裏返しの現象として、横浜FC戦などではラインをやや無理めにでも高めに設定しようして、裏を突かれるようになってきている)

という形になる。

「はじめに」での問題提起に引き付けていうと、DFラインを高めに設定はしないまま去年の課題=インターセプト数の少なさに取り組もうとしたが、主力の離脱と疲労が重なった今は、前から奪いに行けなくなっただけでなく守備組織から従来の強みであった「最後尾の粘り」までにも悪影響を及ぼしてしまっている、というのが私の暫定的な理解である。

これらの点について、位置情報等のデータは利用不可*1なので、シュートを打たれた瞬間の打ち手への距離や近くにいる人数を測って直接的に検証することはできないが、次の記事では個人別/ポジション別のスタッツを活用していくつか傍証的な分析を試みていきたい。

次回にむけて

本記事では、ひとまず丸山離脱のタイミングで守備に関する各数値がどのように変化したのかを把捉した。
次の記事では、

  • インターセプト数やタックル数の低下の背後にある原因
  • DF以外の守備指標の変化

などについてポジション別/個人別のスタッツを読み解いていくことで、今名古屋の守備に起きている現象が何なのか、ありうる打ち手は何か、についてさらなる理解を深めたい。
※まぁ、そんなこと言っている間にチームがまた復調してくれるのを何より願っていたりするのですが…


www.youtube.com

Enjoy!

*1:マッシモの守備組織において肝要なのは「CBがゴール前からなるべく釣り出されないこと」だと個人的には思っているので、本当はそれを直接測れたらいいんですけど