日誌

Stataでirisデータの散布図を描く

まず,下記リンク先,UCLAのStatistical Computingに詳しい解説が
あるので,これに習えば,有名なhsbデータセットで簡単に基本が学べます。

Stataで散布図
http://www.ats.ucla.edu/stat/stata/modules/graph8/twoway_scatter_combine/default.htm

これまでせっかくRのirisデータと親しんだので,上記の方法を
RのirisデータをStataに読ませて再現しようと思います。
irsデータの説明はこちら

まず,Rのirisデータをcsvファイルにエクスポートします。
これは以下の2つのプログラムだけでできます。

 setwd(choose.dir())
 #これでデータを作成する先を選択します

 write.table(iris, "iris.csv", sep=",", row.names=FALSE)
     #すでにR内にあるirisデータからiris.csvファイルを作成します。
 #最初に設定したフォルダの中にcsvファイルができています。

この方法を使えば,Rのexampleデータセットをなんでもエクスポートして
他のソフトで解析できるので便利です。

ここからはStataです。まずStataを起動します。
次に,csvファイルをインポートします。

メニューからだと
File > Import > Text data created by a spreadsheet

で,読み込むcsvファイルをBrowseから指定した後,
 comma-delimited dataにチェックを入れてOKします。

 ---------------
(追記:2013/12/26)
File > Import >Text data (delimited, *csv...)    (Stata13の場合)
 ---------------

次に,Rでやったように,長い変数の名前を変更します。

メニューからだと
Data > Data utilities > Rename variables

ですが,コマンドだともっと簡単で,( )に順に並べるだけです。
なぜかRで表示されていた変数名と違いますが,Stataでは大文字
小文字の区別が(多分)ないのと,変数名でピリオドが認識され
ない,という違いかと思います。

rename (petallength petalwidth species) (pl pw sp)

これで作図準備完了です。

単純には,

twoway scatter pw pl

だけで散布図は描けます。



(1)層別散布図

まずは層別散布図です。カテゴリ変数が品種のspしかないので,これを使います。

twoway (scatter pw pl), by(sp)

なお,byの方にカテゴリ変数を by(female ses)のように追加できる
みたいですが,irisはspしかないのであきらめます。


byオプションを使うと,このように別れて出てきますが,以下のようにすると
Rでやったものと同じように描けました。
(///で複数行に区切ってあるので,Do-file Editorに貼りつけて選択実行します。)

doedit とコマンドを打つか, アイコン をクリックしてください。

twoway (scatter pw pl if sp =="setosa") ///
            (scatter pw pl if sp =="versicolor" , mcolor(blue)) ///
            (scatter pw pl if sp =="virginica" , mcolor(red))




基本的には,scatterを繰り返す感じですね。このままだとラベルがpwの変数ラベル
そのままなので,これを変更するオプションを以下のようにつけます。

 twoway (scatter pw pl if sp =="setosa", legend(label(1 "setosa"))) ///
             (scatter pw pl if sp =="versicolor" , mcolor(blue) legend(label(2 "versicolor"))) ///
             (scatter pw pl if sp =="virginica" , mcolor(red) legend(label(3 "virginica")))


そうすると完成です。



(2)回帰直線

次は線を追加します。

twoway (scatter pw pl) (lfit pw pl)




(3)回帰直線+id表示


まずid変数がないので作成します。これは簡単で,

egen id=seq()

だけでできます。

twoway (scatter pw pl, mlabel(id)) (lfit pw pl)



上のプログラムの最後に , by(sp) とオプションつければ
層別散布図で出るのですが,ごちゃごちゃして見にくかったので
削除しました。