目次
データ数を2つ集め併せて計4つほど程度増やしてRF6.2で出力を得て不要な変数が消せて必要な変数がどれかわかる結果を得る.
統計で見る日本というサイトで,2020年の外国人数と小学校数(可住地面積100km2当たり)の csvファイルをダウンロードする.
ダウンロードしたopen-data-20240220T010622Z-001の中にあるopen-data_2020.csvに集めた2つのデータを元あるデータの右に貼り付ける. その際に,1741のデータから651のデータを抜き取ること.どのデータを入れるかはdata-city_num.csvを見て行う.(市町村コードが対応するデータを取る.)
実験に必要なRとRstudioの導入は下記のサイトを参考にして行った.
https://www.tku.ac.jp/iss/guide/classroom/soft/rrstudio-desktop.html
①パッケージのインストール
これはLPA.Rを先ほどダウンロードしたRstudio上で行う.
プログラムを実行する前に,パッケージのインストールを行う.
右下のPackagesの所から行う.
左上のInstallを押すと,好きなPackagesをインストールすることが出来る.(今回はdepmix4)
ライブラリのインストールの確認は以下のコードをconsoleに打つことで行える.
>library()
インストールしたパッケージが完了していることが分かる.
②プログラムの変更部分
・12行目:
lca <- read.csv("C:/Users/towa/Labo2/数値実験結果/オープンデータを用いたLPA/2020/data_2020/LPA_0209/open-data_2020.csv")
ファイルパスを自分のものに変更.
・27行目:
cont_data <- dplyr::select(lca, x_1:y) #連続変数のみ
(lca, x_1:y)のx_1:yをx_1:x_13に変更(データが13個あるため).
・36行目
mod <- mix(list(x_1~1, x_2~1, x_3~1, x_4~1, x_5~1, x_6~1, x_7~1, x_8~1, x_9~1, x_10~1, y~1),
y~1を消して,x_11~1,x_12~1,x_13~1を追加.(これもデータが13個あるため).
・39行目
nstates=5, # the number of latent classes
5から4に変更.(今回は4つのクラスに分けたいから). ・40行目
family=list(gaussian(),gaussian(),gaussian(),gaussian(),gaussian(),gaussian(),gaussian(),gaussian(),gaussian(),gaussian(),gaussian()),
gaussian()の数を13個に増やす.
・42行目
respstart=runif(110))
110から104に変更.(今回は104個の潜在クラスのどれに所属するかの初期確率) ・59行目
write.csv(posterior.states, "C:/Users/towa/Labo2/数値実験結果/オープンデータを用いたLPA/2020/data_2020/LPA_0209/open-data_2020_LPA_result.csv")
データを入れたい場所を自分のものに指定.
③プログラムの実行
Rstudioで実行を行う場合,実行したい範囲を選択して右上のRunをクリックするとできる.
今回はパラメータ数にペナルティを設けることでモデルの自由度に対して制限をかける指標であるBICを表示するところまで行った.
console上の結果は下記のようになる.
グラフはplots上に表示される.
次にモデルのフィット結果から得られる各対象が各潜在クラスに所属する確率(事後確率)を計算.これにより,各対象がどのクラスに属するかの推定が得られる.
そして,その結果を表示し,csvファイルに保存する.
console部分で最初の6つの観測に対して小数点以下4桁を四捨五入して表示され,指定したcsvファイルに保存されていることが分かる.
その結果,4つのqに分けられた.
実装は,RF6_real_experiment100.pyのプログラムを用いて行った.
①プログラムの変更部分
・169行目: ファイルパスを自分で収集したデータが入ったcsvファイルのパスに変更する.
・175行目: num_qの値を先ほど出した4に変更する.
・359行目: num_Rの値を5に変更する.
・640行目: if R==1:から下の部分をコメントアウトする.
これと同様に,J=3,4,5も同じ操作を行う.