Help us understand the problem. What is going on with this article?

片対数グラフはやめてほしい。

はじめに

※ 一応申し上げておきますが、政治的主張とかではないです。念の為。

世間を賑わすコロナウイルスについて、次のようなツイートが回ってきました。


で、よく見ると、横軸が対数になった『片対数グラフ』なんです。
しかし、そもそも公衆の触れる資料に片対数グラフは馴染まないのではないか、さらに片対数グラフであることは元図にも元Tweetにも明記されておらず誤解を招きかねないのでは、と思いました。



そんなわけで、折角なので勉強がてら「逓増」「正比例」「逓減」のデータを用意して、片対数グラフを取ったときにどのようにプロットされるか比較してみましょう。(R言語)

というお話。

データ

というわけで、逓増型のp、正比例型のq、逓減型のrのデータを用意しました。

myData <- data.frame(x = 1:100)
myData <- mutate(myData, p = exp(x))
myData <- mutate(myData, q = (exp(100) - exp(1))/(100 - 1) * (x - 1) + exp(1))
myData <- mutate(myData, r = -exp(101 - x) + exp(100) + exp(1))

データの全貌
x p q r
1 1 2.71828182845905 2.71828182845905 2.71828182845905
2 2 7.38905609893065 2.71526984021832e+41 1.69921410988144e+43
3 3 20.0855369231877 5.43053968043664e+41 2.32432004705525e+43
4 4 54.5981500331442 8.14580952065496e+41 2.55428366989571e+43
5 5 148.413159102577 1.08610793608733e+42 2.63888255895601e+43
6 6 403.428793492735 1.35763492010916e+42 2.67000475098725e+43
7 7 1096.63315842846 1.62916190413099e+42 2.68145396559972e+43
8 8 2980.95798704173 1.90068888815282e+42 2.68566589627322e+43
9 9 8103.08392757538 2.17221587217465e+42 2.68721537897563e+43
10 10 22026.4657948067 2.44374285619649e+42 2.6877854018063e+43
11 11 59874.1417151978 2.71526984021832e+42 2.6879951014867e+43
12 12 162754.791419004 2.98679682424015e+42 2.68807224568794e+43
13 13 442413.39200892 3.25832380826198e+42 2.68810062545359e+43
14 14 1202604.28416478 3.52985079228381e+42 2.68811106578591e+43
15 15 3269017.37247211 3.80137777630565e+42 2.68811490656953e+43
16 16 8886110.52050787 4.07290476032748e+42 2.68811631951486e+43
17 17 24154952.7535753 4.34443174434931e+42 2.6881168393084e+43
18 18 65659969.1373305 4.61595872837114e+42 2.68811703052976e+43
19 19 178482300.963187 4.88748571239297e+42 2.68811710087617e+43
20 20 485165195.40979 5.15901269641481e+42 2.68811712675516e+43
21 21 1318815734.48321 5.43053968043664e+42 2.68811713627551e+43
22 22 3584912846.13159 5.70206666445847e+42 2.68811713977785e+43
23 23 9744803446.2489 5.9735936484803e+42 2.68811714106629e+43
24 24 26489122129.8435 6.24512063250213e+42 2.68811714154028e+43
25 25 72004899337.3859 6.51664761652396e+42 2.68811714171466e+43
26 26 195729609428.839 6.7881746005458e+42 2.6881171417788e+43
27 27 532048240601.799 7.05970158456763e+42 2.6881171418024e+43
28 28 1446257064291.48 7.33122856858946e+42 2.68811714181108e+43
29 29 3931334297144.04 7.60275555261129e+42 2.68811714181428e+43
30 30 10686474581524.5 7.87428253663312e+42 2.68811714181545e+43
31 31 29048849665247.4 8.14580952065496e+42 2.68811714181588e+43
32 32 78962960182680.7 8.41733650467679e+42 2.68811714181604e+43
33 33 214643579785916 8.68886348869862e+42 2.6881171418161e+43
34 34 583461742527455 8.96039047272045e+42 2.68811714181612e+43
35 35 1586013452313431 9.23191745674228e+42 2.68811714181613e+43
36 36 4311231547115195 9.50344444076412e+42 2.68811714181613e+43
37 37 11719142372802612 9.77497142478595e+42 2.68811714181614e+43
38 38 31855931757113756 1.00464984088078e+43 2.68811714181614e+43
39 39 86593400423993744 1.03180253928296e+43 2.68811714181614e+43
40 40 235385266837020000 1.05895523768514e+43 2.68811714181614e+43
41 41 639843493530054912 1.08610793608733e+43 2.68811714181614e+43
42 42 1739274941520500992 1.11326063448951e+43 2.68811714181614e+43
43 43 4727839468229346304 1.14041333289169e+43 2.68811714181614e+43
44 44 12851600114359308288 1.16756603129388e+43 2.68811714181614e+43
45 45 34934271057485094912 1.19471872969606e+43 2.68811714181614e+43
46 46 94961194206024482826 1.22187142809824e+43 2.68811714181614e+43
47 47 258131288619006754826 1.24902412650043e+43 2.68811714181614e+43
48 48 701673591209763143780 1.27617682490261e+43 2.68811714181614e+43
49 49 1907346572495099789482 1.30332952330479e+43 2.68811714181614e+43
50 50 5184705528587072045226 1.33048222170698e+43 2.68811714181614e+43
51 51 14093490824269388579266 1.35763492010916e+43 2.68811714181614e+43
52 52 38310080007165769156260 1.38478761851134e+43 2.68811714181614e+43
53 53 104137594330290885496246 1.41194031691353e+43 2.68811714181614e+43
54 54 283075330327469394762884 1.43909301531571e+43 2.68811714181614e+43
55 55 769478526514201752582842 1.46624571371789e+43 2.68811714181614e+43
56 56 2.091659496013e+24 1.49339841212008e+43 2.68811714181614e+43
57 57 5685719999335932014822048 1.52055111052226e+43 2.68811714181614e+43
58 58 1.5455389355901e+25 1.54770380892444e+43 2.68811714181614e+43
59 59 42012104037905144312428240 1.57485650732662e+43 2.68811714181614e+43
60 60 1.14200738981568e+26 1.60200920572881e+43 2.68811714181614e+43
61 61 3.10429793570192e+26 1.62916190413099e+43 2.68811714181614e+43
62 62 8.43835666874145e+26 1.65631460253317e+43 2.68811714181614e+43
63 63 2.29378315946961e+27 1.68346730093536e+43 2.68811714181614e+43
64 64 6.23514908081162e+27 1.71061999933754e+43 2.68811714181614e+43
65 65 1.69488924441033e+28 1.73777269773972e+43 2.68811714181614e+43
66 66 4.60718663433129e+28 1.76492539614191e+43 2.68811714181614e+43
67 67 1.25236317084221e+29 1.79207809454409e+43 2.68811714181614e+43
68 68 3.40427604993174e+29 1.81923079294627e+43 2.68811714181614e+43
69 69 9.25378172558779e+29 1.84638349134846e+43 2.68811714181614e+43
70 70 2.51543867091917e+30 1.87353618975064e+43 2.68811714181614e+43
71 71 6.83767122976274e+30 1.90068888815282e+43 2.68811714181614e+43
72 72 1.85867174528413e+31 1.92784158655501e+43 2.68811714181614e+43
73 73 5.0523936302761e+31 1.95499428495719e+43 2.68811714181614e+43
74 74 1.37338297954018e+32 1.98214698335937e+43 2.68811714181614e+43
75 75 3.733241996799e+32 2.00929968176156e+43 2.68811714181614e+43
76 76 1.01480038811389e+33 2.03645238016374e+43 2.68811714181614e+43
77 77 2.75851345452317e+33 2.06360507856592e+43 2.68811714181614e+43
78 78 7.49841699699012e+33 2.09075777696811e+43 2.68811714181614e+43
79 79 2.03828106651267e+34 2.11791047537029e+43 2.68811714181614e+43
80 80 5.54062238439351e+34 2.14506317377247e+43 2.68811714181614e+43
81 81 1.50609731458503e+35 2.17221587217466e+43 2.68811714181614e+43
82 82 4.09399696212745e+35 2.19936857057684e+43 2.68811714181614e+43
83 83 1.11286375479176e+36 2.22652126897902e+43 2.68811714181614e+43
84 84 3.02507732220114e+36 2.2536739673812e+43 2.68811714181614e+43
85 85 8.22301271462291e+36 2.28082666578339e+43 2.68811714181614e+43
86 86 2.23524660373471e+37 2.30797936418557e+43 2.68811714181614e+43
87 87 6.07603022505687e+37 2.33513206258775e+43 2.68811714181614e+43
88 88 1.651636254994e+38 2.36228476098994e+43 2.68811714181614e+43
89 89 4.48961281917435e+38 2.38943745939212e+43 2.68811714181614e+43
90 90 1.22040329431784e+39 2.4165901577943e+43 2.68811714181614e+43
91 91 3.31740009833574e+39 2.44374285619649e+43 2.68811714181614e+43
92 92 9.0176284050343e+39 2.47089555459867e+43 2.68811714181614e+43
93 93 2.45124554292009e+40 2.49804825300085e+43 2.68811714181614e+43
94 94 6.6631762164109e+40 2.52520095140304e+43 2.68811714181614e+43
95 95 1.81123908288902e+41 2.55235364980522e+43 2.68811714181614e+43
96 96 4.92345828601206e+41 2.5795063482074e+43 2.68811714181614e+43
97 97 1.33833471920427e+42 2.60665904660959e+43 2.68811714181614e+43
98 98 3.6379709476088e+42 2.63381174501177e+43 2.68811714181614e+43
99 99 9.88903031934695e+42 2.66096444341395e+43 2.68811714181614e+43
100 100 2.68811714181614e+43 2.68811714181614e+43 2.68811714181614e+43

普通にプロット

まずは対数軸を取らずシンプルにプロットしましょう。
こんな感じでプロット。

コード
plot(x = myData[[1]], y = myData[[2]], type = "l", 
     xlim = c (1, 100),
     ylim = c (exp(1), exp(100)),
     col = "blue")
lines(x = myData[[1]], y = myData[[3]], col = "red")
lines(x = myData[[1]], y = myData[[4]], col = "green")

  • 逓増 = 青
  • 正比例 = 赤
  • 逓減 = 緑

graph1.png

これを見ると、それぞれ逓増・正比例・逓減していることが視覚的に理解できます。

片対数プロット

plot()の引数でlog = "y"と設定すると、片対数グラフを作れます。

コード
plot(x = myData[[1]], y = myData[[2]], 
     type = "l",
     xlim = c (1, 100),
     ylim = c (exp(1), exp(100)),
     log = "y", col = "blue")
lines(x = myData[[1]], y = myData[[3]], col = "red")
lines(x = myData[[1]], y = myData[[4]], col = "green")

  • 逓増 = 青
  • 正比例 = 赤
  • 逓減 = 緑

graph2.png

これを見ると、逓増グラフが「直線」に変換されることから、 $ \log_e y = ax $ すなわち $ y = e^{ax} $ の関係があることが分かります(本例では $ a = 1 $ )が、逓減と正比例の曲線はほとんど同じ形に変換されてしまいます。

そういうわけで

これは見れば明らかな話だと思いますが、「逓減」と「正比例」の見分けがほぼ付きません。何ならほぼ同様の評価になってしまいます。
というわけで、片対数グラフは知識がないと明らかに誤解を生んでしまいますので、学術目的ならまだしも、大衆向けの資料には不向きです

みんなだいすきWikipediaにも、以下のような記述があります。

対数スケールはデータを表現するのに非常に有効な手段であるが、対数目盛の概念を良く知らない読み手に対して、はっきりとラベル付けされていない状態で使うと、誤解を与えるおそれがある。 ... 対数グラフだと明確にラベルされていない、もしくは対数目盛の知識を持っていない読み手に提示された対数グラフは、実際には大きく異なる大きさであるデータ値を、同じくらいの値に見えるような表現に一般的にはなってしまう。対数目盛を誤って使用すると大きく異なる値 (10と1万など) が近くに見える (対数目盛では10と1万は1と4になる)。小さな値の場合は負の値になる場合もある。

対数目盛を誤って使用すると、実際には指数関数的、非常に急速に高い値に向かって上昇する法則を持つ関係が線形関係にあるように見えてしまう。ほとんどユーモラスな表現であるが、「太いマーカーで書いた両対数プロットは何でも線形に見える」と言われている。
―― 誤解を与える統計グラフ - Wikipedia

解釈

これは私見ですが、対数軸だと分かっていれば誤解は減るでしょう。
グラフ上の「直線」は $ y = e^{ax} $ の関係を表し、直線の傾きは全体的な増加の強さである $ a $ を表します。

統計や数学が苦手な方は、 『$ y = e^{ax} $ の関係があるか否かを判断する材料だと割り切っておく』のが無難です。直線であれば、このような関係があると言えます。
もう少し踏み込んでもOKであれば、全体だけでなく 特定時点の前後の傾き $ a $ の変化に注目して、増減ペースの変化を把握する とよいと思います。

直線の傾き ( a )について

これは追加サンプルで検証してみましょう。

myData <- mutate(myData, s = exp(2*x))

今、「 $ y = e^{x} $ (青) 」と 「 $ y = e^{2x} $ (茶) 」を用意しました。

これを通常通りプロットすると、$ y = e^{2x} $ の漸増ペースが大きいので上手く比較できません。

コード
plot(x = myData[[1]], y = myData[[2]], type = "l", 
     xlim = c (1, 100),
     ylim = c (exp(1), exp(100)),
     col = "blue")
lines(x = myData[[1]], y = myData[[5]], col = "brown")

graph3.png

一方で片対数グラフにプロットすると、二本の直線として比較できます。

コード
plot(x = myData[[1]], y = myData[[2]], type = "l", 
     xlim = c (1, 100),
     ylim = c (exp(1), exp(200)),
     col = "blue", log = "y")
lines(x = myData[[1]], y = myData[[5]], col = "brown")

graph4.png

そういうわけで、いずれも漸増している点は同じですが、漸増のペースの違いによって傾き $ a $ が変化することが分かると思います。

Tweetのグラフ解釈(私見)

https://www.ft.com/content/a26fbf7e-48f8-11ea-aeb3-955839e06441

引用元(2020/03/19 取得):
Coronavirus tracked: the latest figures as the pandemic spreads | Financial Times

冒頭のTweetで引用されていた上記グラフでいえば、日本のグラフもほぼ直線状であり、全体として $ y = e^{ax} $ の関係性があるといえるでしょう。
ただし、相対的には(他国に比べれば)全体的な増加傾向は緩やか( $ a $ が小さい)と言えるのであって、絶対的には(国内だけに目を向ければ)指数的に増加していること自体は変わっていないと評価するほうが良いと思います。
なので、「感染拡大が抑制されているか?」と言えば、「そうとも言える( $ a $ が小さい)」し、「そうではない(指数的に増加している)」とも言えると思います。
一方で形状が直線であり傾きに変化がない点に鑑みれば、「(良くも悪くも)現状維持」が続いている という解釈も可能でしょう。

さらに補足すると、そもそも $ a $ は感染防止の成果だけでなく検査数、人口規模、経済活動等の影響も受け得ると考えられるので、正直このグラフだけでは何とも言えない気もします。

おわりに

というわけで、「何の断りもなく」対数軸を使うのは不親切なので避けたほうがよいでしょう。
勿論適切に使う分にはいいんですけどね。
皆が統計の素養があるわけではないのでニュース記事とかTweetとかではやめてほしいですね。1 2



というお話でした。

おしまい。


  1. 擁護しておくと、生存関数とか人口予測とかには片対数グラフはよく使われるもので、用途自体に問題があるわけではないと思います。さらに、幅広いデータを一度に比較することが可能になる点で「知っている人からすれば」大変便利なものです。ただ、公衆向けの資料であれば「指数」とか「対数」とかを知らない人の存在も考慮すべきでしょう。 

  2. 今回引用したグラフには、記事作成者独自の解釈までグラフ上に書かれていますが、これも本来は不適切でしょう。ってじっちゃんが言ってました。
    すなわち、図表は「事実」のみを表現すべきです。グラフが語らない部分、つまりは解釈と切り離しておくことで、①「事実⇨解釈」という論理性が明確になる、②読者に(特に作成した図表が後に引用される際に)親切である、③事実の歪曲化を防止する、④図表の客観性を保てる、等のメリットがあります。 

zakkiiii
プログラミングが不得手なゴリゴリの文系大学院生。R言語中心。最近はPython勉強中。
https://zakkii11.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした