Rを気象研究に使う

榎本剛

Rが使われている分野

気象ではあまり使われていない。

  • 統計学
  • 医学
  • 生物学
  • 計量経済学
  • 計量政治学

気象学

気象は統計を軽視していないか。

  • 「天気図」つまり等値線やベクトルが中心
  • データ解析や数値実験の結果の見た目だけでよいか。
  • 統計は気象の重要な一部
    • 境界層や自由大気の乱流、スペクトル
    • 雲粒やエアロゾルの粒径分布
    • アンサンブル

Rは統計言語を超越

Gagolewski (2024)

Let’s get one thing straight: R is not just a statistical package. It is a general-purpose, high-level programming language that happens to be very powerful for numerical, data-intense computing activities of any kind. It offers extensive support for statistical, machine learning, data analysis, data wrangling, and data visualisation applications, but there is much more.

Rは何なのか

  • 思いつきの確認、データ探索、高速プロトタイプの道具
  • Python + pandas + matplotlibやJulia、MATLABに相当するプログラミング環境
  • 再現性のある科学 (Schwab, Karrenbach, and Claerbout (2000);Gentleman and Temple Lang (2007);Marwick, Boettiger, and Mullen (2018))

Pythonに疲れてませんか

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x = np.linspace(-5, 5, 101)
y = norm.pdf(x)
ax.plot(x, y)
ax.set_title("normal distribution")
ax.set_xlabel("x")
ax.set_ylabel("y")
plt.show()

curve(dnorm, -5, 5, main="normal distribution", xlab="x", ylab="y")

Rの特徴

  • 基本的な数学函数、統計、行列計算、描画を含む。
  • 添字は1始まり。負の添字は削除。
  • 配列array()や行列matrix()は列優先で数式と対応。
  • 函数型
  • Copy on modify
  • 環境構築のしやすさ

アンサンブル偏差

(x <- matrix(0:11, ncol=4))
     [,1] [,2] [,3] [,4]
[1,]    0    3    6    9
[2,]    1    4    7   10
[3,]    2    5    8   11
(xbar <- apply(x, 1, mean)) # rowMeans(x)
[1] 4.5 5.5 6.5
x - xbar # sweep(x, 1, xbar)
     [,1] [,2] [,3] [,4]
[1,] -4.5 -1.5  1.5  4.5
[2,] -4.5 -1.5  1.5  4.5
[3,] -4.5 -1.5  1.5  4.5
x = np.arange(12).reshape([4, 3]).transpose()
print(x)
[[ 0  3  6  9]
 [ 1  4  7 10]
 [ 2  5  8 11]]
xbar = x.mean(axis=1)
print(xbar)
[4.5 5.5 6.5]
x - xbar[:,None]
array([[-4.5, -1.5,  1.5,  4.5],
       [-4.5, -1.5,  1.5,  4.5],
       [-4.5, -1.5,  1.5,  4.5]])

Rと私

  • 渋谷政昭・柴田里程, 1992: Sによるデータ解析
  • アンサンブルの父、経田さんにRを勧められる。
  • rglやRMarkdownがきっかけで、2019年頃からRを再び使い始める。
  • 2023年からILASセミナーはPythonからRに。
  • 2024年データ同化夏の学校の課題をRで書く。

CRAN

RStudio

Jupyter

install.packages("IRkernel")
installspec()

Google colaboratory

Rでここまでできる

Rによる気象データサイエンス

線型回帰

df <- read.csv("co2_annual_20221026.csv")
lm.co2 <- lm(df$co2.global.mean.ppm. ~ df$year)
plot(df$year, df$co2.global.mean.ppm.,
     main="Global Mean CO2 concentration",
     xlab="year", ylab="CO2 ppm")
abline(lm.co2)

2次元描画

Deep R Example 13.1

3次元描画

rgl

NCEP再解析

terraRNetCDF

奥能登豪雨

湿潤函数

Lorenz-96

機械学習

torch for R 自動微分を使って
L-BFGSで数値最適化


 iteration: 1 
value is: 404 
value is: 62.32629 
value is: 30.0694 
value is: 2.630802 
value is: 1.178554 
value is: 1.15742 
value is: 1.132393 
value is: 1.00142 
value is: 1.091282 
value is: 0.6181912 
value is: 0.8905485 
value is: 0.6098282 
value is: 0.5655912 
value is: 0.3922533 
value is: 0.2774411 
value is: 1.417701 
value is: 0.2190703 
value is: 0.1747326 
value is: 0.138079 
value is: 0.08087008 
value is: 0.05257342 
value is: 0.1490564 
value is: 0.04006938 
value is: 0.02954924 
value is: 0.0123807 
x= 0.9039336 0.8114817 

 iteration: 2 
value is: 0.0123807 
value is: 0.006820644 
value is: 0.002877993 
value is: 0.001204881 
value is: 0.0006029455 
value is: 4.773922e-05 
value is: 2.687795e-06 
value is: 5.911179e-08 
value is: 1.56685e-09 
value is: 3.588241e-13 
x= 0.9999999 0.9999998 

表をきれいに

library(tinytable)
trunc <- c(39, 79, 119, 239, 639, 1279)
nlon <- 3 * (trunc + 1)
nlat <- nlon / 2
df <- data.frame(trunc, nlon, nlat)
tab <- tt(df)
style_tt(tab, align="r")
trunc nlon nlat
39 120 60
79 240 120
119 360 180
239 720 360
639 1920 960
1279 3840 1920

Quarto

RMarkdownの進化形

  • このスライドはMarkdownを拡張した記法で、
    Quartoを使って作成。
  • 数式、RやPythonなどコードの実行。
  • Pandocを使ってHTML、LaTeX、Wordなどに出力。
  • bibファイルによる文献引用。

まとめ

  • Rは統計・描画環境
  • 対話的な探索的データ解析に適す。
  • 地理データの描画や、機械学習も
  • 再現可能科学

参考文献

Gagolewski, Marek. 2024. Deep R Programming. Zenodo. https://doi.org/10.5281/ZENODO.7490464.
Gentleman, Robert, and Duncan Temple Lang. 2007. “Statistical Analyses and Reproducible Research.” Journal of Computational and Graphical Statistics 16 (1): 1–23. https://doi.org/10.1198/106186007X178663.
Marwick, Ben, Carl Boettiger, and Lincoln Mullen. 2018. “Packaging Data Analytical Work Reproducibly Using R (and Friends).” The American Statistician 72 (1): 80–88. https://doi.org/10.1080/00031305.2017.1375986.
Schwab, M., N. Karrenbach, and J. Claerbout. 2000. “Making Scientific Computations Reproducible.” Computing in Science & Engineering 2 (6): 61–67. https://doi.org/10.1109/5992.881708.