Копировать процесс SAS GLM в R - PullRequest
0 голосов
/ 17 мая 2018

Я хочу вычислить линейную модель, чтобы получить средства для некоторой переменной Y, скорректированной на категориальную переменную Q, и некоторых числовых переменных X.

Один сказал мне, что я могу легко получитьих с SAS, и я использовал этот кусок кода:

proc glm data=TABLE_R;
    class Q(ref="Q1");
    model Y = Q X2 X3 X4 / solution;
    lsmeans Q/ stderr pdiff cov out=adjmeans;
run;

Но, будучи более дружелюбным с R, я хотел повторить эту процедуру, и после некоторых исследований я закончил с этим кодом:

m = glm(Y ~ Q + X2 + X3 + X4, data=db) #using lm() didn't change anything
emmeans::emmeans(m, "Q") 

Проблема в том, что, очень близко, модельные коэффициенты различны.Вот пример с intercept и 2 уровнями Q:

#in R
  (Intercept)                  Q2                  Q3         
-0.1790444126        0.0051160461       -0.0013756817
#in SAS
  (Intercept)                  Q2                  Q3         
-0.1767853086        0.0016709301       -0.0031477746

На самом деле, в SAS у меня есть сообщение о том, что коэффициенты нуждаются в дополнительных вычислениях (чего, к сожалению, я не понимаю,у R glm() этого нет?):

Примечание. Матрица X'X была признана особой, и для решения нормальных уравнений использовалась обобщенная обратная величина.Термины, оценки которых сопровождаются буквой «B», не являются однозначно оцениваемыми.

Какой вариант я должен добавить здесь или там, чтобы найти одинаковые результаты как с SAS, так и с R?

Если я не могу, как я могу выбрать, какой метод лучше всего подходит?

Полезные сообщения: Proc GLM (SAS) с использованием R, Матрица X'X признана единственной

РЕДАКТИРОВАТЬ: Это очень странно, но эффективность в SAS и R различна:

#SAS
Observations read: 81733
Observations used: 9000
#R
16357 Residual
(88017 observations deleted due to missingness)

1 Ответ

0 голосов
/ 17 мая 2018

Вы получите те же коэффициенты, если сначала наберете

options(contrasts=c(“contr.SAS”,”contr.poly”))

до подгонки модели.Это заставит R использовать ту же параметризацию, что и SAS.

Однако даже без этого изменения установленные значения из R будут идентичны значениям из SAS, а EMM из R будут соответствовать значениям из SAS.Это потому, что мы на самом деле не меняем модель, мы меняем только то, как она параметризована.

...