20章 purrrとbroomによる多数のモデル

20.0 ライブラリの読み込み

library("modelr")
library("tidyverse")
library("gapminder")

20.1 はじめに

練習問題はありません。

20.2 gapminder

練習問題1 線形傾向は、全体的な傾向に対してやや単純すぎる。2次多項式はもっとうまくフィットさせれるか。2次方程式の係数はどのように解釈できるか。

gapminderはこのようなデータセットになっています。

gapminder %>% head()

# A tibble: 6 x 6
  country     continent  year lifeExp      pop gdpPercap
  <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
1 Afghanistan Asia       1952    28.8  8425333      779.
2 Afghanistan Asia       1957    30.3  9240934      821.
3 Afghanistan Asia       1962    32.0 10267083      853.
4 Afghanistan Asia       1967    34.0 11537966      836.
5 Afghanistan Asia       1972    36.1 13079460      740.
6 Afghanistan Asia       1977    38.4 14880372      786.

ここから各国対して、2次多項式をフィットさせます。そして、各モデルで残差を計算し、その残差をラインチャートで視覚化します。このラインチャートを見る限り、残差が大きくあまり上手くフィットできてない国があるように見えます。これは次の質問で回答します。

練習問題2 大陸ごとのR2の分布を視覚化する方法を調べなさい。{ggbeeswarm}パッケージを試していなさい。

当てはまりの指標であるR2を国ごとに可視化して、当てはまりが悪い国を可視化します。アフリカの国が当てはまりの悪い国が多いようです。

練習問題3 最後のプロットを作成するには、2つのステップが必要だった。国ごとに1行のデータフレームを作成し、それを元のデータセットにセミジョインした。代わりにunnest()を使用すれば、この結合を回避できる。

Rの仕様を上手く使うことで実現できます。Rはデータフレームの中にリストを持つことができ、これを展開することもできます。その場合、リストの列以外はリサイクル規則が働き、同じ値を保有します。

20.3 リスト列

練習問題はありません。

20.4 リスト列の作成

練習問題1 インプットにアトミックベクトルを取り、そしてリストを返す思いつく限りの関数を書きなさい。

練習問題2 複数の値を返すquantile()のような便利な集計関数をブレインストーミングしなさい。

基本的なもので、下記があります。

練習問題3 次のデータフレームには何が欠けているか?その欠けているピースをquantile()はどうやって返すのか?

特定の値(0%25%50%75%100%)の分位数の名前が、欠けています。

練習問題4 このコードは何をするのか?なぜそれが役に立つのか。

このコードはcylのグループごとにリストに格納します。簡単のために、列は限定しています。役立て方はわかりません…ごめんなさい。

20.5 リスト列の単純化

練習問題1 リスト列からアトミックベクトル列を作成するのにlengths()が便利なのはなぜか?

length()はリスト内の各要素の長さを返します。異なる最大長を取得して、そのサイズごとにデータフレームを展開させたりできます。こんな使い方するのか不明…。そして質問文がlengths()…調べたけどこんな関数ないと思われる。

さきほどの発展させると他の引数もコントロールできます。

出力長が不明な場合の例です。出力する長さがわからない場合、リストに入れて展開することで、やりたいことが実現できます。

もちろんmap()を使えばより簡潔に書くことが可能です。

この考えは非常に協力で、ジェイウォーク(信号無視)というコンマ区切りで値をもつような最悪なデータの持ち方をしているデータにも役立ちます。

もちろん元に簡単に戻せます。

練習問題2 データフレームの最も一般的なベクトルの型をあげなさい。リストとの違いは何か?

データフレーム内のベクトルの一般的な種類は下記のとおりです。

  • logical

  • double

  • integer

  • character

リストは他のベクトルのデータ型を含むことができます。なのでアトミックベクトルではありません。

20.6 broomで整理データを作る

練習問題はありません。

最終更新

役に立ちましたか?