anova.rq() в пакет quantreg в R

Интересувам се от сравняване на оценки от различни квантили (един и същ резултат, същите ковариати), използвайки anova.rqlist функция, извикана от anova в средата на пакета quantreg в R. Въпреки това математиката във функцията е отвъд елементарния ми опит. Да кажем, че пасвам на 3 модела в различни квантили;

library(quantreg)
data(Mammals) # data in quantreg to be used as a useful example
fit1 <- rq(weight ~ speed + hoppers + specials, tau = .25, data = Mammals)
fit2 <- rq(weight ~ speed + hoppers + specials, tau = .5, data = Mammals)
fit3 <- rq(weight ~ speed + hoppers + specials, tau = .75, data = Mammals)

След това ги сравнявам с помощта на;

anova(fit1, fit2, fit3, test="Wald", joint=FALSE)

Въпросът ми е кой от тези модели се използва като база за сравнение?

Моето разбиране за теста на Wald (wiki запис)

въведете описание на изображението тук

където θ^ е оценката на параметъра(ите) от интерес θ, който се сравнява с предложената стойност θ0.

Въпросът ми е какво е функцията anova в quantreg, която избира като θ0?

Въз основа на pvalue, върната от anova, моето най-добро предположение е, че той избира най-ниския зададен квантил (т.е. tau=0.25). Има ли начин да се посочи медианата (tau = 0.5) или още по-добре средната оценка, получена с помощта на lm(y ~ x1 + x2 + x3, data)?

anova(fit1, fit2, fit3, joint=FALSE)

всъщност произвежда

Quantile Regression Analysis of Deviance Table

Model: weight ~ speed + hoppers + specials
Tests of Equality of Distinct Slopes: tau in {  0.25 0.5 0.75  }

             Df Resid Df F value  Pr(>F)  
speed         2      319  1.0379 0.35539  
hoppersTRUE   2      319  4.4161 0.01283 *
specialsTRUE  2      319  1.7290 0.17911  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

докато

anova(fit3, fit1, fit2, joint=FALSE)

дава точно същия резултат

Quantile Regression Analysis of Deviance Table

Model: weight ~ speed + hoppers + specials
Tests of Equality of Distinct Slopes: tau in {  0.5 0.25 0.75  }

             Df Resid Df F value  Pr(>F)  
speed         2      319  1.0379 0.35539  
hoppersTRUE   2      319  4.4161 0.01283 *
specialsTRUE  2      319  1.7290 0.17911  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Редът на моделите очевидно се променя в anova, но как F стойността и Pr(>F) са идентични и в двата теста?


person JustGettinStarted    schedule 23.09.2015    source източник
comment
Обърнете внимание, че този въпрос е отчасти мотивиран от моето четене на книгата(let) Quantile Regression от Лингсин Хао и Даниел К. Найман. На страници 49, 50 и 60 те описват подробно как първоначалните оценки на квантилите могат да бъдат сравнени между квантили с помощта на теста на Wald. Те изрично описват как даден квантил, който представлява интерес, може да бъде сравнен с медианата или най-ниските или най-близките квантили, което ме накара да се замисля какво прави функцията anova в пакета quantreg за оценки без първоначално зареждане и какъв квантил е избран като референтен за такива сравнения .   -  person JustGettinStarted    schedule 23.09.2015


Отговори (1)


Всички квантили, които въвеждате, се използват и няма нито един модел, използван като референтен.

Предлагам ви да прочетете тази публикация и свързания с нея отговор, за да разберете каква е вашата „тета .0" е.

Вярвам, че това, което се опитвате да направите, е да проверите дали регресионните линии са успоредни. С други думи дали ефектите на променливите за прогнозиране (тук само доход) са еднакви в квантилите.

Можете да използвате anova() от пакета quantreg, за да отговорите на този въпрос. Наистина трябва да използвате няколко приспособления за всеки квантил.

Когато използвате joint=FALSE както го направихте, получавате сравнения на коефициенти. Но имате само един коефициент, така че има само една линия! И резултатите ви показват, че ефектът от дохода не е еднакъв в квантилите във вашия пример. Използвайте няколко предикторни променливи и ще получите няколко p-стойности.

Можете да направите общ тест за равенство на целите набори от коефициенти, ако не използвате joint=FALSE и това ще ви даде „Съвместен тест за равенство на наклоните“ и следователно само една p-стойност.

РЕДАКТИРАНЕ:

Мисля, че theta.0 е средният наклон за всички стойности на „tau“ или действителната оценка от „lm()“, а не конкретен наклон на някой от моделите. Моето разсъждение е, че „anova.rq()“ не изисква никаква конкретна ниска стойност на „tau“ или дори медианата „tau“.

Има няколко начина да тествате това. Или направете изчисленията на ръка, като theta.0 е равна на средната стойност, или сравнете много комбинации, защото тогава бихте могли да получите ситуация, при която някои от вашите модели са близки до модела с ниски стойности на „tau“, но не и на „lm“ ()' стойност. Така че, ако theta.0 е наклонът на първия модел с най-ниско 'tau', тогава вашият Pr(>F) ще бъде висок, докато в другия случай ще бъде нисък.

Този въпрос може би трябваше да бъде зададен на кръстосано валидиране.

person Julian Wittische    schedule 23.09.2015
comment
1) Публикацията, която свързвате, беше информативна: тя гласи, че нашият параметър, който ни интересува, е означен с θ0 и това обикновено е 0, тъй като искаме да проверим дали коефициентът се различава от 0 или не. Не се интересувам от коефициентите, които се различават от 0 (pvalue в summary.rq(fit1) ще ми каже това). Това, което се опитвам да тествам, е дали ефектите на предикторите при например tau=0,1 и tau=0,9 се различават значително от tau=0,5. В база anova първият модел, посочен в аргумента, се използва като θ0, защо това не е така с anova.rq и как мога да го направя така? - person JustGettinStarted; 24.09.2015
comment
2) коригиран пример за включване на множество ковариати, така че joint=FALSE да може да се приложи. За моето приложение се интересувам от това как ефектите на един специфичен предиктор варират при различни квантили. Дори включването на модел с множество ковариати, промяната на реда на моделите в аргументите за anova.rq не променя резултата. - person JustGettinStarted; 24.09.2015
comment
Вече можете да кажете, че ефектите на предиктора са различни за различните стойности на tau. Ако искате информация за конкретни стойности на "tau", тогава винаги можете да използвате оригиналната функция "anova()", предполагам. - person Julian Wittische; 25.09.2015
comment
В отговор на вашата редакция. Подозирам, че всъщност anova.rq използва всички възможни комбинации от θ.hat и θ0, за да тества дали θhat - θ0 = 0 и НЕ ако θhat = θ0. По този начин няма справка (θ0) сама по себе си, тъй като всеки тау се тества спрямо всеки друг тау във всички комбинации. Предполагам това от книгата на Koenker Quantile Regression 2005 pg 75-76, както и от кодирането в anova.rq, разкрито от getAnywhere(anova.rq). Това би обяснило защо подреждането на моделите не променя нищо и lm не се извиква от anova.rq - person JustGettinStarted; 25.09.2015