Week6: 中間レポート1(Rの基礎~R Markdown)

分析準備

データ詳細

  • PISA(OECD生徒の学習到達度調査)の2022年調査公開データを課題用に教員が加工したもので、変数の概要は次の通り

  • STUID:学生ID(STUdent ID)

  • 学力調査の得点

    • MATH:数学得点,READ:読解力得点,SCIE:科学得点
  • 日本の生徒質問調査(student questionnaire)のデータ

    • GENDER:性別(M = Male, 男性; F = Female, 女性)

    • AGE:年齢(月齢も含めて小数点表示)

    • STXXXQYY:個別項目への回答データ(XXXとYYには数字が入る)

      • 各項目の値の意味などはコードブック(questionnaire_stu_1.pdf)を参照のこと
  • 以下では、学力得点(MATH, READ, SCIE)と年齢(AGE)を量的変数として扱い、性別(GENDER)と生徒質問調査の個別項目(STXXQYY)を質的変数として扱うこと

データ読み込み

問題1

csvファイル(PISA2022_STU_QQQ.csv)を読み込み、オブジェクト「df」として保存するスクリプトを次のコードチャンクに書いて実行しなさい。

## 問題1のスクリプトをここに書く
df<-read.csv("PISA2022_STU_QQQ.CSV")

データのサイズ

問題2

問題1で読み込んだデータの行数と列数を確認するスクリプトを書いて実行し、別途、行数(ケース数)と列数(変数の数)を記入しなさい。

データのサイズ:

  • 行数:

  • 列数:

## 問題2のスクリプトここに書く
## 解答
library(tidyplots)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(gtsummary)
nrow(df)
## [1] 5760
ncol(df)
## [1] 310

単変量の記述統計量と可視化

量的変数の場合

問題3

dfに含まれるの連続変数(MATH, READ, SCIE, AGE)のうち、どれか1つについて平均・標準偏差・最小値・最大値を含む記述統計量を求めるスクリプトを書き、実行しなさい。

## 問題3のスクリプトをここに書く
summary(df$MATH)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   177.0   473.0   540.0   534.9   601.0   812.0
sd(df$MATH)
## [1] 90.14884

問題4

dfに含まれるの連続変数(MATH, READ, SCIE, AGE)のうち、どれか1つについてヒストグラムを作成するスクリプトを書き、実行しなさい。

## 問題4のスクリプトをここに書く
tidyplot(df,x=MATH) %>% add_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

問題5

問題3で作成した記述統計量や、問題4で作成したヒストグラムをもとに、選んだ変数の分布の特徴を文章で説明しなさい

【問題5解答欄】 数学得点者は中間層辺りの人が最も多く、最高点や最低点に近づくほど人数が少なくなっている。


質的変数の場合

問題6

質的変数 GENDER(性別)の頻度および相対頻度を求めるスクリプトを書き、実行しなさい。

## 問題6のスクリプトをここに書く
table(df$GENDER)
## 
##    F    M 
## 2904 2856
prop.table(table(df$GENDER))
## 
##         F         M 
## 0.5041667 0.4958333

問題7

個別項目への回答データ(STXXXQYY)から一つ選び、棒グラフを作成しなさい。

## 問題7のスクリプトをここに書く
library(tidyplots)
tidyplot(df,x=ST250Q05) %>% add_count_bar()
## Warning: Removed 38 rows containing non-finite outside the scale range (`stat_count()`).
## Removed 38 rows containing non-finite outside the scale range (`stat_count()`).

問題8

問題7で作成したグラフ(分布)の説明・解釈を文章で書きなさい。なお、各個別項目の詳細については参考資料(questionnaire_stu_1.pdf)を参照のこと。(以降の問題でも同様)

【問題8解答欄】 スマートフォンを除くインターネットに接続できるデバイスを持っている人は、持っていない人に比べて多い。


二変量の記述統計量と可視化

量的変数×量的変数の場合

問題9

年齢(AGE)と読解得点(READ)の共分散を計算するスクリプトを書き、実行しなさい。

## 問題9のスクリプトをここに書く
cov(df$AGE,df$READ)
## [1] 1.293028

問題10

年齢(AGE)と読解得点(READ)の相関係数を計算するスクリプトを書き、実行しなさい。

## 問題10のスクリプトをここに書く
cor(df$AGE,df$READ)
## [1] 0.04887067

問題11

問題9で求めた共分散と問題10で求めた相関係数を比べ、共通点や相違点を文章で説明しなさい。

【問題11解答欄】 共分散は小さく、相関係数は0に近い値となっているため、年齢と読解得点のデータに関連性はないといえる。


量的変数×質的変数の場合

問題12

数学得点(MATH)、読解得点(READ)、科学得点(SCIE)の3変数について、男女別の平均・標準偏差・最小値・最大値を求めるスクリプトを書き、実行しなさい。

## 問題12のスクリプトをここに書く
library(dplyr)
df %>% group_by(GENDER) %>%summarise(MATH_mean=mean(MATH),MATH_sd=sd(MATH),MATH_min=min(MATH),MATH_max=max(MATH),READ_mean=mean(READ),READ_sd=sd(READ),READ_min=min(READ),READ_max=max(READ),scie_mean=mean(SCIE),SCIE_sd=sd(SCIE),SCIE_min=min(SCIE),SCIE_max=max(SCIE))
## # A tibble: 2 × 13
##   GENDER MATH_mean MATH_sd MATH_min MATH_max READ_mean READ_sd READ_min READ_max
##   <chr>      <dbl>   <dbl>    <int>    <int>     <dbl>   <dbl>    <int>    <int>
## 1 F           530.    83.8      261      812      523.    84.9      211      750
## 2 M           540.    96.0      177      778      507.    95.8      150      753
## # ℹ 4 more variables: scie_mean <dbl>, SCIE_sd <dbl>, SCIE_min <int>,
## #   SCIE_max <int>

問題13

数学得点(MATH)、読解得点(READ)、科学得点(SCIE)の3変数について、男女別の箱ひげ図またはバイオリンプロットを作成するスクリプトを書き、実行しなさい。

## 問題13のスクリプトをここに書く
df %>% tidyplot(x=GENDER,y=MATH) %>% add_violin()

df %>% tidyplot(x=GENDER,y=READ) %>% add_violin()

df %>% tidyplot(x=GENDER,y=SCIE) %>% add_violin()

問題14

問題12で作成した男女別記述統計量や、問題13で作成したグラフをもとに、テスト得点の男女別分布の特徴を文章で説明しなさい

【問題14解答欄】 男女ともに中間層辺りの人が最も多くなっており、最大値や最小値に近づくにつれて人数が少なくなっている。 ————————————————————————

質的変数×質的変数の場合

問題15

個別項目への回答データ(STXXXQYY)から一つ選び、男女別の相対頻度のクロス表(男性内で総和1、女性内で総和が1になるクロス表)を作成しなさい。

## 問題15のスクリプトをここに書く
table(df$ST250Q05,df$GENDER)
##    
##        F    M
##   1 2762 2723
##   2  127  110
prop.table(table(df$ST005Q01,df$GENDER),margin=2)
##    
##              F          M
##   1 0.80964110 0.80846406
##   2 0.15904293 0.16636264
##   3 0.03131597 0.02517329

問題16

問題15で作成したクロス表と同等の帯グラフを作成するスクリプトを書き、実行しなさい。

## 問題16のスクリプトをここに書く
df$ST250Q05<-as.factor(df$ST250Q01)
tidyplot(df,y=GENDER,color=ST250Q01) %>% add_barstack_relative()
## Warning: The following aesthetics were dropped during statistical transformation: fill.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?
## The following aesthetics were dropped during statistical transformation: fill.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

問題17

問題15で作成したクロス表と、問題16で作成したグラフをもとに、選んだ個別項目への回答の男女別分布の特徴を文章で説明しなさい

【問題17解答欄】 スマートフォンを除くインターネットに接続できるデバイスを所持している割合は男女間で大きな差がないことが読み取れる。


多変量データの記述統計量と可視化

問題18

dfに含まれるの量的変数(MATH, READ, SCIE, AGE)間の相関係数を相関行列として求めるスクリプトを書き、実行しなさい。

## 問題18のスクリプトをここに書く
df %>% select(MATH,READ,SCIE,AGE) %>% cor()
##            MATH       READ       SCIE        AGE
## MATH 1.00000000 0.87348139 0.92845696 0.05203015
## READ 0.87348139 1.00000000 0.90854538 0.04887067
## SCIE 0.92845696 0.90854538 1.00000000 0.05570487
## AGE  0.05203015 0.04887067 0.05570487 1.00000000

問題19

dfに含まれるの量的変数(MATH, READ, SCIE, AGE)の散布図行列を作成するスクリプトを書き、実行しなさい。

## 問題19のスクリプトをここに書く
df %>% select(MATH,READ,SCIE,AGE) %>% plot()

問題20

問題18で求めた相関行列について、問題19で求めた散布図行列を参考にしながら、相関の大きさや向き、変数間の相関のパターンについて、文章で説明しなさい

【問題20解答欄】 数学得点(MATH)、読解得点(READ)、化学得点(SCIE)はそれぞれ強い正の相関関係にあるが、年齢(AGE)と数学得点、年齢と 読解得点、年齢と化学得点は相関が弱く、相関がないということが読み取れる。