Разница между glm outut в R и proc genmod output в SAS для интерактивной модели, но не для аддитивной модели - PullRequest
0 голосов
/ 09 октября 2018

Я конвертирую модели SAS PROC GENMOD в R, используя glm.Когда я сравниваю результаты для аддитивных моделей, оценки совпадают для обработок.Однако оценки не совпадают, когда я запускаю интерактивные модели.Оценка взаимодействия одинакова, но оценки основного эффекта различны для R и SAS.

Код SAS для аддитивной модели:

proc genmod descending;
    class Grazed CP;
model Parasitized = Grazed CP / dist=bin link=logit type1;      
run;

Код R для аддитивной модели:

mod3 <- glm(Parasitized ~ Grazed + CP, family = binomial(link = logit), data = dick)

Выход SAS для аддитивной модели::

           Analysis Of Maximum Likelihood Parameter Estimates
Parameter       DF  Estimate    SE       Wald Chi-Square    Pr > ChiSq
Intercept       1    -0.2976    0.2006      2.20             0.1379
Grazed  N   1         0.0696    0.2374      0.09             0.7695
Grazed  Y   0         0.0000    0.0000      .                .
CP  2       1         0.2829    0.2355      1.44             0.2298
CP  25      0         0.0000    0.0000      .                .
Scale       0         1.0000    0.0000          

Суммарный вывод R для аддитивной модели:

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)  0.05486    0.19377   0.283    0.777
GrazedY     -0.06956    0.23743  -0.293    0.770
CP25        -0.28289    0.23555  -1.201    0.230

Теперь я знаю, что знак отличается между оценками, но я знаю, почему это уже происходит, и меня это не касаетсяс ним.

Код SAS для интерактивной модели:

proc genmod descending;
    class Grazed CP;
model Parasitized = Grazed CP Grazed*CP / dist=bin link=logit type1;        
run;

Код R для интерактивной модели:

mod4 <- glm(Parasitized ~ Grazed * CP, family = binomial(link = logit), data = dick)

Суммарный вывод дляИнтерактивная модель SAS:

    Analysis Of Maximum Likelihood Parameter Estimates 
Parameter       DF   Estimate  SE      Wald Chi-Square  Pr > ChiSq 
Intercept       1    -0.3321   0.2281      2.12         0.1454 
Grazed N        1     0.1337   0.3105      0.19         0.6668 
Grazed Y        0     0.0000   0.0000      .            . 
CP 2            1     0.3766   0.3755      1.01         0.3159 
CP 25           0     0.0000   0.0000      .            . 
Grazed*CP N 2   1    -0.1546   0.4821      0.10         0.7485 
Grazed*CP N 25  0     0.0000   0.0000      .            . 
Grazed*CP Y 2   0     0.0000   0.0000      .            . 
Grazed*CP Y 25  0     0.0000   0.0000      .            . 
Scale           0     1.0000 0.0000    

Суммарный вывод для интерактивной модели R:

Coefficients:
             Estimate Std. Error z value Pr(>|z|)
(Intercept)   0.02353    0.21695   0.108    0.914
GrazedY       0.02092    0.36878   0.057    0.955
CP25         -0.22198    0.30242  -0.734    0.463
GrazedY:CP25 -0.15460    0.48211  -0.321    0.748

Я не могу понять, как исправить эту ситуацию.Единственное, о чем я могу думать, это то, что SAS и R по-разному оценивают модели, но я не уверен, как изменить код, чтобы выходные данные соответствовали.

1 Ответ

0 голосов
/ 09 октября 2018

Если вы хотите получить те же оценки, что и SAS, вы можете указать R, чтобы они соответствовали контрастам таким же образом.

options(contrasts = c(unordered = "contr.SAS", ordered = "contr.poly"))

Обратите внимание, что модели, которые вы подходите, одинаковы - они просто параметризованы вразными способами.

Я бы предоставил больше информации о том, как модели функционально одинаковы, но SO больше подходит для аспекта программирования, и вам будет лучше узнать, как параметризовать линейные модели, если вы хотите узнать подробности оособенности того, как и почему SAS и R. дают явно разные результаты.

> lm.R <- lm(mpg ~ cyl*am, data = mtcars)
> getOption("contrasts")
        unordered           ordered 
"contr.treatment"      "contr.poly" 
> options(contrasts = c(unordered = "contr.SAS", ordered = "contr.poly"))
> lm.SAS <- lm(mpg ~ cyl*am, data = mtcars)
> lm.R

Call:
lm(formula = mpg ~ cyl * am, data = mtcars)

Coefficients:
(Intercept)         cyl6         cyl8          am1     cyl6:am1     cyl8:am1  
     22.900       -3.775       -7.850        5.175       -3.733       -4.825  

> lm.SAS

Call:
lm(formula = mpg ~ cyl * am, data = mtcars)

Coefficients:
(Intercept)         cyl4         cyl6          am0     cyl4:am0     cyl6:am0  
     15.400       12.675        5.167       -0.350       -4.825       -1.092  

Таким образом, мы можем видеть, что два способа подбора предоставляют «разные» параметры, но если мы попросим его о прогнозах, они в конечном итоге будут идентичны.

> predict(lm.R)
          Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive 
           20.56667            20.56667            28.07500            19.12500 
  Hornet Sportabout             Valiant          Duster 360           Merc 240D 
           15.05000            19.12500            15.05000            22.90000 
           Merc 230            Merc 280           Merc 280C          Merc 450SE 
           22.90000            19.12500            19.12500            15.05000 
         Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental 
           15.05000            15.05000            15.05000            15.05000 
  Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla 
           15.05000            28.07500            28.07500            28.07500 
      Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28 
           22.90000            15.05000            15.05000            15.05000 
   Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa 
           15.05000            28.07500            28.07500            28.07500 
     Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E 
           15.40000            20.56667            15.40000            28.07500 
> predict(lm.SAS)
          Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive 
           20.56667            20.56667            28.07500            19.12500 
  Hornet Sportabout             Valiant          Duster 360           Merc 240D 
           15.05000            19.12500            15.05000            22.90000 
           Merc 230            Merc 280           Merc 280C          Merc 450SE 
           22.90000            19.12500            19.12500            15.05000 
         Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental 
           15.05000            15.05000            15.05000            15.05000 
  Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla 
           15.05000            28.07500            28.07500            28.07500 
      Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28 
           22.90000            15.05000            15.05000            15.05000 
   Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa 
           15.05000            28.07500            28.07500            28.07500 
     Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E 
           15.40000            20.56667            15.40000            28.07500 

И да, это была настоящая линейная модель, но теория и рассуждения верны и для glms.

...