2016-07-18 1 views
3

En R, après mise en place d'un GLM, vous pouvez obtenir des informations de synthèse contenant les déviance résiduelle et déviance nulle qui vous indique la qualité de votre modèle est comparé au modèle avec juste le terme d'interception, pour l'exemple modèle:Comment obtenez-vous les équivalents de déviance nulle et résiduelle de R dans Matlab fitglm?

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

nous avons:

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

En Matlab, lorsque vous utilisez fitglm vous retournez un objet de GeneralizedLinearModel classe, qui possède une propriété Deviance contenant la déviance résiduelle. Cependant, je ne peux rien trouver directement lié à la déviance nulle. Quel est le moyen le plus simple de calculer cela?

Exemple Code Matlab:

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

produit:

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 

avec une déviance résiduelle model.Deviance:

>> model.Deviance 

ans = 

      71.8363992272217 

Répondre

0

Si l'appel à fitglm est utilisé avec une table et la régression spécifiée en utilisant la notation de Wilkinson, puis le résultat GeneralizedLinearModel L'objet model possède des propriétés qui permettent de récupérer la table utilisée pour ajuster le modèle, le nom de la réponse et la distribution.

Depuis la déviance nul de R est juste la déviance du modèle avec interception équipée, on peut le trouver en ajustant un null_deviance_model en utilisant les informations ci-dessus:

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

La déviance nul de R est donnée par null_deviance_model.Deviance . Je ne suis pas sûr si cela s'étend aux régressions en utilisant des matrices et des vecteurs pour les covariables/réponse.

2

j'ai écrit une classe GLM pour Matlab qui donne exactement les mêmes résultats:

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

Par exemple, un GLM log-lien avec la distribution gamma sur les données de l'échantillon donne ceci dans 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 

En utilisant le paquet, cette même estimation donne le résultat suivant dans 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 
============================================================ 

Donc, à peu près la même sortie. J'espère que cela aide quelqu'un.