Rで何かをしたり、読書をするブログ

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

東京都の児童・生徒の体力テストの調査結果のデータの分析2 - 2009年と2022年の体力テストの結果の簡単な比較

Bing Image Creator で生成: Long wide view of north fields, flowering woods, photo

www.crosshyou.info

の続きです。

前回の最後で、男子の握力を2009年と2022年で比較しました。

グラフでも比較してみましょう。

2009年のほうが上方にありますね、特に y16 から y19b の学年で中学生、高校生で差が大きいようです。

体力テストの種目は握力の他にもありますが、それぞれ数値のスケールが違います。

なので、種目(変数名は ype です)ごとの標準化して全体で比較しやすいようにします。

まず、標準化するための自作関数を作成します。

次に、group_by() 関数、mutate() 関数、minmax() 自作関数をつかって、type 別に stats の値を標準化します。

ほんとうに type 別に標準化(最小値が 0, 最大値が 1)されているか確認します。

どの type も最小値が 0, 最大値が 1 となっていることが確認できました。

標準偏差が一番大きいのは、Grip strength (kg), 握力ですね。

では、全体の数値を 2009年と 2022年で比較してみます。

まずは、ヒストグラムを描いてみました。一番右のビンを見ると、2009年の割合のほうが大きいですよね。

平均値を計算してみます。

2009年の scaled の平均値は 0.474 でした。2022年は 0.459 でした。やはり、2009年のほうが体力テストの結果は良いようですね。

gender(男女) 別でもみてみましょう。

gender(男女)別のヒストグラムを描いてみました。当然ですが、Male 男性のほうが大きな値ですね。

数値でも確認します。

女性の平均値は、0.397, 男性の平均値は 0.535 となっています。男性のほうが大きな値です。

以上、簡単な分析でしたが、2009年のほうが、男性のほうが体力テストの結果は良いことがわかりました。

今回は以上です。

次回は、

www.crosshyou.info

です。

 

初めから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。

#
# 男子の握力のグラフ
df |> 
  filter(gender == "Male" & type == "Grip strength (kg)") |> 
  ggplot(aes(x = grade, y = stats, color = factor(year))) +
  geom_line(aes(group = year))
#
# min-max 自作関数の作成
minmax <- function(x) {
  (x - min(x, na.rm = TRUE)) / (max(x, na.rm = TRUE) - min(x, na.rm = TRUE))
}
#
# stats を type 別に minmax()
df <- df |> 
  group_by(type) |> 
  mutate(scaled = minmax(stats)) |> 
  ungroup()
df
#
# 標準化の確認
df |> 
  group_by(type) |> 
  summarize(min = min(scaled, na.rm = TRUE),
            max = max(scaled, na.rm = TRUE),
            avg = mean(scaled, na.rm = TRUE),
            sd = sd(scaled, na.rm = TRUE),
            n = n())
#
# scaled のヒストグラム year 別
df |> 
  ggplot(aes(x = scaled, fill = factor(year))) +
  geom_histogram(bins = 20, color = "white")
#
# scaled の比較 year 別
df |> 
  group_by(year) |> 
  summarize(mean = mean(scaled, na.rm = TRUE),
            sd = sd(scaled, na.rm = TRUE),
            n = n())
#
# scaled のヒストグラム gender 別
df |> 
  ggplot(aes(x = scaled, fill = gender)) +
  geom_histogram(bins = 20, color = "white")
#
# scaled の比較 gender 別
df |> 
  group_by(gender) |> 
  summarize(mean = mean(scaled, na.rm = TRUE),
            sd = sd(scaled, na.rm = TRUE),
            n = n())
#