Я хочу вычислить линейную модель, чтобы получить средства для некоторой переменной 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)