Rで構造方程式モデリングのパス図を出力する

Rとは

統計解析に特化したプログラミング言語です https://cran.ism.ac.jp/index.html

lavaanとは

多変量解析、構造方程式モデリングを扱うためのRのパッケージ http://lavaan.ugent.be/index.html

インストール

環境

Rパッケージ

  • R 3.5.1 https://cran.ism.ac.jp/ をダウンロードして、pkgを開いてインストールする
  • brewでインストールしようとしたが、問題解決できず失敗した

lavaan

Rを立ち上げてpackageをインストールします。

$ R
> install.packages("lavaan", dependencies=TRUE)

libraryを実行してバージョンが確認できれば完了です。

> library(lavaan)
This is lavaan 0.6-1
lavaan is BETA software! Please report any bugs.

semPlot

パス図を書くために必要なので、こちらもインストール。

$ R
> install.packages("semPlot")

実行

以下をRで実行して、挙動を確認してみます。

library(semPlot)
# 適当なデータセット
X <- rnorm(100)
Y <- rnorm(100)
Z <- rnorm(100)
F1 <- rnorm(1) * X + rnorm(1) * Y + rnorm(1) * X * Y
F2 <- rnorm(1) * Y + rnorm(1) * Z
DF <- data.frame(X, Y, Z, F1, F2)

# 回帰
res1 <- lm(F1 ~ X * Y, data = DF)
res2 <- lm(F2 ~ Y * Z, data = DF)

# パス図を描画
semPaths(res1 + res2, "model", "est", intercepts = FALSE)

良い感じにパス図が出てきました。

f:id:nafu003:20180715110110p:plain

http://lavaan.ugent.be/tutorial/sem.html を参考に SEM(構造方程式モデリング)を実行してみます。

library(lavaan)
library(semPlot)
model <- '
  # 測定モデル
    ind60 =~ x1 + x2 + x3
    dem60 =~ y1 + y2 + y3 + y4
    dem65 =~ y5 + y6 + y7 + y8
  # 回帰
    dem60 ~ ind60
    dem65 ~ ind60 + dem60
  # 因子相関
    y1 ~~ y5
    y2 ~~ y4 + y6
    y3 ~~ y7
    y4 ~~ y8
    y6 ~~ y8
'
fit <- sem(model, data=PoliticalDemocracy)
semPaths(fit, "model", "est", intercepts = FALSE)

f:id:nafu003:20180715110959p:plain

それっぽい図ができあがりましたね。

トラブルシューティング

semPlotのインストール時に依存しているglasso, OpenMxがビルドできない...

エラーを見てみるとgfortranの実行で失敗していたので、以下で解決。

$ brew cask install gfortran

まとめ

  • Rは統計解析用の便利な言語だよ
  • lavaanはSEMに使うよ
  • semPlotはSEMを良い感じに描画してくれるよ

SEMは大学以来?なので構造方程式モデリングについてはもっと深めたいと思います。

参考記事

fastlaneのコミッターになりました

この広告は、90日以上更新していないブログに表示しています。

と表示されるぐらいには更新していなかったので、近況報告です。

3月初旬にfastlaneのコミット権を付与してもらい、core contributorとして活動しています。 (fastlaneでは外部のコミッターをcore contributorと呼んでいます。)

fastlaneiOS/Androidのためのビルド自動化ツールで、GitHub上で開発されているOSSです。 GitHubのスター数はもうすぐ18,000を越えようとしていて、国内でも数多くの会社で導入されています。

きっかけは@jpmartha_jpさんが株式会社ookami主催で開催したfastlane Meetup Japanでした。

f:id:nafu003:20170909215647p:plain

f:id:nafu003:20170909214900p:plain

fastlane Meetup Japan後、同時期に@giginetさんと共にcore contributorとなりました。

5月に公式Twitterでアナウンスされて、現在は30 commitsしています。 Contribute内容としては、主に今開発しているPlayer!で利用していて見つけたバグや困った所を修正しています。 また、Issue整理、ユーザーサポート、日本でしか利用されていないactionなどを@giginetさんと一緒に修正したりもしています。

f:id:nafu003:20170909214141p:plain

fastlaneのcore teamは本当に素晴らしく、これからも期待できるOSSです。 これからも、もっと貢献できるように頑張っていきます。

何か困ったことや聞きたいことがあれば気軽にメンション下さい。

atrun - 指定時間にjobを実行する

Macで指定時間にjobを実行するようにしたかったので、その時のメモを残しておきます。

スケジューリングの設定

1. まず、atrunを有効化します。(デフォルトでは無効になっている)

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

2. 次にスケジュールを登録します。

3分後にopen.shを実行したい場合には次のコマンドとなります。 

at -t `date -v+3M +"%Y%m%d%H%M"` -f open.sh

atコマンドについて

  • atqでqueueを見ることができます
  • atrm job_idでqueueから削除できます

参考

potatotips#37 (iOS/Android開発Tips共有会) Androidまとめ

第37回potatotipsはヤフーさんでの開催でした。
potatotips #37 (iOS/Android開発Tips共有会) - connpass

こちらが会場の様子です。

LODGEというヤフーが提供しているコワーキングスペースですが、とても快適でした。

以下Androidの発表をまとめました。

greenDAO2ObjectBox (@kaelaela)

greenDAOからObjectBoxへ移行してみようというプレゼン。


Android Transition (@takahirom)

Transitionについて分かりやすい説明でした。Custom Transitionについての詳しい説明はDroidKaigiのトークで聞くことができるようです。まだ登録していない方はぜひ登録を ->
DroidKaigi 2017


Crashlyticsの Non-Fatalに救われた話 (@fgfgtkm)

CrashlyticsはFabricツール群の一つとして提供されており、最近Googleに買収されましたことは記憶に新しいですね。
Twitterが開発者プラットフォームFabricをGoogleに売却、事業のスリム化を図る | TechCrunch Japan
CrashlyticsにはCrashだけでなくExceptionも送信することができるので、問題解決に役立ちます。


Lottie for You (@wasabeef_jp)

LottieとはAfter EffectsファイルをiOS, Android, React Nativeで実行することができるようにするライブラリ。
Airbnbが出しているOSSです。AEファイルを作成すれば、難しいアニメーションも簡単に描画可能になります。

例としては、以下のようなアニメーションが実行できます。

f:id:nafu003:20170215203246g:plain

プレゼン資料はこちらです。


Android Custom lintを初めて作った (kengoScal)

UnusedResourcesだけでは検知できない、利用していないコンポーネントなども自動で検知してくれるものを作成したというプレゼンです。

GitHubに公開されていますので、確認してみて下さい。

github.com

コードで
事前条件を表明する (@duane0728)

事前条件を表明するメリットは多いので、コードで示していきましょうというプレゼン。

  • メソッドが仕様の代わりになる
  • デバッグが容易になる
  • メソッドの責任領域を明確にできる


参考図書

2016年度版Heroku複数アカウント使い分け

以前はddollar/heroku-accountsで管理する方法だったのですが、最近ではherokuのpluginを利用する方法に変更になりました。

herokuのリポジトリで管理されているheroku-accountsを利用します。
GitHub - heroku/heroku-accounts: Helps use multiple accounts on Heroku.

インストール

とても簡単です、heroku pluginsコマンドを利用します。

$ heroku plugins:install heroku-accounts

アカウント追加

personalはアカウントの識別子です

$ heroku accounts:add personal

アカウント一覧

$ heroku accounts

アカウント切り替え

personalはアカウントの識別子です

$ heroku accounts:set personal

アカウント削除

personalはアカウントの識別子です

$ heroku accounts:remove personal

Callbacks一覧を見る

u = User.first
# Save callbacksの一覧
u.send('_save_callbacks')
# Update callbacksの一覧
u.send('_update_callbacks')
# Create callbacksの一覧
u.send('_create_callbacks')
# Destroy callbacksの一覧
u.send('_destroy_callbacks')

class User
  # include ActiveSupport::Callbacks は実行済みを想定
  def self.callback_list(name)
    get_callbacks(name)
  end
end
User.callback_list('save')
User.callback_list('update')
User.callback_list('create')
User.callback_list('destroy')

のような感じでcallback一覧が見れます。 before_after_などは基本使わないほうが良い(個人の見解)ですが、ライブラリなどで利用されていることも多いので、一覧を確認する際に重宝します。

S3からディレクトリ毎ダウンロードする方法

ブラウザからS3にアクセスするとファイル単位でしかダウンロードできないため、s3cmdを用います。

まずは、s3cmdをインストール

$ brew install s3cmd

s3cmdの設定を行ないます

$ s3cmd --configure

s3cmdの設定が終われば、--recursive付きでgetコマンドを実行すればディレクトリを取得できます。

$ s3cmd get --recursive s3://my-bucket/dir-you-want-to-download local-dir
関連記事

qiita.com