получение r2 из объекта summ.svyglm - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь получить R² для моделей логистики c с поправкой на опрос. Я использую jtools, который выводит на экран Pseudo-R² и наблюдения, но я не могу понять, как извлечь эти элементы в data.frame.

library(survey)
library(jtools)
data(api)
dstrat <- svydesign(id = ~1, strata =~ stype, weights =~ pw,
data = apistrat, fpc =~ fpc)
regmodel <- svyglm(as.numeric( both =="Yes") ~ ell * meals, design = dstrat, family="binomial" )
summ(regmodel)

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Вы можете попробовать один из следующих подходов:

library(survey)
library(jtools)
data(api)
dstrat <- svydesign(id = ~1, strata =~ stype, weights =~ pw,
                    data = apistrat, fpc =~ fpc)
regmodel <- svyglm(as.numeric( both =="Yes") ~ ell * meals, design = dstrat, family="binomial" )

Подход 1:

#Approach 1
attr(summ(regmodel), "rsq")

Результат:

[1] 0.00107412

Подход 2:

#Approach 2
x <- capture.output(summ(regmodel))
x[9]
x[10]

Вывод:

[1] "Pseudo-R² (Cragg-Uhler) = 0.00"

[1] "Pseudo-R² (McFadden) = 0.01"
1 голос
/ 05 августа 2020

Они хранятся как атрибуты объекта summ(regmodel). Значение «Cragg-Uhler» находится в атрибуте "rsq", а значение «McFadden» - в "rsqmc". Вы можете извлечь их как числа, используя

rsq <- attr(summ(regmodel), "rsq")
rsqmc <- attr(summ(regmodel), "rsqmc")

. Чтобы найти такие вещи, вам нужно посмотреть на код, который печатает результаты. Часто это print.xxxx, где xxxx - класс объекта. Здесь class(summ(regmodel)) равно c("summ.svyglm" "summ"), поэтому будет print.summ.svyglm, если такая вещь есть, и print.summ, если нет.

Обычно эти функции не экспортируются из пакета, поэтому если print.summ.svyglm ничего не находит, вы все равно можете попробовать getAnywhere("print.summ.svyglm"). В данном случае это работает. Вы можете прочитать эту функцию и выяснить, откуда она взяла эти значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...