Як я можу обчислити Пірсона


10

Коефіцієнт ймовірності (він же відхилення) статистика та тест на непридатність (або на придатність) є досить простим для отримання логістичної моделі регресії (підходящої за допомогою функції) в Р. Однак це може бути легко кількість підрахунків клітинок закінчується досить низькою, що тест є ненадійним. Один із способів перевірити надійність тесту на коефіцієнт ймовірності на відсутність придатності - це порівняння його тестової статистики та P- значення з показниками чи-площі Пірсона (або ) на непридатність тесту.G2glm(..., family = binomial)χ2

Ні glmоб'єкт, ні його summary()метод не повідомляють статистику тесту для квадратного тесту Пірсона на відсутність придатності. У моєму пошуку єдине, що я придумав, - це chisq.test()функція (в statsупаковці): в її документації написано, що " chisq.testвиконує тести на таблицю на випадок чи на випадок чи на випадок придатності та тести на придатність". Однак, документація про те, як проводити такі тести, є рідкою:

Якщо xце матриця з одного рядка або стовпця, або якщо xє вектор , і yне дано, то благість-оф-придатний тест виконується ( xтрактується як одновимірний випадок непередбачених таблиці). Записи xповинні бути невід'ємними цілими числами. У цьому випадку перевірена гіпотеза полягає в тому, чи є ймовірності популяції рівними p, чи всі вони рівні, якщо pїх не вказано.

Я б уявив, що ви можете використовувати yкомпонент glmоб'єкта для xаргументу chisq.test. Однак ви не можете використовувати fitted.valuesкомпонент glmоб'єкта для pаргументу chisq.test, оскільки ви отримаєте помилку: " probabilities must sum to 1."

Як я можу (з R) принаймні обчислити статистику тесту Пірсона на відсутність придатності без необхідності виконувати кроки вручну?χ2

Відповіді:


13

Сума квадратичних залишків Пірсона точно дорівнює статистиці тесту Пірсона за нестачі. Отже, якщо ваша вивірена модель (тобто об'єкт) викликається , наступний код поверне тестову статистику:χ2glmlogistic.fit

sum(residuals(logistic.fit, type = "pearson")^2)

Додаткову інформацію див. У документації residuals.glm, зокрема про те, які інші залишки доступні. Наприклад, код

sum(residuals(logistic.fit, type = "deviance")^2)

отримає статистику тесту , точно таку, як передбачена.Г2deviance(logistic.fit)


Я згоден з Макросом. Якщо ви хотіли відповіді від групи, ви повинні були б почекати, щоб почути, що спочатку мають сказати інші. Все, що ви можете отримати зараз, упереджене, бачачи свою відповідь. Крім того, якщо ви знаєте відповідь, що ви намагаєтесь довести, роблячи це?
Майкл Р. Черник

@Macro - Firefeather розмістив на цьому веб-сайті чотири запитання (включаючи це) і відповів на три (включаючи це) сам, прийнявши один із своїх власних відповідей один раз. Ще кілька подібних, і я можу почати бачити візерунок!
jbowman

@jbowman, я можу уявити собі відповідь на ваше власне запитання, якщо ви вирішили це самостійно, перш ніж хто-небудь опублікував відповідь, але firefeather відповів буквально менше ніж через 5 хвилин після публікації питання, здається, він / вона не потребував допомоги , саме це змусило мене запитати, чому ... Я не дуже розумію мотивацію ...
Макрос

3
@Macro, будь ласка, ознайомтесь з цим офіційним посиланням: blog.stackoverflow.com/2011/07/… (це посилання на сторінці "Поставити запитання" на позначці прапорця внизу: "Дайте відповідь на власне запитання - поділіться своїми знаннями, Q & A-style" "). У мене було це питання, коли я робив домашнє завдання (вибравши використовувати R замість Minitab, хоча Minitab був продемонстрований у класі), але у мене не було достатньо часу, щоб набрати запитання і чекати відповіді. Я вирішив це рішення і вирішив поділитися ним із громадою.
Firefeather

2
@Macro, тебе дуже вітають! Я б хотів, щоб я міг задати більше питань, де я не даю відповіді, і відповісти на більше запитань, на які я не задавав. Але jbowman Правильно про схему: мій внесок до спільноти мають тенденцію в бік розмовляти з самим собою. :) (Принаймні, я якось
сприяю

10

Статистика Пірсона має вироджене розповсюдження, тому загалом не рекомендується використовувати логістичну модель придатності. Я віддаю перевагу структурованим тестам (лінійність, адиктивність). Якщо ви хочете тест всебічного перегляду, дивіться одиничну ступінь свободи ле Cessie - van Houwelingen - Copas - Hosmer невагомою сумою тестів квадратів, як це реалізовано у функції rmsпакету R.residuals.lrm


2
-1: Дякую за розуміння! Однак це не відповідає на моє запитання. Оскільки це відповідний коментар / дискусія щодо заяви, яку я зробив на задньому плані свого запитання, ваша відповідь, ймовірно, належить до коментаря, а не до відповіді.
Firefeather

2
Я здогадуюсь, що чотири людини, які проголосували за мою відповідь, не згодні з вами. І ви не займалися виродженим розподілом.
Френк Харрелл

@FrankHarrell: Чи відрізняється цей показник ГОФ, ніж тест GOF Hosmer-Lemeshow (HL)? Якщо припустити це через назву, а також порівняли два: Проведений тест HL GOF, як знайдено в ResourceSelectionупаковці, і його результат відрізняється від того, що я отримую від запуску resid(lrm_object, 'gof')після встановлення моєї логістичної регресійної моделі як lrm_object <- lrm(...). Якщо вони справді різні, чи можете ви прокоментувати те, як тест на HL співпадає з тим, про який ви згадуєте тут? Дякую!
Мег

1
Два сильно відрізняються. Статистика HL (тепер застаріла) має фіксований df і зазвичай заснована на децилах ризику. HLχ2 статистика при цьому не вироджується як N. З іншого боку, будьте обачніχ2 статистика, де df продовжує розширюватися N.
Френк Харрелл

Мені б хотілося побачити симуляцію, яка показує це виродження.
wdkrnls

0

Дякую, я не усвідомлював, що це так просто, як: sum (залишки (f1, type = "pearson") ^ 2) Однак зауважте, що залишки перлів змінюються залежно від того, чи обчислюється вона коваріатною групою чи окремою особою. Простий приклад:

m1 - матриця (ця головка більшої матриці):

m1 [1: 4,1: 8]

    x1 x2 x3 obs    pi   lev  yhat y
obs  1  1 44   5 0.359 0.131 1.795 2
obs  0  1 43  27 0.176 0.053 4.752 4
obs  0  1 53  15 0.219 0.062 3.285 1
obs  0  1 33  22 0.140 0.069 3.080 3

Там, де x1-3 - це предиктори, обс - ні. спостереження в кожній групі, pi - ймовірність членства в групі (прогнозована з рівняння регресії), лев - важіль, діагональ матриці капелюха, тобто передбачуваний ні. (y = 1) у групі, а y фактичне немає.

Це дасть вам групу Пірсона. Зверніть увагу, як це по-іншому, якщо y == 0: ' 'fun1 <- function(j){        if (m1[j,"y"] ==0){ # y=0 for this covariate pattern     Pr1 <- sqrt( m1[i,"pi"] / (1-m1[i,"pi"]))     Pr2 <- -sqrt (m1[i,"obs"]) res <- round( Pr1 * Pr2, 3) return(res) } else {  Pr1 <- m1[j,"y"] - m1[j,"yhat"] Pr2 <- sqrt(   m1[j,"yhat"] * ( 1-(m1[j,"pi"]) )   ) res <- round( Pr1/Pr2, 3) return(res) }    }

Таким чином

nr <-nrow(m1)
nr1 <- seq(1,nr)
Pr <- sapply(1:nrow[m1], FUN=fun1)
PrSj <- sum(Pr^2)

Якщо існує велика кількість предметів з y = 0 коваріантними візерунками, то залишки Pearons будуть набагато більшими, якщо їх обчислити, використовуючи метод "по групі", а не метод "по індівідуальному".

Див., Наприклад, Hosmer & Lemeshow "Прикладна логістична регресія", Wiley, 200.


0

Ви також можете використовувати, c_hat(mod)що дасть такий самий вихід, як і sum(residuals(mod, type = "pearson")^2).


1
У якому пакунку ви c_hatзнайдете?
Firefeather
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.