いつものパスタブログ

研究とか,Rとか

Stata学習奮闘記(1日目)

はじめに

ひょんなことからStata16を入手。せっかくなので勉強してみることに…

1時間後…

Rに帰してくれ。。

新しい言語はじめたてあるある。以前の言語の使いやすさに感動するアレです。 (pandas挫折の記憶がよぎる)

これではいけない! モチベーションを保つためにも何かしようと思い学習の過程を残すことにしました。

データインポート

  • csvファイルのインポート
import delimited "ファイルパス", encoding(UTF-8) clear 

試してみたところ,tsv(タブ区切り)も同じコードでいけた。

Rだとこう

library(tidyverse)
# csv
read_csv('ファイルパス', locale = locale(encoding = 'UTF-8'))
# tsv
read_tsv('ファイルパス', locale = locale(encoding = 'UTF-8'))

localeのところ普段書かないから気づかないけど結構長いな

  • stataファイルのインポート
use "ファイルパス", clear

楽ちん…末尾のclearはよくわからんが…

記述統計

  • カテゴリカルデータ
tab 変数
  • 連続値
summarize 変数

(とりあえずこれで出ることは分かったけれど他にもいろいろやり様はありそうです)

実際にデータをさわってみる

サンプルデータを使って,実際に分析をしてみた

データの準備

今回はRのforcatsパッケージに入っているgss_catを使ってみる。
アメリカのGeneral Social Surveyのデータの一部で,調査年・年齢・テレビ視聴時間・婚姻状況・人種・収入・党派・宗教・会派(宗教うちプロテスタント内部の分布)が変数として含まれている。
まずはRの方でstataファイルを準備する

library(tidyverse)
library(haven)

# 値ラベルの準備
val_label <-
  gss_cat %>% 
  select(where(is.factor)) %>% 
  map(.,
      ~{fct_unique(.) %>% 
          as.character() %>% 
          enframe(name = 'value', value = 'label')
      }) %>% 
  map(., ~{`names<-`(.$value, .$label)})


gss_cat %>% 
  # factorを整数値に変換
  mutate(across(.cols = where(is.factor), .fns = as.numeric, .names = '{col}_num')) %>% 
  select(!where(is.factor)) %>% 
  rename_with(.fn = ~{str_remove(., '_num')}) %>% 
  # 値ラベルの貼り付け
  mutate(
    marital = labelled(marital, labels = val_label[['marital']]),
    race = labelled(race, labels = val_label[['race']]),
    rincome = labelled(rincome, labels = val_label[['rincome']]),
    partyid = labelled(partyid, labels = val_label[['partyid']]),
    relig = labelled(relig, labels = val_label[['relig']]),
    denom = labelled(denom, labels = val_label[['denom']]),
    ) %>% 
  # dtaで書き出し
  write_dta(path = 'gss_cat.dta')

分析

  • データ読み込み
use "hogehoge\gss_cat.dta"
  • 度数分布
 tab marital

      marital |      Freq.     Percent        Cum.
--------------+-----------------------------------
    No answer |         17        0.08        0.08
Never married |      5,416       25.21       25.29
    Separated |        743        3.46       28.75
     Divorced |      3,383       15.75       44.50
      Widowed |      1,807        8.41       52.91
      Married |     10,117       47.09      100.00
--------------+-----------------------------------
        Total |     21,483      100.00


 tab race

          race |      Freq.     Percent        Cum.
---------------+-----------------------------------
         Other |      1,959        9.12        9.12
         Black |      3,129       14.57       23.68
         White |     16,395       76.32      100.00
---------------+-----------------------------------
         Total |     21,483      100.00
  • 記述統計
 summarize year age tvhours

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
        year |     21,483    2006.502    4.451994       2000       2014
         age |     21,407    47.18008     17.2875         18         89
     tvhours |     11,337    2.980771    2.587151          0         24