Відповіді:
Одним із стандартних підходів є тест Вальда . Це те, що робить команда Stata test
після регресії logit або probit. Давайте подивимось, як це працює в R, подивившись приклад:
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv") # Load dataset from the web
mydata$rank <- factor(mydata$rank)
mylogit <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial") # calculate the logistic regression
summary(mylogit)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.989979 1.139951 -3.500 0.000465 ***
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
rank2 -0.675443 0.316490 -2.134 0.032829 *
rank3 -1.340204 0.345306 -3.881 0.000104 ***
rank4 -1.551464 0.417832 -3.713 0.000205 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Скажімо, ви хочете перевірити гіпотезу vs. . Це еквівалент тестування . Статистика тесту Wald така: β g r e ≠ β g p a β g r e - β g p a = 0
або
Наш тут і . Отже, нам потрібно лише стандартна помилка . Ми можемо обчислити стандартну помилку методом Delta : ; & betaгге-& betaгрthetas0=0& betaгге-& betaгр
Тому нам також потрібна коваріація та . Матриця дисперсії-коваріації може бути вилучена командою після запуску логістичної регресії: β g p avcov
var.mat <- vcov(mylogit)[c("gre", "gpa"),c("gre", "gpa")]
colnames(var.mat) <- rownames(var.mat) <- c("gre", "gpa")
gre gpa
gre 1.196831e-06 -0.0001241775
gpa -1.241775e-04 0.1101040465
Нарешті, ми можемо обчислити стандартну помилку:
se <- sqrt(1.196831e-06 + 0.1101040465 -2*-0.0001241775)
se
[1] 0.3321951
Отже, ваша Wald -значення є
wald.z <- (gre-gpa)/se
wald.z
[1] -2.413564
Щоб отримати -значення, просто використовуйте стандартний звичайний розподіл:
2*pnorm(-2.413564)
[1] 0.01579735
У цьому випадку ми маємо докази того, що коефіцієнти відрізняються один від одного. Цей підхід може бути розширений до більш ніж двох коефіцієнтів.
Використання multcomp
Цей досить виснажливий розрахунок можна зручно зробити при R
використанні multcomp
пакету. Ось той же приклад, що описано вище, але зроблено з multcomp
:
library(multcomp)
glht.mod <- glht(mylogit, linfct = c("gre - gpa = 0"))
summary(glht.mod)
Linear Hypotheses:
Estimate Std. Error z value Pr(>|z|)
gre - gpa == 0 -0.8018 0.3322 -2.414 0.0158 *
confint(glht.mod)
Довірчий інтервал для різниці коефіцієнтів також може бути розрахований:
Quantile = 1.96
95% family-wise confidence level
Linear Hypotheses:
Estimate lwr upr
gre - gpa == 0 -0.8018 -1.4529 -0.1507
Додаткові приклади multcomp
див. Тут чи тут .
Коефіцієнти логістичної регресії знаходять за максимальною вірогідністю. Але оскільки функція ймовірності включає багато продуктів, максимальна ймовірність журналу максимальна, що перетворює продукцію на суму. Модель, яка краще підходить, має більш високу ймовірність журналу. Модель, що включає більше змінних, має принаймні таку ж ймовірність, що і нульова модель. Позначимо ймовірність журналу альтернативної моделі (модель, що містить більше змінних) з та ймовірність журналу нульової моделі з , статистика тесту на коефіцієнт ймовірності: L L 0
Статистика тесту коефіцієнта ймовірності випливає з причому ступеня свободи є різницею в кількості змінних. У нашому випадку це 2.
Для проведення тесту на коефіцієнт ймовірності нам також потрібно встановити модель з обмеженням щоб можна було порівняти дві ймовірності. Повна модель має вигляд . Наша модель обмежень має вигляд: . log ( p ilog(р я
mylogit2 <- glm(admit ~ I(gre + gpa) + rank, data = mydata, family = "binomial")
У нашому випадку ми можемо використовувати logLik
для отримання ймовірності журналу двох моделей після логістичної регресії:
L1 <- logLik(mylogit)
L1
'log Lik.' -229.2587 (df=6)
L2 <- logLik(mylogit2)
L2
'log Lik.' -232.2416 (df=5)
Модель , яка містить обмеження на gre
і gpa
має трохи більш високу логарифмічну функцію правдоподібності (-232.24) по порівнянні з повною моделлю (-229.26). Наша статистика тестових коефіцієнтів імовірності:
D <- 2*(L1 - L2)
D
[1] 16.44923
Тепер ми можемо використовувати CDF для обчислення значення значення: с
1-pchisq(D, df=1)
[1] 0.01458625
Значення дуже мало, що свідчить про те, що коефіцієнти різні.
R вбудований тест відношення ймовірності; ми можемо використовувати anova
функцію для обчислення тесту на коефіцієнт ймовірності:
anova(mylogit2, mylogit, test="LRT")
Analysis of Deviance Table
Model 1: admit ~ I(gre + gpa) + rank
Model 2: admit ~ gre + gpa + rank
Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1 395 464.48
2 394 458.52 1 5.9658 0.01459 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Знову ми маємо вагомі докази того, що коефіцієнти gre
і gpa
значно відрізняються один від одного.
Функція Score є похідною функції журналу вірогідності ( ), де - параметри, а дані (для ілюстрації для цього показано універсальний випадок цілі):log L ( θ | x ) θ x
Це в основному нахил функції вірогідності журналу. Далі, нехай є інформаційною матрицею Фішера, яка є негативним очікуванням другої похідної функції вірогідності логарифма щодо . Статистика бальних тестів:
Тестовий бал можна також розраховувати, використовуючи anova
(статистична оцінка тесту називається "Rao"):
anova(mylogit2, mylogit, test="Rao")
Analysis of Deviance Table
Model 1: admit ~ I(gre + gpa) + rank
Model 2: admit ~ gre + gpa + rank
Resid. Df Resid. Dev Df Deviance Rao Pr(>Chi)
1 395 464.48
2 394 458.52 1 5.9658 5.9144 0.01502 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Висновок такий же, як і раніше.
Примітка
Цікавий взаємозв'язок між різними статистичними тестами, коли модель лінійна, є (Джонстон та ДіНардо (1997): Економетричні методи ): Wald LR Score.
multcomp
пакети робить його особливо легко. Наприклад, спробуйте наступне: glht.mod <- glht(mylogit, linfct = c("rank3 - rank4= 0"))
. Але набагато простішим способом було б зробити rank3
еталонний рівень (за допомогою mydata$rank <- relevel(mydata$rank, ref="3")
), а потім просто використовувати нормальний вихід регресії. Кожен рівень коефіцієнта порівнюється з еталонним рівнем. Значення р rank4
було б бажаним порівнянням.
Ви не вказали свої змінні, якщо вони є бінарними чи чимось іншим. Я думаю, ви говорите про бінарні змінні. Існують також багаточлени версії моделі probit і logit.
Загалом, можна використовувати повну трійність тестових підходів, тобто
Імовірність-коефіцієнт співвідношення
LM-тест
Вальд-тест
Кожен тест використовує різні тестові статистичні дані. Стандартним підходом було б скласти один із трьох тестів. Усі три можна використовувати для проведення спільних тестів.
Тест LR використовує різницю вірогідності журналу обмеженої та необмеженої моделі. Отже модель з обмеженням - це модель, в якій задані коефіцієнти встановлюються на нуль. Без обмежень є "нормальна" модель. Перевага тесту Уолда полягає в тому, що оцінюється лише необмежена модель. В основному він запитує, чи обмеження майже задоволено, якщо воно оцінюється на необмеженому MLE. У випадку тесту Лагранжа-множника слід оцінювати лише обмежену модель. Обмежений ML-оцінювач використовується для обчислення балу необмеженої моделі. Зазвичай цей бал не дорівнює нулю, тому ця невідповідність є основою тесту LR. Тест LM у вашому контексті також може бути використаний для перевірки на гетероседастичність.
Стандартні підходи - це тест Вальда, тест на коефіцієнт ймовірності та тестовий бал. Асимптотично вони повинні бути однаковими. На мій досвід, випробування на коефіцієнт ймовірності мають тенденцію до кращого результату при моделюванні на кінцевих зразках, але випадки, коли це має місце, були б у надзвичайно екстремальних (малих вибіркових) сценаріях, де я б сприйняв усі ці тести лише як приблизне наближення. Однак, залежно від вашої моделі (кількість коваріатів, наявність ефектів взаємодії) та ваших даних (мультиколінентність, граничний розподіл вашої залежної змінної), "чудове царство Асимптотії" може бути добре наближене напрочуд невеликою кількістю спостережень.
Нижче наводиться приклад подібного моделювання в Stata з використанням коефіцієнта ймовірності Wald та тестування балів у вибірці, що містить лише 150 спостережень. Навіть у такому невеликому зразку три випробування дають досить схожі p-значення, а вибіркове розподіл p-значень, коли нульова гіпотеза відповідає дійсності, здається, відповідає однаковому розподілу як слід (або принаймні відхиленням від рівномірного розподілу не більше, ніж можна було б очікувати через наслідок випадковості в експерименті Монте-Карло).
clear all
set more off
// data preparation
sysuse nlsw88, clear
gen byte edcat = cond(grade < 12, 1, ///
cond(grade == 12, 2, 3)) ///
if grade < .
label define edcat 1 "less than high school" ///
2 "high school" ///
3 "more than high school"
label value edcat edcat
label variable edcat "education in categories"
// create cascading dummies, i.e.
// edcat2 compares high school with less than high school
// edcat3 compares more than high school with high school
gen byte edcat2 = (edcat >= 2) if edcat < .
gen byte edcat3 = (edcat >= 3) if edcat < .
keep union edcat2 edcat3 race south
bsample 150 if !missing(union, edcat2, edcat3, race, south)
// constraining edcat2 = edcat3 is equivalent to adding
// a linear effect (in the log odds) of edcat
constraint define 1 edcat2 = edcat3
// estimate the constrained model
logit union edcat2 edcat3 i.race i.south, constraint(1)
// predict the probabilities
predict pr
gen byte ysim = .
gen w = .
program define sim, rclass
// create a dependent variable such that the null hypothesis is true
replace ysim = runiform() < pr
// estimate the constrained model
logit ysim edcat2 edcat3 i.race i.south, constraint(1)
est store constr
// score test
tempname b0
matrix `b0' = e(b)
logit ysim edcat2 edcat3 i.race i.south, from(`b0') iter(0)
matrix chi = e(gradient)*e(V)*e(gradient)'
return scalar p_score = chi2tail(1,chi[1,1])
// estimate unconstrained model
logit ysim edcat2 edcat3 i.race i.south
est store full
// Wald test
test edcat2 = edcat3
return scalar p_Wald = r(p)
// likelihood ratio test
lrtest full constr
return scalar p_lr = r(p)
end
simulate p_score=r(p_score) p_Wald=r(p_Wald) p_lr=r(p_lr), reps(2000) : sim
simpplot p*, overall reps(20000) scheme(s2color) ylab(,angle(horizontal))
gre
gpa
gre
gpa