Как проверить linearHypothesis на перехватах полр заказанной модели lo git? - PullRequest
0 голосов
/ 21 июня 2020

Я хочу проверить существенные различия перехватов в упорядоченной модели lo git.

library(MASS)

house.plr <- polr(Sat ~ Infl + Type + Cont, weights = Freq, data = housing)
summary(house.plr)$coefficients
#           Value Std. Error   t value
# Infl -0.3907221 0.05856668 -6.671406
# Type  0.5654170 0.04921585 11.488515
# Cont  0.0998870 0.09008336  1.108829
# 1|2  -0.6937440 0.20773639 -3.339540
# 2|3   0.7906212 0.20701136  3.819216
# 3|4   2.0574730 0.21396779  9.615807

Проверка гипотез с коэффициентами работает нормально (связанный метод car:::linearHypothesis.polr).

library(car)
linearHypothesis(house.plr, hypothesis.matrix="Infl + Type + Cont")$`Pr(>Chisq)`[2]
# [1] 0.01679297

Однако проверка перехватов не работает, хотя перехваты включены в vcov.

signif(vcov(house.plr), 3)
#           Infl      Type      Cont     1|2     2|3     3|4
# Infl  0.003430 -0.000269  0.000320 0.00666 0.00623 0.00595
# Type -0.000269  0.002420 -0.000442 0.00365 0.00410 0.00464
# Cont  0.000320 -0.000442  0.008120 0.01240 0.01250 0.01260
# 1|2   0.006660  0.003650  0.012400 0.04320 0.04130 0.04140
# 2|3   0.006230  0.004100  0.012500 0.04130 0.04290 0.04270
# 3|4   0.005950  0.004640  0.012600 0.04140 0.04270 0.04580

Неудачные попытки:

linearHypothesis(house.plr, "(1|2 - 2|3) + (2|3 - 3|4) = 0")
linearHypothesis(house.plr, "1|2")

Или, поскольку в документации предлагается добавить vcov:

Метод по умолчанию будет работать с любым модельным объектом, для которого вектор коэффициентов может быть получен с помощью coef, а ковариационная матрица коэффициентов - с помощью vcov (в противном случае аргумент vcov. должен быть установлен явно).

linearHypothesis(house.plr, "1|2", vcov.=vcov(house.plr))

Все дает:

Error in constants(lhs, cnames_symb) : 
  The hypothesis "1|2" is not well formed: contains bad coefficient/variable names.
In addition: Warning message:
In constants(lhs, cnames_symb) : NAs introduced by coercion

Я заметил, что коэффициенты и пересечения хранятся в разных объектах, но это мне тоже не очень помогло.

house.plr$coefficients
#       Infl       Type       Cont 
# -0.3907221  0.5654170  0.0998870 

house.plr$zeta
#        1|2        2|3        3|4 
# -0.6937440  0.7906212  2.0574730 

Как я могу правильно определить hypothesis.matrix= для car::linearHypothesis, чтобы проверить вход tercepts?

Или кто-нибудь уже делал это с нуля?

Ожидаемый результат (из Stata):

 ( 1)  [cut1]_cons - 2*[cut2]_cons + [cut3]_cons = 0

           chi2(  1) =    6.53
         Prob > chi2 =    0.0106

Данные:

data(housing, package="MASS")
housing$Sat <- as.factor(1:4)
housing[2:5] <- lapply(housing[2:5], as.integer)

1 Ответ

0 голосов
/ 27 июня 2020

Мы можем проверить гипотезы на перехватах объекта "polr", используя car::linearHypothesis.default. У метода есть аргумент coef.=, который мы можем использовать вместе с coefficients и zetas, что дает нам соответствие с уже правильно существующим vcov. hypothesis.matrix= мы определяем как матрицу.

coef.ext <- with(house.plr, c(coefficients, zeta))

M <- matrix(c(0, 0, 0, 1, -2, 1), nrow=1, 
            dimnames=list('1|2 - 2*(2|3) + 3|4 = 0', names(coef.ext)))

car::linearHypothesis.default(house.plr, hypothesis.matrix=M, coef.=coef.ext)
# Re-fitting to get Hessian
# 
# Linear hypothesis test
# 
# Hypothesis:
# 1|2 - 2 2|3  + 3|4 = 0
# 
# Model 1: restricted model
# Model 2: Sat ~ Infl + Type + Cont
# 
#   Res.Df Df  Chisq Pr(>Chisq)  
# 1   1676                       
# 2   1675  1 6.5269    0.01063 *
# ---
# Signif. codes:  
# 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
...