日々の記録簿

日々のできごとの記録

日記

surveyでR2値を計算する方法

投稿日:

Rのsurvey packageには通常の回帰分析におけるR2値を計算する関数が存在しないようである。なので計算方法。参考にしたのはこちらのサイト。コードを見るとわかるが、途中でヌルモデルを計算してるので複雑なデザインだと算出に時間がかかるかもしれない。ちなみに調整済R2は計算できない。モデル比較をしたいならanova関数を使うと良いらしい。

library(survey)

data(api)
dstrat <- svydesign(
  id = ~1, strata = ~stype, weights = ~pw, data = apistrat, fpc = ~fpc
)

lm1 <- svyglm(api00 ~ ell + meals + mobility, design = dstrat)
lm2 <- svyglm(api00 ~ ell, design = dstrat)
lm3 <- svyglm(api00 ~ ell * meals * mobility, design = dstrat)

svyrsq <- function(object) {
  if (!object$family$family == "gaussian") {
    stop("only applied 'family = gaussian'")
  }
  null_f <- update(object$formula, . ~ 1)
  null_e <- survey::svyglm(null_f, design = object$survey.design) # ヌルモデルを計算
  tot_var <- summary(null_e)$dispersion[1]
  res_var <- summary(object)$dispersion[1]
  rsq <- 1 - res_var / tot_var
  return(rsq)
}

svyrsq(lm1)
svyrsq(lm2)
svyrsq(lm3)

# モデル比較をしたい場合はanovaを使う
anova(lm2, lm1)
anova(lm3, lm1)

スポンサーリンク

スポンサーリンク

-日記

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

RからMplusを使う(MplusAutomation)

Mplusという統計ソフトウェアがあります。高機能なのですが、いかんせんエディタが残念仕様で使いづらい・・・。 と思っていたのですが、RからMplusを操作するMplusAutomationというパッ …

SPSSの「ケースの重み付け」とは何なのか

前回の続き。だいたい納得したのだが、SPSSの「ケースの重み付け」が一体何をしているのかもう少し調べてみたくなった。「ケースの重み付け」を設定したとき、分散や標準偏差はどうやって計算されているのだろう …

Nexus 9 LTEを購入し、Cyanogemod を導入した!

PDFを読んだり、Kindleを読んだりするためのタブレット端末として、Nexus 9 LTEを購入しました。 タブレットの定番はiPadなのでしょうが、まわりがみんな持っていて面白みに欠けるので、こ …

Gnome 3.16 とTrackball Emulation

Gnome 3.16にアップデートしたら、Trackball Emulationによるスクロールが効かなくなったので、その解決方法です。 原因は、Gnome 3.16からTrackball Emula …

Nexus 6にCyanogenmod 13.0をインストールした!

Nexus 6にCyanogenmod 13.0をインストールしたメモです。軽く考えていたら、まさかの一日作業になってしまいました・・・。 以下、経緯を簡単に。 まず、通常のアップデートを行ったのです …