理学療法士がまとめたノート

統計学備忘録(R言語のメモ)

since2016 ときどきTEXのメモ

Nagelkerke's R squared

Nagelkerkes's R2 の求め方

logL: 最大対数尤度
deviance =-2*logL

Dnull: Null modelのdeviance
D: 予測したモデル(変数あり)のdeviance
n: サンプルサイズ
R2 : Nagelkerkes's R2

irisを使用してRのパッケージ(fmsb)で算出

library(fmsb)
dat <- iris[iris$Species=="setosa" | iris$Species=="virginica" ,]
dat$Species <- ifelse(dat$Species=="setosa",1,0)
fit_null <- glm(Species ~ 1, family = binomial (link = "logit"), data = dat)
fit <- glm(Species ~ Sepal.Width, family = binomial (link = "logit"), data = dat)

NagelkerkeR2(fit)
# N=100
# R^2 = 0.4017335

求め方
 x= 1 - (\frac{e^{L0}}{e^{L1}})^{\frac{2}{n}}= 1 - e^{\frac{D - Dnull}{n}}
 y= = 1 - ({e^{L0}})^{\frac{2}{n}}= 1 - e^{\frac{-Dnull}{n}}
 R^{2}= \frac{x}{y}

n = dim(dat)[1]
#最大対数尤度
L0 <-  logLik(fit_null)[1]
L1 <- logLik(fit)[1]

x <- 1- (exp(L0)/exp(L1))^(2/n)
y <- 1- (exp(L0))^(2/n)
x/y
# R^2 = 0.4017335

#Rを使ってdevianceから求めると・・・
Dnull =  summary(fit)$null.deviance
D = summary(fit)$deviance
x <- 1 - exp((D - Dnull)/n)
y <- 1 - exp(-Dnull/n)
x/y
# R^2 = 0.4017335

参考
* E.W.SteyerbergClinical; Prediction Models, 2nd ed , A Practical Approach to Development, Validation, &Updating, 2019, p66
* 久保 拓弥; データ解析のための統計モデリング入門―一般化線形モデル・階層ベイズモデル・MCMC, 2012, pp94-111
* FAQ: What are pseudo R-squareds?