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


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.