データ分析メモと北欧生活

旧Untitled Note. データ分析、計量経済・統計とR、水産管理、英語勉強、海外生活などについて備忘録や自分の勉強のOutputの場所として

MENU

【R】パッケージインストール時の failed to lock directoryというエラー。

Rのglueというパッケージを更新しようとしたときに以下のようなエラーメッセージが出た。

Error in install.packages : ERROR: failed to lock directory ‘C:\Program Files\R\R- 3.6.1\libraryfor modifying 
Try removing ‘C:\Program Files\R\R-3.6.1\library/00LOCK’

なんじゃ?と思ったけど、ぐぐったら、書いてあるとおりのフォルダを削除すればいいらしいので削除したらすんなりインストールできた。

なんのエラーだったのだろうか。

参考
community.rstudio.com

【R】ロジット・プロビットでの限界効果とデルタメソッドによる標準誤差の計算

以前に限界効果の計算について書いた。

keita43a.hatenablog.com


前回の記事で触れていないのが、限界効果の標準誤差についてである。
仮に、ロジット(ロジスティック回帰)やプロビットの推定結果が統計的に有意であっても、
その結果によって計算した結果が同じとは限らない。
同じように有意性の検定を行うには標準誤差を計算する必要がある。

どうやって計算するのか?

margins パッケージ

上述の私の記事は2018年の5月8日に書いたのだが、その直後にmarginsの詳細な説明がアップされたらしく、以下の記事ではmarginsオブジェクトのsummary()によって標準誤差とp-valueまで計算してくれる。

library(sampleSelection)  # データを使う
library(margins)                      # 限界効果の計算

# データのロード
data("Mroz87")

# ロジットの推定

logit1 = glm(lfp ~ nwifeinc + educ + exper + exper^2+age+kids5+kids618,
             family = binomial(link = "logit"), data = Mroz87)

# 限界効果の計算
logi_mar = margins(logit1)

# 限界効果の結果
summary(logi_mar)

結果は以下の通り。

> summary(logi_mar)
   factor     AME     SE       z      p   lower   upper
      age -0.0165 0.0023 -7.0591 0.0000 -0.0211 -0.0119
     educ  0.0411 0.0073  5.6025 0.0000  0.0267  0.0555
    exper  0.0217 0.0020 10.9056 0.0000  0.0178  0.0256
    kids5 -0.2608 0.0319 -8.1835 0.0000 -0.3233 -0.1984
  kids618  0.0105 0.0133  0.7941 0.4271 -0.0155  0.0366
 nwifeinc -0.0037 0.0015 -2.4801 0.0131 -0.0066 -0.0008

かんたんである。

しかし、多項ロジットを推定するmlogitパッケージ等、marginsが受け付けないオブジェクトについても計算したい時がある。
手で計算する方法は前の記事で解説したが、標準誤差(スタンダード・エラー)はどうやって計算するのだろうか?

デルタ・メソッド

そこで使うのがデルタメソッドという方法である。

たとえば二項従属変数(0か1か)のモデルの場合は、選択の確率pをモデル化するアプローチであった。(前の記事参照)
積分布関数 F(\cdot)を特定化して、それが説明変数 Xとパラメータ \betaの条件付き確率になるようなモデルである。

  p=Pr(y|X)=F(X\beta)

そして、限界効果は説明変数 Xのうち、ある一つの変数 x_{k}が1単位増えたときの確率の変化であった。

 MPE = \frac{\partial P(y=1|X)}{\partial x_{k}} = \beta_{k} f(X\beta)

ここで f(\cdot)は、 F(\cdot)微分なので、確率密度関数になる。
このMPEを \betaの関数として、 MPE=h_{k}(\beta)とする。

説明変数の数が Kであるとすると、 MPE=h_{k}(\beta)の勾配は

 \nabla h_{k}(\beta) = [ \beta_{k}x_{1}f'(X\beta),\beta_{k}x_{2}f'(X\beta),\ldots, \beta_{k}x_{k}f'(X\beta) + f(X\beta), \ldots, \beta_{k}x_{K}f'(X\beta)  ]


となる。ここで f'(\cdot) f(\cdot)微分である。
そして、デルタメソッドによって、限界効果の分散は

 [\nabla h_{k}(\beta)]\hat{V}[\nabla h_{k}(\beta)]'

となる。 \hat{V} \betaの分散共分散行列である。
標準誤差は、この値のルートを取れば得ることができる。

具体的な解説は、英語だがパパ・ウールドリッジと呼ばれるWooldridgeの以下の本の15章に書いてある。*1

なぜデルタメソッドが使えるのか、という証明などはここでは割愛する。*2

ブートストラップ

ここでは割愛するが、ブートストラップによって標準誤差を求めることも可能である。
とくにサンプルが小さい場合はこちらのほうがよいと思う。

デルタメソッドの実装

ここではデルタメソッドをRで実装してみる。
ざっくりいうと、AMPE.funという係数を引数にとる限界効果を計算する関数を作り、
その与えた引数の周りで微分して勾配を数値的に得る。
得た勾配を使って上述のデルタメソッドを手動で書いて計算するという順である。

# 係数を引数として、限界効果を計算する関数を作る。
AMPE.fun <- function(betas){
  temp = logit1  # 推定したglmのオブジェクトを受け渡す
  temp$coefficients <- betas   # 指定した係数を受け渡す
  P_logi = temp$fitted         # 確率を計算する。
  MPE = sapply(temp$coefficients, function(x) P_logi*(1-P_logi)*x) # MPEを計算する。手計算
  AMPE = colMeans(MPE)         # 各係数の平均限界効果を出す。
}

# 関数のチェック
tmp = AMPE.fun(logit1$coefficients)

# 勾配を数値計算
library(numDeriv)
grad <- jacobian(AMPE.fun, logit1$coefficients)

# 標準誤差の計算
ses = matrix(sqrt(diag(grad%*%vcov(logit1)%*%t(grad))), nrow = length(logit1$coefficients),byrow = TRUE) 

# 係数と標準誤差を合わせて表示
coefs = tidy(tmp) %>% as_tibble(cbind(nms = names(.), t(.))) %>%
  cbind(ses) %>%
  arrange(names)%>%
  mutate_at(c("x","ses"), list(~round(.,3))) # 小数点第三位で四捨五入

結果は以下の通り。
marginsによる計算と比べてみる。

> summary(logi_mar)
   factor     AME     SE       z      p   lower   upper
      age -0.0165 0.0023 -7.0591 0.0000 -0.0211 -0.0119
     educ  0.0411 0.0073  5.6025 0.0000  0.0267  0.0555
    exper  0.0217 0.0020 10.9056 0.0000  0.0178  0.0256
    kids5 -0.2608 0.0319 -8.1835 0.0000 -0.3233 -0.1984
  kids618  0.0105 0.0133  0.7941 0.4271 -0.0155  0.0366
 nwifeinc -0.0037 0.0015 -2.4801 0.0131 -0.0066 -0.0008
> coefs
        names       x    ses
1 (Intercept)  0.1518 0.1524
2         age -0.0165 0.0026
3        educ  0.0411 0.0078
4       exper  0.0217 0.0025
5       kids5 -0.2608 0.0365
6     kids618  0.0105 0.0133
7    nwifeinc -0.0037 0.0015

見てみると小数点第3位まではあっているのだが、小数点第4位からずれている物が多い。
これは、おそらくgradient関数による数値的に勾配を求めるプロセスが不正確であるからと思われる。
実際には手で計算した式を与えて計算するほうが正確であろう。(面倒だが・・・)

glmなどでロジスティック回帰を行う場合にはmarginsパッケージを使うのが良さそうだ。
Stataの結果を出すことを意識しているので計算に信頼が置けそうである。

*1:有名なWooldridgeの本は2冊あり、一冊はベイビーウールドリッジと呼ばれるIntroductory Econometrics, そしてパパウールドリッジと呼ばれるEconometric Analysis of Cross Section and Panel Dataである。

*2:興味がある方は、UBCのVadim Marmer教授のノートをあげておきます。

回帰分析で変数の対数を取る理由はなんでだっけ?

回帰分析をやっていてふと基本的な疑問にひっかかった。

なぜ、そしていつ変数の対数変換をやるのか?

統計学計量経済学をやった人には基本的なこの質問なのだが、復習ということで本やウェブを漁った備忘録を残しておく。

対数変換とは?

対数変換とは文字通り、変数の対数を取ることである。ことわりがない限り、自然対数を意味している場合が多い。
つまり対数の底がネイピア数(Napier's constant)である。

ある変数Xに対して、 \log_{e} Xが対数変換である。自然対数はよく \ln Xと表記される。

回帰分析の対数変換

ある従属変数Yに対する説明変数Xの影響を測りたい場合に以下のような線形のモデルを使用する。

 Y=\beta X + \varepsilon

説明変数・従属変数、そして両方を対数変換する場合として以下の3つのバリエーションが有る。
このとき、パラメータ \betaの解釈が異なることに注意である。

  • 線形ー対数モデル linear-log

 Y = \beta \ln X +\varepsilon

このとき、 \beta はXが1%増加したとき、Yがいくら(もとの単位で)増加するかを示す。

  • 対数ー線形モデル log-linear

 \ln Y = \beta X +\varepsilon


ここでは逆に、 \beta はXが1単位増加したとき、Yが何%増加するかを示す。

  • 対数ー対数モデル log-log

 \ln Y = \beta \ln X +\varepsilon

この場合は \betaは後述する弾力性と呼ばれるもので、Xが1%増加したときにYが何%増加するかを示す。
経済学ではlog-linearとlog-logをよく見る印象である。

なぜ対数変換を行うのか?

なぜわざわざ対数変換を行うのか?これにはいくつかの理由がある。
基本的には変数の性質と回帰分析の仮定の問題、そして推定パラメータの解釈の問題だ。

1. 非線形な関係を線形モデルで表す。

たとえば説明変数が増加するにつれ、従属変数も増加するがその増加率が一定でない場合、線形モデルを当てはめるのは適当ではない。

今話題の新型コロナウイルス感染症、COVID-19の患者数増加グラフもその一例で、Y軸を見ればわかるように底が10の対数を取っている。
f:id:keita43a:20200324014055p:plain


ここではgapminderのデータを使ってRで例示してみる。

library(gapminder)
library(ggplot2)
# 平均寿命と一人あたりGDP

ggplot(gapminder, aes(x =gdpPercap, y = lifeExp))+
  geom_point() + 
  labs(x = "一人あたりGDP", y = "平均余命")

f:id:keita43a:20200321013512p:plain

その場合に、対数変換を行う。

ggplot(gapminder, aes(x =log(gdpPercap), y = log(lifeExp)))+
  geom_point() + 
  labs(x = "一人あたりGDP(対数)", y = "平均余命(対数)")

f:id:keita43a:20200321013704p:plain

2. 変数の分布が偏っている。

変数の分布が正規分布でない場合、回帰分析の推定や統計的検定のための仮定が成り立たなくなる。

ggplot(gapminder, aes(x = gdpPercap)) +
  geom_histogram() + 
  labs(x = "一人あたりGDP", y= "頻度")

f:id:keita43a:20200321013917p:plain

対数変換することによって、分布が正規分布に近くなる。
特に正の値しか取らない変数の場合は、分布が偏っている事が多いため、対数を取ることが多い。(例えば賃金)
また、そういった場合は回帰分析後の予測値が0以下にならないという利点もある。

ggplot(gapminder, aes(x = log(gdpPercap))) +
  geom_histogram() + 
  labs(x = "一人あたりGDP(対数)", y= "頻度")

f:id:keita43a:20200321014302p:plain

3. 極端な数値の効果を低減する

もしデータに極端に大きい・小さい数値が含まれていても、その影響を軽減できるという効果もある。
たとえばlog(100)は4.60517で、log(10000)は9.21034になる。

http://fmwww.bc.edu/ec-c/F2007/228/EC228.f2005.nn06.pdf

4. 推定パラメータの解釈

推定されたパラメータの解釈は、対数変換したかどうか、またどの変数を対数変換したかどうかによって変わる。
特に経済学などでは、弾力性の推定に興味がある場合に、対数ー対数モデルで推定したパラメータが弾力性そのものであるため、
対数ー対数モデルを多く使用する傾向がある。しかし、これは1点目の変数間の関係に依存している。
つまり、経済学的に弾力性を推定したい、という場合は、明示されていなくても暗示的に対数ー対数モデルになるような変数関係があると仮定されている。

ちなみに弾力性(elasticity)とは、変数同士の関係で、ある変数の変化率に対する別の変数の変化率を表したものである。具体的にはある変数が1%変化した場合にもう一方の変数が何%変化するか?という数値が弾力性である。
経済学で一般的なのは需要の価格弾力性である。価格が1%上がったときに、需要が何%減少するか?を推定するときに(内生性などは置いといて)、対数を取った需要量と価格を使って回帰式を推定すれば、推定されたパラメータが、価格弾力性そのものになる。

 \ln Q = a + \beta \ln P + \varepsilon

なぜか?
価格弾力性を数式で定義すると以下の様になる。

 \frac{dQ/Q}{dP/P}

つまりdQはQの変化量なので、dQ/Qは需要量Qが何%変化したかを表す。Pも同様である。

そして、上の回帰式を全微分する。

 \frac{dQ}{Q} = \beta \frac{dP}{P}

これをアレンジすると

  \frac{dQ/Q}{dP/P} = \beta

となるので、 \betaが価格弾力性となるという論理である。

5. 経済モデルから導かれた式の推定

これは3の理由に近いが、経済モデルから導かれたモデル式を推定するのに、対数変換すると線形になって推定しやすいから、というのがある。
経済学でよく使われるコブ・ダグラス関数系の生産関数を例にすると

 Y = AK^{\alpha}L^{\beta}

という関数があるとする。ここでAは技術、Kは資本、Lは労働を表すとする。
仮に資本と労働のデータがあったとしても、このままでは線形回帰はできない。
そこで、両辺の対数を取って誤差項を加えると

 \ln Y = \ln A + \alpha \ln K + \beta \ln L + \varepsilon

となるので、線形回帰を行うことで、 \alpha \betaが推定できる。

まとめ


まとめると、回帰分析で変数の対数を取るかどうかは変数そのものの性質(正の値しか取らない、分布の偏り)と、変数同士の関係(線形か非線形か)をある程度考えた上で決める。
さらに、経済学などのモデルから推定式を得られる場合はモデル解釈の都合から対数を取る。

しかし、これらは独立した理由ではなくそれぞれ関係した理由である。たとえばコブダグラスのモデルのパラメーターはそれ自体は弾力性なので、log-logで推定することに正当性があるし、
正の値しか取らないような変数は特にゼロ付近で他の変数と線形関係があるとは言えない場合が多い、などである。

機械的に対数を取るかどうか、ではなく事前のデータの理解と、推定したい仮説やモデルが重要になるということだろう。

参考

Wooldridge, Introductory Econometrics
http://fmwww.bc.edu/ec-c/F2007/228/EC228.f2005.nn06.pdf

Benoit, Linear Regression Models with Logarithmic Transformations
https://kenbenoit.net/assets/courses/ME104/logmodels2.pdf


福井県立大学、経済統計学のノート
http://www.s.fpu.ac.jp/u-sano/macro/log01.pdf

ノルウェーの小麦粉の種類多すぎ問題

突然餃子が食べたくなったが、あいにくのCOVID-19流行によるロックダウンでお店は開いてないし、そもそも日本で食べられるような餃子がある中華料理店に心当たりがない。

作るか、となったが問題は餃子の皮である。
作ればいいんじゃね?と検索してみたが、どうやら薄力粉と強力粉を混ぜてつくるらしい。

そもそも薄力粉と強力粉とは?

最低限食えるだけの料理しかしてこなかったため、ふとそんな根本的な疑問が湧いたので調べてみたが、
どうやら、小麦粉に含まれている「グルテン」というタンパク質の含有量に寄るらしい。
実際の定義は見るサイトに寄って若干の違いがあったのだが、だいたいグルテンの含有量が6~8%のものが薄力粉11.5%~13.5%のものが強力粉で、その間が中力粉とか準強力粉とか言われるらしい。

じゃあグルテンフリーの小麦粉は無力粉

というかグルテンってタンパク質だったのか!

さらにググると、グルテンは日本語で麩質と言う。

麩ってグルテンだったのか!

日々勉強である。

グルテンというのは弾力性があり、かつ粘っこい性質がある。グルテニンとグリアジンという2つのタンパク質が絡み合ってグルテンになるらしい。グルテンフリーのケーキとかがボロボロと崩れるのは、グルテンの粘つく成分がないからである。

パンなどを作るときには強力粉を使う。イースト菌が出すガスを逃さないようにするためで、パンが膨らむのはこのせいである。ケーキなどふんわり、さっくりしたものを作る時は薄力粉を使う。うどんなどは中力粉を使うらしい。餃子の皮もここに入るため、強力粉と薄力粉を混ぜるのだ。

ノルウェーの小麦粉

というわけで、ノルウェーの小麦粉を調べてみた。以下が調べたものの備忘録であるが、ノルウェー語もわからないし料理も大してしない私が調べたものなので、もし間違いなどがあればコメントいただければ幸いである。

もしノルウェーのスーパーに行って、「小麦粉多すぎ!どれ買えばいいの?」と思って検索した人がいるならば、
先にいうとSiktet Hvetemelがいわゆる一般的な小麦粉である。

ノルウェー人はやたらとパンにこだわりがあり、家でベイキング(パンやクッキーなどを焼く)する人も多いので、小麦粉にもやたら種類がある。

f:id:keita43a:20200323061418j:plain
小麦粉の棚

まるまる棚一つ小麦粉である。(厳密には「小麦」でないものもある」

小麦粉はノルウェー語でmelである。
しかし、穀物の種類としての小麦はhveteであり、一般的な小麦粉はhvetemelというので、melは穀物の粉、という意であろう。

一番普通のやつ

f:id:keita43a:20200323062738j:plain

一番普通の小麦粉はSiktet Hvetemelというやつらしい。Siktetというのは「ふるいにかけた」という意味であり、精白された小麦粉である。一般的に「小麦粉」と言ったときに想像する白い粉である。

タンパク質の含有量は100g中11.2gなので、11.2%だ。上の基準でいうとめっちゃ強力粉寄りの中力粉ということになる。

全粒粉 Sammalt Hvetemel

f:id:keita43a:20200323064144j:plain

ノルウェー語のSammaltは英語ではwholemealと訳されるがこれはイギリスでwhole-wheatを指すらしいので日本語では全粒粉であると思われる。

ここには売ってなかったが、Grovmaltの他に、finmaltもある。これは粗さの違いで、Grovmaltの方が粗い。

ホールグレイン Helkorn

f:id:keita43a:20200323065624j:plain

これは英語でいうWhole grainになる。
Whole grainとWhole wheatの違いがよくわからないのだが、この記事によれば
Whole wheatは小麦の穀粒のうち表皮、胚芽、胚乳が含まれているが、whole grainは文字通り穀粒すべてが使われているという。

とりあえずめっちゃ香ばしいっぽい。

オーツ粉

f:id:keita43a:20200323064144j:plain
右の方である。

日本語ではカラスムギというらしいが、オート麦とかオーツのほうが馴染みがあるのではないだろうか。


大麦粉 Byggmel

f:id:keita43a:20200323065624j:plain
左の黄土色のパッケージ

大麦粉である。
グルテンが含まれないため、パンなどを焼くと膨らみにくい。
ノルウェーではワッフルなどにも使われているらしい。そういえばノルウェーワッフルはペラペラである。
ライ麦と同様、寒い地方に強いらしい。

ライ麦粉 Rugmel

f:id:keita43a:20200323070712j:plain

ライ麦は小麦に比べて寒さに強いらしく、北欧などで割とメジャーだったようだ。
グルテン自体は含んでいないが、グルテンの構成要素であるグリアジンは含んでいるため、多少はパンを作るときに膨らむ。



スペルト麦粉 Speltmel

f:id:keita43a:20200323070650j:plain

スペルト麦という古代の小麦で品種改良等がなされていない麦を使っているらしい。
精白されたもの(Siktet)と、全粒粉(Sammalt)がある。

タンパク質は精白のもので12.9gだが、グルテンだけではなくリジン、スレオニンメチオニンなど必須アミノ酸を含んでいるらしい。そういう意味で「タンパク質が良質」として好む人がいるようだ。
小麦アレルギーが発症しにくいらしい。

www.spelt-recipe.jp

で、薄力粉は?

以上がノルウェーにおける主要な小麦粉の種類である。
とりあえず、小麦粉どれよ?となってこのページについた人はSiktet Hvetemelを買えばいいだろう。
他のブランドでも同じ名前である。

しかし、薄力粉に当たるものがない。近いものとしては、ケーキ用のミックスは売っているが、一般的にはノルウェー人はSiktet Hvetemelを使っているようだ。私もホットケーキをよく焼くが、以下のホットケーキ用の粉を買っている。

www.toro.no

グルテンの量を調節するという観点ならば、薄力粉を作るためには大麦粉やライ麦粉を少しまぜるとよいのだろうか?


私のなけなしのノルウェー語力で検索してみると、「グルテンフリー粉と小麦粉を混ぜるとケーキええ感じに焼けるで」という記事が見つかる。(コーンスターチ米粉で作られたグルテンフリー粉も売っている)。




ちなみに餃子であるが、近所のアジア系スーパーに冷凍の餃子の皮が売っていたので、結局皮は作らなかった・・・。餃子は美味しく焼けました。

f:id:keita43a:20200323073859j:plain
餃子の皮

f:id:keita43a:20200323073954j:plain
餃子調理中。完成品を撮る前に食べてしまった。

ブログを統合しました。

はてなブログ内で、海外生活関連の記事を書く別のブログを持っていたのですが、ほとんど更新しないのでこちらのブログに統合することにしました。

こちらのブログはR関連のトラブルシューティング的な記事を備忘録代わりに書いているので、そういったものを参照してくれている方が多いのですが、
もし北欧・ノルウェーのことに興味あれば以下の記事も読んでみてください。

一番読まれていたのが、この医療費に関する記事。端的に言うと、完全無料ではないが一定額以上がかからないので高額にはならないシステム。
日本のほうが病院は行きやすいです。

keita43a.hatenablog.com



あとはノルウェーに来る方向けに滞在許可の申請のプロセスなど。
keita43a.hatenablog.com


家族許可についても。普通は自分の許可と同時に申請するのですが、私の場合は結婚のタイミングもあり、時期をずらして申請したという特殊な状況だったので参考になればと思い書きました。
keita43a.hatenablog.com


旅行についての情報も書いています。
keita43a.hatenablog.com




ブログの統合についてはこちらの記事が参考になりました。
はてなブログ同士でブログの統合・移行する方法です。

futurevision.hatenablog.com


簡単にまとめると、「設定」→「詳細設定」→「エクスポート」でテキストファイルをダウンロードしたあと、移行先のページから「インポート」でファイルアップロードするだけ。
とても簡単ですが、記事の編集がはてな記法になっていないのと、リンクなどもそのままなので古いブログで自ブログ記事を参照してる場合はリンク張替えが少し面倒です。

【R】データ入力するだけで更新可能な履歴書(CV)を作る

これ日本だとあまり浸透してないかもしれないんですが、海外では履歴書ってわりと形式が自由です。

学歴・職歴とかを書くのは変わりないんですが、細かい形式は指定されてない事が多いので、見やすければいいということで、ワードにベタ書きする人もいれば、Latexできっちり組む人、またイラストレーターなどでデザイン性にオリジナリティを出してくる人など様々。

アカデミックなところでは、職歴・学歴に加えて業績(出版歴や発表歴)を書くのが主流です。こういった業績はいちいち更新していかなくてはいかないので、わりと面倒なところがあります。
一方で、最近では履歴書(CV)をウェブに公開しておくことで就職や転職の機会を広げておいたり、他の人に自分を知ってもらうことが多くなっているので最新の状態にキープして公開しておくのは重要です。

そこで最近、twitterでRでCVを作ってしまう人が現れました。

github.com

pagedownというパッケージを使ってるのですが、この人のやり方のイケてるところはgoogle sheetでシンプルに内容のリストを作ったものを、そのままCVという形に反映できるところです。

この方法なら、更新自体はスプレッドシートに内容を入力してRmdをレンダリングするだけで更新できます。

やり方

まずレポジトリをクローン

やり方は簡単で、まず上のレポジトリをフォーク・クローンして中身をzipでダウンロードします。

Google スプレッドシートをコピー・編集

そして、このニックさんのGoogle スプレッドシートをコピーして、自分用に編集します。
https://docs.google.com/spreadsheets/d/14MQICF2F8-vf8CKPF1m4lyGKO6_thG-4aSwat1e2TWc/edit#gid=1730172225docs.google.com

f:id:keita43a:20200220224941p:plain

このとき、主要なコンテンツはpositionタブの中身になります。
一番左のsectionという列がそれぞれのカテゴリを表します。educationなら教育など。
自分で追加することも可能です。(追加するとRmdの方にも追加する必要があります。)

ポジション名や項目、住所などを入れていきます。右のdescriptionというところには任意で説明を追加できます。
なぜかlocという列が会社名・大学名などで、institutionsと書いてある列が住所っぽく表示されるので、注意が必要です。
一番右のin_resumeという列がFALSEならCVに表示しない設定にできます。

language skillsタブでは、自分のスキルを棒グラフで表示できるようになってますが、スキルの数値は5点満点で、自己申告っぽいです(笑)。

text_blocksタブではCV内の各場所にあるコメントを追加できます(例えば冒頭の自己紹介など)。

contact_infoには連絡先・SNSの情報を入れます。

Rmdファイルの各項目を編集

R markdownのファイルを編集します。
Asideとなっているところから下は右側の色のついた部分に入っている項目を設定します。ロゴ・連絡先やSNS・スキルなどが入ります。

Aside
================================================================================

Mainから下が主に左側のエリアの項目です。

Main
================================================================================

Nick Strayer {#title}
--------------------------------------------------------------------------------

このNickさんのところを自分の名前に変えます。


下のような線が引かれてるところがセクションタイトルになっています。
このdata-iconというのはpagedownの機能で、このサイトにあるアイコンを指定できるみたいです。

Teaching Experience {data-icon=chalkboard-teacher}
--------------------------------------------------------------------------------

下記のようなasideとなっている部分は右の色のついた列に入る項目で、その部分に関するコメントなどが入っています。

::: aside
```{r}
print_text_block(text_blocks, 'teaching_experience_aside')
```
:::


個人的には、language skills (コンピューター言語)のところに、自然言語(英語とか)も入れたかったので、スプレッドシートに新たにlanguageというタブを足し、英語・日本語・ノルウェー語を
設定し、gather_data.Rというファイルの中で、以下のようにデータ取得のラインを一本足しました。

  position_data <- read_sheet(positions_sheet_loc, sheet = "positions")
  skills        <- read_sheet(positions_sheet_loc, sheet = "skills")
  lang        <- read_sheet(positions_sheet_loc, sheet = "language")
  text_blocks   <- read_sheet(positions_sheet_loc, sheet = "text_blocks")
  contact_info  <- read_sheet(positions_sheet_loc, sheet = "contact_info", skip = 1)

そして、Rmdの中でbuild_skill_barsという関数を使う項目を一つ足しました。

Language {#lang}
--------------------------------------------------------------------------------

```{r}
build_skill_bars(lang)
```


すべて編集してknitすれば出来上がりです。

文字化け問題

共著者にノルウェー人がいるので、ノルウェー語のウムラウトに当たるアルファベットで名前を表記していたら、その部分が文字化けしました。pagedownもR markdowmもエンコーディングUTF-8のはずなのに、と思っていたら、Google スプレッドシートを読むgooglesheets4パッケージが使うgargleパッケージに問題があったようです。この記事の通り、devtools::github_install(’r-lib/gargle')でデベロッパーバージョンをインストールすると問題が解決しました。日本語ではまだ書いてませんが、同じ問題が起きるかもしれないので参考までに。なおgargleのインストールにrlang 0.4.1以上のバージョンがいるということで、それもインストールし直しました。

github.com

Github pagesでシェア

レポジトリで管理しているのでそのままpushして、githubページを使ってしまえば公開できます。

Github pagesについてはこちらの記事が参考になりました。
techacademy.jp

完成品

こちらが完成したCVです。対して業績も出ていないので恥ずかしいのですが、載せておきます。
f:id:keita43a:20200220225250p:plain

keita43a.github.io

github.com


レポジトリに入っているCSSも少しいじって色などを変えています。

【今日の英語勉強, NPR】香港はSARSをどう克服したか?

今日の記事はこちら。
www.npr.org

NPRでの勉強法はこちら。
keita43a.hatenablog.com

内容要約

世界的な驚異となっている新型コロナウイルスであるが、似たようなケースが過去にあった。2003年のSARSである。

香港のメトロポールホテルで2003年、ある部屋に泊まった医師がSARSに感染した。その後、10人以上がその医師から感染し彼らが香港を離れて世界的に感染が広がったという。

ある人は、2003年の時は街の店からマスクなど関連製品がなくなることはなかったが、今回はあっというまになくなったという。

ある公立病院の医師は、2003年に起こったことは大災害だったし今でもトラウマだという。あれを2度と起こしてはいけないと言い、中国との国境を封鎖することを求めているが、まだ実現されていない。

一方で、香港はSARS以来研究機関などのキャパシティを増加した。ウイルス検査などもすぐに行うことができる。

しかし、今回の流行はSARSとは異なる点があるという。とくに、SARSは医療関係者の間での感染が多かったが、今回は一般人の間での感染の割合が高く、公衆衛生的に扱うのがより難しいという。

単語・フレーズ

単語 意味 解説
diagnostic tests 診断検査
remains open 開いたまま 中国との国境が開放されたままである、という使い方
underscore アンダーラインを引く、~を強調する
casualties 犠牲者たち 複数形
epidemic 蔓延、伝染病