Edited at

tidyversity(2018.05.05時点)のまとめ

More than 1 year has passed since last update.


tidyversityとは何か。

tidyversityというパッケージが現在開発されているようで、現時点(2018.05.05時点)における、パッケージ内容を簡単にまとめておきます。tidyversityは、githubのページにも下記の記載がありますように、現在開発中のパッケージなので、お読みになられているときにはパッケージの内容が変わっている可能性もありますので、ご注意ください。


This package is in very early development. Feedback is encouraged!!!


Descriptionを読んでみると、Academic Research用に設計されたTidy Toolsとあり、Academic Researchで一般的に使用される手法が、使えるようになるようです。現状では、GLMらへんが使えるようです。今後はDescriptive statisticsなども追加されるようなので、非常に楽しみなパッケージです。


インストール方法

install_github()でインストールできます。


R

## install tidyversity from Github

devtools::install_github("mkearney/tidyversity")
library(tidyversity)
library(tidyverse)


サンプルデータ:polcom

tidyversityパッケージに内包されているデータセットpolcomの説明です。政治的なコミュニケーションに関する人口統計、背景、リッカート尺度の態度項目に対する調査回答で構成されています。データのサイズは244*63です。


R

print(tibble::as_tibble(polcom), n = 5)

# A tibble: 244 x 63
follow_trump news_1 news_2 news_3 news_4 news_5 news_6 ambiv_sexism_1 ambiv_sexism_2 ambiv_sexism_3
* <lgl> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 TRUE 8 1 1 1 1 6 3 3 3
2 TRUE 1 1 1 1 1 1 5 5 5
3 TRUE 8 1 1 1 8 1 5 4 4
4 TRUE 8 1 1 1 1 6 2 2 4
5 TRUE 6 1 2 1 1 3 4 4 5
# ... with 239 more rows, and 53 more variables: ambiv_sexism_4 <int>, ambiv_sexism_5 <int>,
# ambiv_sexism_6 <int>, img1_hrc_1 <int>, img1_hrc_2 <dbl>, img1_hrc_3 <int>, img1_hrc_4 <dbl>,
# img1_hrc_5 <int>, img1_hrc_6 <int>, img1_hrc_7 <int>, img1_hrc_8 <int>, img1_hrc_9 <int>,
# img2_hrc_10 <int>, img2_hrc_11 <int>, img2_hrc_12 <dbl>, img2_hrc_13 <int>, img2_hrc_14 <int>,
# img2_hrc_15 <dbl>, img1_djt_1 <int>, img1_djt_2 <dbl>, img1_djt_3 <int>, img1_djt_4 <dbl>,
# img1_djt_5 <int>, img1_djt_6 <int>, img1_djt_7 <int>, img1_djt_8 <int>, img1_djt_9 <int>,
# img2_djt_10 <int>, img2_djt_11 <int>, img2_djt_12 <dbl>, img2_djt_13 <int>, img2_djt_14 <int>,
# img2_djt_15 <dbl>, pie_1 <int>, pie_2 <int>, pie_3 <int>, pie_4 <int>, vote_2016 <int>,
# vote_2016_choice <int>, pp_ideology <int>, pp_party <int>, pp_party_lean <int>, therm_1 <int>,
# therm_2 <int>, therm_3 <int>, therm_4 <int>, therm_5 <int>, age <int>, sex <int>, gender <int>,
# race <int>, edu <int>, hhinc <int>


Tidyなアウトプット

大きく分けてA tidy model$fit$coefの3つのブロックが出力されます。A tidy modelでは、回帰のモデル式、回帰のタイプ、使用したデータが表示されます。ありがたみとしては、Descriptionにもありますように、基本的に回帰であれば、3つのブロックが同時に出力されるので、Researchersがデータ、分析手法、結果をTidyに保存しておくことが可能な点かと思われます。


This package uses tidy evaluation (a form of non-standard evaluation) for ease of use and helps researchers keep their data and analysis tidy.



A tidy model

follow_trump ~ news_1 + ambiv_sexism_1というモデル式で、Ordinary Least Squares (OLS) regressionという回帰モデルで、243 (observations) X 3 (variables)というデータを使ったということがひと目でわかります。


R

# A tidy model

Model formula : follow_trump ~ news_1 + ambiv_sexism_1
Model type : Ordinary Least Squares (OLS) regression
Model data : 243 (observations) X 3 (variables)


fit

$fitでは、回帰のタイプに合わせてモデル評価指標が出力されます。ポアソン回帰であれば、χ2系の指標やNagelkerke R^2、McFadden R^2などが出力されます。


R

$fit

# A tibble: 6 x 6
fit_stat n df estimate p.value stars
<chr> <int> <int> <dbl> <dbl> <chr>
1 F 243 2 3.83 0.0230 *
2 R^2 243 NA 0.0309 NA ""
3 Adj R^2 243 NA 0.0229 NA ""
4 RMSE 243 NA 0.409 NA ""
5 AIC 243 NA 260. NA ""
6 BIC 243 NA 274. NA ""


coef

$coefでは、パラメタが出力されます。summary(lm(y ~ x))と似たような出力です。


R

$coef

# A tibble: 3 x 6
term estimate s.e. est.se p.value stars
<chr> <dbl> <dbl> <dbl> <dbl> <chr>
1 (Intercept) 0.745 0.0969 7.69 0 ***
2 news_1 0.0220 0.0122 1.81 0.0714 +
3 ambiv_sexism_1 -0.0385 0.0206 -1.87 0.0627 +


Regression


Ordinary Least Squares (OLS)

OLSでの回帰分析です。tidy_regression()にデータをpipeで流して、tidy_summary()で出力するのが基本的な使い方のようです。


R

polcom %>%

tidy_regression(follow_trump ~ news_1 + ambiv_sexism_1) %>%
tidy_summary()

# A tidy model
Model formula : follow_trump ~ news_1 + ambiv_sexism_1
Model type : Ordinary Least Squares (OLS) regression
Model data : 243 (observations) X 3 (variables)

$fit
# A tibble: 6 x 6
fit_stat n df estimate p.value stars
<chr> <int> <int> <dbl> <dbl> <chr>
1 F 243 2 3.83 0.0230 *
2 R^2 243 NA 0.0309 NA ""
3 Adj R^2 243 NA 0.0229 NA ""
4 RMSE 243 NA 0.409 NA ""
5 AIC 243 NA 260. NA ""
6 BIC 243 NA 274. NA ""

$coef
# A tibble: 3 x 6
term estimate s.e. est.se p.value stars
<chr> <dbl> <dbl> <dbl> <dbl> <chr>
1 (Intercept) 0.745 0.0969 7.69 0 ***
2 news_1 0.0220 0.0122 1.81 0.0714 +
3 ambiv_sexism_1 -0.0385 0.0206 -1.87 0.0627 +



Logistic (dichotomous)

目的変数が2値のデータに対するロジステック回帰分析。type = "logistic"と指定するだけで実行できます。$fitの所がOLSの回帰モデルとは出力されるものがモデルに応じて変わります。


R

polcom %>%

tidy_regression(follow_trump ~ news_1 + ambiv_sexism_1, type = "logistic") %>%
tidy_summary()
# A tidy model
Model formula : follow_trump ~ news_1 + ambiv_sexism_1
Model type : logistic
Model data : 243 (observations) X 3 (variables)

$fit
# A tibble: 7 x 6
fit_stat n df estimate p.value stars
<chr> <int> <int> <dbl> <dbl> <chr>
1 χ2 243 240 247. 0.357 ""
2 Δχ2 243 2 7.47 0.0239 *
3 Nagelkerke R^2 243 NA 0.0303 NA ""
4 McFadden R^2 243 NA 0.0293 NA ""
5 RMSE 243 NA 2.54 NA ""
6 AIC 243 NA 253. NA ""
7 BIC 243 NA 264. NA ""

$coef
# A tibble: 3 x 6
term estimate s.e. est.se p.value stars
<chr> <dbl> <dbl> <dbl> <dbl> <chr>
1 (Intercept) 1.13 0.553 2.05 0.0405 *
2 news_1 0.127 0.0702 1.81 0.0707 +
3 ambiv_sexism_1 -0.229 0.122 -1.87 0.0613 +



Poisson (count)

カウントデータに対するポアソン回帰分析。type = "poisson"と指定します。


R

polcom %>%

dplyr::mutate(polarize = abs(therm_1 - therm_2)) %>%
tidy_regression(polarize ~ news_1 + ambiv_sexism_1, type = "poisson") %>%
tidy_summary()

# A tidy model
Model formula : polarize ~ news_1 + ambiv_sexism_1
Model type : Poisson regression
Model data : 242 (observations) X 3 (variables)

$fit
# A tibble: 7 x 6
fit_stat n df estimate p.value stars
<chr> <int> <int> <dbl> <dbl> <chr>
1 χ2 242 239 6549. 0. ***
2 Δχ2 242 2 399. 2.20e-87 ***
3 Nagelkerke R^2 242 NA 0.808 NA ""
4 McFadden R^2 242 NA 0.0574 NA ""
5 RMSE 242 NA 0.760 NA ""
6 AIC 242 NA 7725. NA ""
7 BIC 242 NA 7736. NA ""

$coef
# A tibble: 3 x 6
term estimate s.e. est.se p.value stars
<chr> <dbl> <dbl> <dbl> <dbl> <chr>
1 (Intercept) 3.80 0.0382 99.4 0 ***
2 news_1 0.0447 0.00478 9.36 0 ***
3 ambiv_sexism_1 -0.126 0.00797 -15.9 0 ***



Negative binomial (overdispersed)

過分散なカウントデータに対する負の二項回帰分析。type = "negbinom"と指定します。


R

polcom %>%

dplyr::mutate(polarize = abs(therm_1 - therm_2)) %>%
tidy_regression(polarize ~ news_1 + ambiv_sexism_1, type = "negbinom") %>%
tidy_summary()

# A tidy model
Model formula : polarize ~ news_1 + ambiv_sexism_1
Model type : Negative binomial regression
Model data : 242 (observations) X 3 (variables)

$fit
# A tibble: 7 x 6
fit_stat n df estimate p.value stars
<chr> <int> <int> <dbl> <dbl> <chr>
1 χ2 242 239 293. 0.00943 **
2 Δχ2 242 2 8.44 0.0147 *
3 Nagelkerke R^2 242 NA 0.0343 NA ""
4 McFadden R^2 242 NA 0.0280 NA ""
5 RMSE 242 NA 0.761 NA ""
6 AIC 242 NA 2312. NA ""
7 BIC 242 NA 2326. NA ""

$coef
# A tibble: 3 x 6
term estimate s.e. est.se p.value stars
<chr> <dbl> <dbl> <dbl> <dbl> <chr>
1 (Intercept) 3.74 0.258 14.5 0 ***
2 news_1 0.0526 0.0322 1.63 0.103 ""
3 ambiv_sexism_1 -0.123 0.0541 -2.27 0.0230 *



Robust models


Robust OLS

RobustなOLSの回帰分析も簡単に実行できます。robust = TRUEと指定します。


R

polcom %>%

dplyr::mutate(polarize = abs(therm_1 - therm_2)) %>%
tidy_regression(polarize ~ news_1 + ambiv_sexism_1, robust = TRUE) %>%
tidy_summary()

# A tidy model
Model formula : polarize ~ news_1 + ambiv_sexism_1
Model type : [Robust] Ordinary Least Squares (OLS) regression
Model data : 242 (observations) X 3 (variables)

$fit
# A tibble: 6 x 6
fit_stat n df estimate p.value stars
<chr> <int> <int> <dbl> <dbl> <chr>
1 F 242 2 8.75 0.000215 ***
2 R^2 242 NA 0.0682 NA ""
3 Adj R^2 242 NA 0.0604 NA ""
4 RMSE 242 NA 31.2 NA ""
5 AIC 242 NA 2357. NA ""
6 BIC 242 NA 2371. NA ""

$coef
# A tibble: 3 x 6
term estimate s.e. est.se p.value stars
<chr> <dbl> <dbl> <dbl> <dbl> <chr>
1 (Intercept) 45.4 7.51 6.04 0 ***
2 news_1 1.89 0.939 2.01 0.0458 *
3 ambiv_sexism_1 -5.33 1.58 -3.38 0.000837 ***



Robust logistic, poisson, and quasi- version of each

その他の回帰分析に対するRobustモデルは、type = "hoge"robust = TRUEと指定すれば実行できます。


R

polcom %>%

dplyr::mutate(polarize = abs(therm_1 - therm_2)) %>%
tidy_regression(polarize ~ news_1 + ambiv_sexism_1, type = "quasipoisson", robust = TRUE) %>%
tidy_summary()

# A tidy model
Model formula : polarize ~ news_1 + ambiv_sexism_1
Model type : [Robust] Poisson regression
Model data : 242 (observations) X 3 (variables)

$fit
# A tibble: 7 x 6
fit_stat n df estimate p.value stars
<chr> <int> <int> <dbl> <dbl> <chr>
1 χ2 242 239 6549. 0. ***
2 Δχ2 242 2 399. 2.20e-87 ***
3 Nagelkerke R^2 242 NA 0.808 NA ""
4 McFadden R^2 242 NA 0.0574 NA ""
5 RMSE 242 NA 0.760 NA ""
6 AIC 242 NA 7725. NA ""
7 BIC 242 NA 7736. NA ""

$coef
# A tibble: 3 x 6
term estimate s.e. est.se p.value stars
<chr> <dbl> <dbl> <dbl> <dbl> <chr>
1 (Intercept) 3.80 0.0382 99.4 0 ***
2 news_1 0.0447 0.00478 9.36 0 ***
3 ambiv_sexism_1 -0.126 0.00797 -15.9 0 ***



ANOVA

交互作用を含めたANOVAも対応しています。


R

polcom %>%

dplyr::mutate(sex = ifelse(sex == 1, "Male", "Female"),
vote_choice = dplyr::case_when(
vote_2016_choice == 1 ~ "Clinton",
vote_2016_choice == 2 ~ "Trump",
TRUE ~ "Other")) %>%
tidy_anova(pp_party ~ sex * vote_choice) %>%
tidy_summary()

NULL
$fit
# A tibble: 6 x 6
fit_stat n df estimate p.value stars
<chr> <int> <int> <dbl> <dbl> <chr>
1 F 243 5 53.3 6.19e-37 ***
2 R^2 243 NA 0.529 NA ""
3 Adj R^2 243 NA 0.519 NA ""
4 RMSE 243 NA 1.24 NA ""
5 AIC 243 NA 801. NA ""
6 BIC 243 NA 826. NA ""

$coef
# A tibble: 4 x 7
term estimate s.e. est.se statistic p.value stars
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
1 sex 1 19.2 19.2 12.6 0.000474 ***
2 vote_choice 2 389. 194. 127. 0 ***
3 sex:vote_choice 2 0.519 0.259 0.169 0.844 ""
4 Residuals 237 363. 1.53 NA NA ""