要約統計学を越えて


Datasurus導入


注意:この投稿はR , RMarkdown ,およびパッケージをtidyverseやその他のパッケージで使用します.
私は最近、カイロのAlberto#TidyTuesday そして、主に以下にこのデータセットに関連したレッスンを示している一連のチャートを作成したかったですnever trust summary statistics alone .
第一に、いくつかの文脈.Albertoは数年前からこのデータセットを作成しました.

このつぶやきだけでは、なぜ我々は要約統計を単独で信頼すべきではないので、これをアンパックしようとする通信することはありません.まず、様々なパッケージとデータをロードします.

パッケージの読み込み


library(tidyverse)
library(ggcorrplot)
library(ggridges)

データを読み込む


注意:datasaurus and datasaurus_dozen は同一です.前者は、Chenhn tidy火曜日、後者からthis research paper このドキュメントの範囲(すなわち、シミュレーテッド・アニーリング)を越えたより高度な概念について議論する.
また、それに注意してくださいdatasaurus_dozen and datasaurus_wide 同じデータは、別の組織です.前者は長い形式で、後者はワイドフォーマットですdetails .
ほとんどの場合、我々は使用しますdatasaurus_dozen この文書を通して.使いましょうdatasaurus_wide 相互関係セクションに着くと.
datasaurus <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-10-13/datasaurus.csv')
datasaurus_dozen <- read_tsv('DatasaurusDozen.tsv')
datasaurus_wide <- read_tsv('DatasaurusDozen-wide.tsv')

概要統計


まず、要約統計(すなわち平均値と標準偏差)を見た場合、これらの変数はすべて同じであると結論するかもしれません.また、各変数の中には、x and y 値は−0.06から−0.07までの範囲で非常に同様に低い相関を有する.
datasaurus_dozen %>%
    group_by(dataset) %>%
    summarize(
        x_mean = mean(x),
        x_sd = sd(x),
        y_mean = mean(y),
        y_sd = sd(y),
        corr = cor(x,y)
    )
X変数とY軸の13変数があります.ここで要約統計です.すべての13の変数は、同じ平均と標準偏差X and Y 値.

boxplots


あなたはboxplots これら13変数の分布と中央値のわずかな変化を示す.ただし、赤円で示す平均値は同一である.
datasaurus_dozen %>%
    ggplot(aes(x = dataset, y = x, fill = dataset)) +
    geom_boxplot(alpha = 0.6) +
    stat_summary(fun = mean, geom = "point", shape = 20, size = 6, color = "red", fill = "red") +
    scale_fill_brewer(palette = "Set3") +
    theme_classic() +
    theme(legend.position = 'none') +
    labs(
        y = '13 variables',
        x = 'X-values',
        title = "Boxplots: Slight differences in the distribution and median values (X-axis)",
        subtitle = "Identical mean values"
    )

ここに同じプロットがありますy
datasaurus_dozen %>%
    ggplot(aes(x = dataset, y = y, fill = dataset)) +
    geom_boxplot(alpha = 0.6) +
    stat_summary(fun = mean, geom = "point", shape = 20, size = 6, color = "red", fill = "red") +
    scale_fill_brewer(palette = "Paired") +
    theme_classic() +
    theme(legend.position = 'none') +
    labs(
        y = '13 variables',
        x = 'Y-values',
        title = "Boxplots: Slight differences in the distribution and median values (Y-axis)",
        subtitle = "Identical mean values"
    )

リッジラインプロット


これらの変数が異なる方法で配布をプロットする場合、これらの変数がどのように異なるかについての感覚を得ることができます.Ridgelineプロットは、前に隠されたデータの側面を明らかに開始します.
特定の変数が著しく異なる分布形状を持っているのを見ることができます.v_lines , dots , x_shape , wide_lines ), 同じ平均値を持つ間.

datasaurus_dozen %>%
    ggplot(aes(x = x, y = dataset, fill = dataset)) +
    geom_density_ridges_gradient(scale = 3, quantile_lines = T, quantile_fun = mean) +
    scale_fill_manual(values = c('#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928', 'grey')) +
    theme_classic() +
    theme(legend.position = 'none') +
    labs(
        x = "X-values",
        y = "13 variables",
        title = "Ridgeline Plot: More variation in the distribution (X-axis)",
        subtitle = "Identical mean values"
    )
For yhigh_lines , dots , circle and star 残りの部分から明らかに異なるディストリビューションを持っている.再び、平均値は変数全体で同一です.

datasaurus_dozen %>%
    ggplot(aes(x = y, y = dataset, fill = dataset)) +
    geom_density_ridges_gradient(scale = 3, quantile_lines = T, quantile_fun = mean) +
    scale_fill_manual(values = c('#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928', 'grey')) +
    theme_classic() +
    theme(legend.position = 'none') +
    labs(
        x = "Y-values",
        y = "13 variables",
        title = "Ridgeline Plot: More variation in the distribution (Y-axis)",
        subtitle = "Identical mean values"
    )

相関


あなたが配布と中心傾向を視覚化して、変数が互いと相関する方法を見るためにまっすぐに進むならば、あなたはデータの若干の基本的な違いを逃すこともできました.
特に、x and y すべての13変数全体の値は非常に相関している.要約統計の知識だけで、これらの変数が非常に類似していると信じるように導かれるかもしれません.
以下は相関行列を作成するコードです.
library(ggcorrplot)

# X-values
# selecting rows 2-143 
# turning all values from character to numeric
datasaurus_wide_x <- datasaurus_wide %>%
    slice(2:143) %>%
    select(away, bullseye, circle, dino, dots, h_lines, high_lines, slant_down, slant_up, star, v_lines, wide_lines, x_shape) %>%
    mutate_if(is.character, as.numeric)

# Y-values
# selecting rows 2-143 
# turning all values from character to numeric
datasaurus_wide_y <- datasaurus_wide %>%
    slice(2:143) %>%
    select(away_1, bullseye_1, circle_1, dino_1, dots_1, h_lines_1, high_lines_1, slant_down_1, slant_up_1, star_1, v_lines_1, wide_lines_1, x_shape_1) %>%
    mutate_if(is.character, as.numeric)


# correlation matrix for X values
corr_x <- round(cor(datasaurus_wide_x), 1)

# correlation matrix for Y values
corr_y <- round(cor(datasaurus_wide_y), 1)

head(corr_x[, 1:6])

相関行列の可視化


ここでは、x-values すべての13変数間.すべての変数を見ることができますaway , 相互に高い相関がある.

# correlation between X-values
ggcorrplot(corr_x, hc.order = TRUE, 
           type="lower", 
           outline.color = "white",
           ggtheme = ggplot2::theme_gray,
           colors = c("#d8b365", "#f5f5f5", "#5ab4ac"),
           lab = TRUE) 
ここで、すべての13変数間のy -値の間の相関関係です.再びaway , すべての変数は非常に相関している.

# correlation between Y-values
ggcorrplot(corr_y, hc.order = TRUE, 
           type="lower", 
           outline.color = "white",
           ggtheme = ggplot2::theme_gray,
           colors = c("#ef8a62", "#f7f7f7", "#67a9cf"),
           lab = TRUE)

ファセット


この点で、Boxplotsは類似した中央値と同一の平均で我々の変数を示します;ridglinesはいくつかの変数が異なるディストリビューションを持っていることを示し始めます.また,相関行列は変数が似ていないことを示唆している.
彼らの違いを本当に見るために、我々は使用する必要があるでしょうfacet_wrap .
ここで使用しますfacet_wrap ヒストグラムを調べるx and y 全13変数の値.我々は、変数間の分配の違いを見始めましたridgeline プロットは、重複するヒストグラム別の視点を提供します.

# facet histogram (both-values)
datasaurus_dozen %>%
    group_by(dataset) %>%
    ggplot() +
    geom_histogram(aes(x=x, fill='red'), alpha = 0.5, bins = 30) +
    geom_histogram(aes(x=y, fill='green'), alpha = 0.5, bins = 30) +
    facet_wrap(~dataset) +
    scale_fill_discrete(labels = c('y', 'x')) +
    theme_classic() +
    labs(
        fill = 'Axes',
        x = '',
        y = 'Count',
        title = 'Faceted Histogram: x- and y-values'
    )

散布計画


しかし、このデータセットが実際のデータポイントをプロットする代わりにはないことを通信しようとしていることが一つある.要約統計量、中央の傾向や分布の量は実際のデータポイントをプロット置換する予定です.
一度、我々は散乱プロットを作成しますgeom_point , 我々は、このデータセットを使用して大きな明らかにします.中央の措置の類似点にもかかわらず、大部分は同様の分布と高い相関関係のために、13の変数は、互いに激しく異なっています.

datasaurus_dozen %>%
    group_by(dataset) %>%
    ggplot(aes(x=x, y=y, color=dataset)) +
    geom_point(alpha = 0.5) +
    facet_wrap(~dataset) +
    scale_color_manual(values = c('#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928', 'grey')) +
    theme_classic() +
    theme(legend.position = "none") +
    labs(
        x = 'X-axis',
        y = 'Y-axis',
        title = 'Faceted Scatter Plot'
    )
散布計画への他のより一般的な選択肢はありません.

ジオイド密度


散乱プロットとして明確ではないが、2 D密度推定の輪郭をプロットすると、同じような要約統計にもかかわらず、どのように非常に異なる変数が互いからであることを示しています.

# contours of a 2D Density estimate
datasaurus_dozen %>%
    ggplot(aes(x=x, y=y)) +
    geom_density_2d() +
    theme_classic() +
    facet_wrap(~dataset) +
    labs(
        x = 'X-axis',
        y = 'Y-axis',
        title = 'Contours of a 2D density estimate'
    )
これは、わずかな変化を使用してstat_density_2d :

# stat density 2d
datasaurus_dozen %>%
    ggplot(aes(x=x, y=y)) +
    stat_density_2d(aes(fill=y), geom = "polygon", colour = 'white') +
    theme_classic() +
    facet_wrap(~dataset) +
    labs(
        x = 'X-axis',
        y = 'Y-axis',
        title = 'Stat Density 2D estimate'
    )
使用density_2d プロットは、変数がどのように異なっているかを示すのに非常に効果的で、より身近な散布計画に良い代わるものとして用いられます.
うまくいけば、このヴィネットは、要約統計(単独で)を決して信用しないことの重要性を例証します.また、視覚化する際には、単にデータの分布や中心的傾向を視覚化するだけでなく、実際のデータポイントをプロットすることができます.
データサイエンス、機械学習、R、パイソン、SQLとより多くのより多くの内容のために.