2016-07-18 5 views
3

В R, после подгонки GLM вы можете получить краткую информацию, содержащие остаточные девиантности и нулевую девиантность, который говорит вам, насколько хорошо ваша модель по сравнению с моделью с только термином перехвата, для примера модели:Как вы получаете нулевые и остаточные эквиваленты R в Matlab fitglm?

model <- glm(formula = am ~ mpg + qsec, data=mtcars, family=binomial) 

мы имеем:

> summary(model) 
... 
    Null deviance: 43.2297 on 31 degrees of freedom 
Residual deviance: 7.5043 on 29 degrees of freedom 
AIC: 13.504 
... 

В Matlab, когда вы используете fitglm вы возвращаете объект из GeneralizedLinearModel класса, который имеет Deviance свойство, содержащее остаточные девиации. Однако я не могу найти ничего, непосредственно связанного с нулевым отклонением. Каков самый простой способ рассчитать это?

Пример Matlab код:

load fisheriris.mat 
model = fitglm(meas(:, 1), ismember(species, {'setosa'}), 'Distribution', 'binomial') 

производит:

model = 


Generalized Linear regression model: 
    logit(y) ~ 1 + x1 
    Distribution = Binomial 

Estimated Coefficients: 
         Estimate    SE     tStat     pValue  
        _________________ _________________ _________________ ____________________ 

    (Intercept)  27.8285213954246  4.8275686220899  5.76450042948896 8.19000695766331e-09 
    x1    -5.17569812610148 0.893399843474784 -5.79326061438645 6.90328570107794e-09 


150 observations, 148 error degrees of freedom 
Dispersion: 1 
Chi^2-statistic vs. constant model: 119, p-value = 9.87e-28 

с остаточной девиации от model.Deviance:

>> model.Deviance 

ans = 

      71.8363992272217 

ответ

0

Если вызов fitglm используется с таблицей и регрессию, указанную с использованием записи Уилкинсона, то получившаяся GeneralizedLinearModel Объект model имеет свойства, которые позволяют получить таблицу, используемую для соответствия модели, имени ответа и распределению.

Так как нулевое отклонение от R является только отклонением от модели с перехватом установленной, мы можем найти его путем установки null_deviance_model использования приведенной выше информации:

null_deviance_model = model.fit(model.Variables, ... 
     [model.ResponseName, ' ~ 1'], 'Distribution', model.Distribution.Name); 

Нулевое отклонение от R задаются null_deviance_model.Deviance ,

Я не уверен, распространяется ли это на регрессии с использованием матриц и векторов для ковариатов/откликов.

2

Я написал GLM класс для Matlab, который дает точно такие же результаты:

Generalized Linear Models in Matlab (same results as in R)

Например, журнал-связь GLM с гамма-распределением по данным выборки дает это в R:

Call: 
glm(formula = MilesPerGallon ~ Horsepower + Acceleration + Cylinders, 
    family = Gamma(link = log), data = data) 

Deviance Residuals: 
     Min   1Q  Median   3Q  Max 
-0.116817 -0.075084 0.004179 0.060545 0.197108 

Coefficients: 
       Estimate Std. Error z value Pr(>|z|)  
(Intercept) 4.955205 0.509903 9.718 < 2e-16 *** 
Horsepower -0.017605 0.004352 -4.046 5.21e-05 *** 
Acceleration -0.026137 0.015540 -1.682 0.0926 . 
Cylinders  0.093277 0.054458 1.713 0.0867 . 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for Gamma family taken to be 0.0133) 

    Null deviance: 0.388832 on 10 degrees of freedom 
Residual deviance: 0.093288 on 7 degrees of freedom 
AIC: 64.05 

Number of Fisher Scoring iterations: 4 

Pearson MSE: 0.008783281 
Deviance MSE: 0.008480725 
McFadden R^2: 0.7600815 

Использование этой же оценки дает в Matlab следующее сообщение:

:: convergence in 4 iterations 
------------------------------------------------------------------------------------------ 
    dependent: MilesPerGallon 
    independent: (Intercept),Horsepower,Acceleration,Cylinders 
------------------------------------------------------------------------------------------ 
    log(E[MilesPerGallon]) = ß1×(Intercept) + ß2×Horsepower + ß3×Acceleration + ß4×Cylinders 
------------------------------------------------------------------------------------------ 
distribution: GAMMA 
     link: LOG 
     weight: - 
     offset: - 
============================================================ 
    Variable Estimate  S.E. z-value Pr(>|z|) 
============================================================ 
    (Intercept)  4.955  0.510 9.708  0.00000 
    Horsepower  -0.018  0.004 -4.042  0.00005 
    Acceleration  -0.026  0.016 -1.680  0.09290 
    Cylinders  0.093  0.055 1.711  0.08706 
============================================================ 
    Residual deviance:  0.0933  Deviance MSE: 0.0085 
    Null deviance:   0.3888  Pearson MSE: 0.0088 
    Dispersion:   0.0133  Deviance IC: 0.1026 
    McFadden R^2:   0.7601  Residual df: 7.0000 
============================================================ 

Так примерно такой же выход. Надеюсь, это поможет кому-то.