「マクロ政治データ分析実習」第7回課題

作者

情21-0170 関大太郎

公開

2024年11月7日

セットアップ

問題1: {tidyverse}、{summarytools}、{fastDummies}パッケージを読み込む。

# ここにRコード

問題2: LMSからダウンロードした期末レポート用データ(Macro_HW07.csv)を読み込み、raw_dfという名のオブジェクトとして格納し、出力すること。

  • データはプロジェクト・フォルダー内にDataというフォルダーを作成し、そこにアップロードしておくこと。
  • データの読み込みは必ずread_csv()関数を使うこと(read.csv()は使わない)。
# ここにRコード
# A tibble: 648 × 9
      ID Company  Type  Name                    Soup  Weight Calorie   Fat  Salt
   <dbl> <chr>    <chr> <chr>                   <chr>  <dbl>   <dbl> <dbl> <dbl>
 1     1 Toyo     Bag   ダブルラーメン しょうゆ Yes      182     806  31.2  11  
 2     2 Toyo     Bag   マルちゃん正麺 豚骨醤… Yes      101     359   6.8   5.7
 3     3 Myojo    Cup   中華三昧タテ型ビッグ …  Yes       98     379   7.8   6.9
 4     4 Toyo     Cup   緑のたぬき天そば でか…  Yes      146     720  40.2   7.5
 5     5 Acecock  Cup   濃い味好きのための 濃… Yes       96     409  15     6.6
 6     6 Nongshim Bag   ノグリラーメン 袋麺     Yes      120     494  14.9   4.6
 7     7 Marutai  Stick 四海樓監修棒ちゃんぽん  Yes      118     435  18     6.8
 8     8 Marutai  Cup   縦型ちゃんぽん          Yes       65     286  11.1   4.3
 9     9 Myojo    Cup   一平ちゃん夜店の焼そば… No       132     622  31.8   4.5
10    10 Marutai  Cup   縦型高菜ラーメン        Yes       62     291  13.7   4  
# ℹ 638 more rows

問題3: raw_dfの大きさ(行数と列数)を出力する。

# ここにRコード
[1] 648   9

問題4: raw_dfの変数名(列名)を出力する。

# ここにRコード
[1] "ID"      "Company" "Type"    "Name"    "Soup"    "Weight"  "Calorie"
[8] "Fat"     "Salt"   
変数名 説明 単位
ID 商品ID
Company メーカー
Type Bag: 袋 / Cup: カップ / Stick: 棒
Name 商品名
Soup No: 汁なし / Yes: 汁あり
Weight 容量 g
Calorie 熱量 kcal
Salt 食塩相当量 g
Fat 脂質量 g

問題5: raw_dfからID(ID)、販売形態(Type)、汁の有無(Soup)、容量(Weight)、熱量(Calorie)、脂質量(Fat)、食塩相当量(Salt)の列を抽出し、df1という名のオブジェクトとして格納する。最後にdf1を出力すること。

  • 列の抽出は「ミクロ政治データ分析実習」の第9回、『私たちのR』の第13章を参照すること。
# ここにRコード
# A tibble: 648 × 7
      ID Type  Soup  Weight Calorie   Fat  Salt
   <dbl> <chr> <chr>  <dbl>   <dbl> <dbl> <dbl>
 1     1 Bag   Yes      182     806  31.2  11  
 2     2 Bag   Yes      101     359   6.8   5.7
 3     3 Cup   Yes       98     379   7.8   6.9
 4     4 Cup   Yes      146     720  40.2   7.5
 5     5 Cup   Yes       96     409  15     6.6
 6     6 Bag   Yes      120     494  14.9   4.6
 7     7 Stick Yes      118     435  18     6.8
 8     8 Cup   Yes       65     286  11.1   4.3
 9     9 Cup   No       132     622  31.8   4.5
10    10 Cup   Yes       62     291  13.7   4  
# ℹ 638 more rows

問題6: df1の操作を行う。操作後、df1を出力すること。

  • Step 1: 100g当たりの食塩相当量を計算し、Salt_100という列として追加する。
    • 100g当たりの食塩相当量は、食塩相当量(Salt)を容量(Weight)で割り、100をかけることで計算できる。
  • Step 2: Step 1と同様に、100g当たりの熱量と100g当たりの脂質量を計算し、それぞれCalrorie_100Fat_100という名の列として追加する。
  • Step 3: df1を上書きし、df1を出力する。
# ここにRコード
# A tibble: 648 × 10
      ID Type  Soup  Weight Calorie   Fat  Salt Salt_100 Calorie_100 Fat_100
   <dbl> <chr> <chr>  <dbl>   <dbl> <dbl> <dbl>    <dbl>       <dbl>   <dbl>
 1     1 Bag   Yes      182     806  31.2  11       6.04        443.   17.1 
 2     2 Bag   Yes      101     359   6.8   5.7     5.64        355.    6.73
 3     3 Cup   Yes       98     379   7.8   6.9     7.04        387.    7.96
 4     4 Cup   Yes      146     720  40.2   7.5     5.14        493.   27.5 
 5     5 Cup   Yes       96     409  15     6.6     6.87        426.   15.6 
 6     6 Bag   Yes      120     494  14.9   4.6     3.83        412.   12.4 
 7     7 Stick Yes      118     435  18     6.8     5.76        369.   15.3 
 8     8 Cup   Yes       65     286  11.1   4.3     6.62        440    17.1 
 9     9 Cup   No       132     622  31.8   4.5     3.41        471.   24.1 
10    10 Cup   Yes       62     291  13.7   4       6.45        469.   22.1 
# ℹ 638 more rows

平均値の差の検定

問題7: スープの有無(Soup)ごとに100g当たりの食塩相当量(Salt_100)の平均値を計算し、出力する。

# ここにRコード
# A tibble: 2 × 2
  Soup   Salt
  <chr> <dbl>
1 No     3.71
2 Yes    6.02

問題8: 以下のような仮説を検定する。仮説検定の際、有意水準は\(\alpha = 0.05\)を用いる。

  • 帰無仮説: スープの有無で100g当たりの食塩相当量には差がない。
  • 対立仮説: スープの有無で100g当たりの食塩相当量には差がある。
# ここにRコード

    Welch Two Sample t-test

data:  Salt_100 by Soup
t = -23.462, df = 183.81, p-value < 2.2e-16
alternative hypothesis: true difference in means between group No and group Yes is not equal to 0
95 percent confidence interval:
 -2.504700 -2.116131
sample estimates:
 mean in group No mean in group Yes 
         3.705596          6.016012 

問題9: 問題8の検定結果を解釈せよ。

ここに解釈を記入

相関分析

問題10: df1を使用し、100g当たり食塩相当量と熱量の散布図を作成する。以下のような散布図が得られるのであれば、見やすくカスタマイズしても良い。

  • {ggplot2}を使った可視化は「ミクロ政治データ分析実習」の第121314回、『私たちのR』の第19202122章を参照すること。
# ここにRコード

問題11: df1を使用し、以下のような仮説を検定する。仮説検定の際、有意水準は\(\alpha = 0.01\)を用いる(\(\alpha = 0.05\)ではないことに注意すること)。

  • 帰無仮説: 100g当たり食塩相当量と熱量には相関関係がない。
  • 対立仮説: 100g当たり食塩相当量と熱量には相関関係がある。
# ここにRコード

    Pearson's product-moment correlation

data:  df1$Salt_100 and df1$Calorie_100
t = -2.389, df = 646, p-value = 0.01718
alternative hypothesis: true correlation is not equal to 0
99 percent confidence interval:
 -0.192833052  0.007568239
sample estimates:
        cor 
-0.09358018 

問題12: 問題11の検定結果を解釈せよ。

ここに解釈を記入

独立性の検定

問題13: df1を使用し、以下の手順で100g当たり脂質量(Fat_100)を3つのカテゴリーに分ける。ただし棒ラーメン(Type == "Stick")は商品数が少ないため、今回はデータから除外する。カテゴリー化された変数はFat_cという名の列として追加する。続いて、商品ID(ID)、麺のタイプ(Type)、100g当たり脂質量(Fat_100)、100g当たり脂質量のカテゴリー(Fat_c)列のみを抽出した結果を、df2という新しい名のオブジェクトとして格納する。最後にdf2を出力すること。

  • Step 1: 麺のタイプ(Type)が棒ラーメン("Stick")である行を除外する。
    • 行の抽出は「ミクロ政治データ分析実習」の第9回、『私たちのR』の第13章を参照すること。
  • Step 2: 100g当たり脂質量(Fat_100)が10未満なら"Low"、20より高いなら"High"、それ以外は"Middle"とリコーディングし、Fat_cという名の列として追加する。
    • case_when()関数を推奨する。使い方は「ミクロ政治データ分析実習」の第10回、『私たちのR』の第14章を参照すること。同じ結果が得られるのであればcase_when()以外の関数を使っても良い。
  • Step 3: Fat_cをfactor化する。要素の順番は"Low""Middle""High"とする。
    • Factor変数については「ミクロ政治データ分析実習」の第7回第10回の資料、『私たちのR』の第16章を参照すること。
  • Step 4: 商品ID(ID)、麺のタイプ(Type)、100g当たり脂質量(Fat_100)、100g当たり脂質量のカテゴリー(Fat_c)列のみを抽出する。
  • Step 5: 処理結果をdf2に格納する。
  • Step 6: df2を出力する。
# ここにRコード
# A tibble: 622 × 4
      ID Type  Fat_100 Fat_c 
   <dbl> <chr>   <dbl> <fct> 
 1     1 Bag     17.1  Middle
 2     2 Bag      6.73 Low   
 3     3 Cup      7.96 Low   
 4     4 Cup     27.5  High  
 5     5 Cup     15.6  Middle
 6     6 Bag     12.4  Middle
 7     8 Cup     17.1  Middle
 8     9 Cup     24.1  High  
 9    10 Cup     22.1  High  
10    11 Cup     20.4  High  
# ℹ 612 more rows

問題14: df2を使用し、ラーメンの種類(Type)とカテゴリー化された100g当たり脂質量(Fat_c)のクロス表を作成する。行と列は逆でも構わない。

# ここにRコード
     
      Low Middle High
  Bag  45     84   10
  Cup  30    264  189

問題15: df2を使用し、以下のような仮説を検定する。仮説検定の際、有意水準は\(\alpha = 0.05\)を用いる。

  • 帰無仮説: ラーメンの種類(袋、カップ)と100g当たり脂質量は独立している。
  • 対立仮説: ラーメンの種類(袋、カップ)と100g当たり脂質量は独立していない(=連関している)。
# ここにRコード

    Pearson's Chi-squared test

data:  table(df2$Type, df2$Fat_c)
X-squared = 96.326, df = 2, p-value < 2.2e-16

問題16: 問題15の検定結果を解釈せよ(問題14のクロス表も参照すること)。

ここに解釈を記入