Как мне запустить линейную модель, которая выводит эффект обоих полов? - PullRequest
0 голосов
/ 17 апреля 2020

Я использую линейную модель для своих данных, чтобы увидеть, влияют ли пол (фактор с 2 уровнями) и возраст (цифра c) на переменную, которая меняется со временем и называется «HBDiff» (цифра c). ).

Я использую этот код:

Model1 <- lm(HBDiff ~ SexGLM + StartingAgeGLM, data = GLMHBFixed) 
summary(Model1)

Когда я запускаю линейную модель, я получаю этот вывод:

                        Residuals:
                        Min      1Q  Median      3Q     Max 
                        -3.0310 -0.9807  0.1384  0.9186  3.6887 

                        Coefficients:
                                       Estimate Std. Error t value    Pr(>|t|)    
                        (Intercept)     1.28003    0.23423   5.465 0.000000445 ***
                        SexGLMmale     -0.61909    0.27849  -2.223      0.0288 *  
                        StartingAgeGLM -0.02483    0.01015  -2.447      0.0165 *  
                        ---
                        Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

                        Residual standard error: 1.3 on 86 degrees of freedom
                          (144 observations deleted due to missingness)
                        Multiple R-squared:  0.1243,    Adjusted R-squared:  0.1039 
                        F-statistic: 6.103 on 2 and 86 DF,  p-value: 0.003322

Как вы можете видеть на выходе это только показывает эффект того, чтобы быть мужчиной?

Правильно ли я читаю это, и если нет, то как мне отредактировать мой код для учета обоих полов?

1 Ответ

1 голос
/ 17 апреля 2020

Показатели (иначе говоря, «манекены») в линейных моделях интерпретируются как контраст . Когда у вас есть такой показатель, как мужчина = 1 / женщина = 0, индикатор показывает разницу между мужчинами и женщинами. Общий эффект самок захвачен перехватом. Общий эффект для мужчин - это перехват + индикатор.

В вашем случае эффект для женщин составляет 1,28, а для мужчин 1,28 - 0,62 = 0,66.

В Википедии есть поучительная статья (с иллюстрациями).


Редактировать: Я добавил минимальный R пример для иллюстрация.

Создайте некоторые данные с перехватом 0 и с наклоном 1 (в среднем):

# DF for person 1
df1 = data.frame(c(0.9,1.1,1.9,2.1,2.9,3.1),c(1,1,2,2,3,3),c(0,0,0,0,0,0))
colnames(df1)<-c("y","x","i")
summary(lm(y~x,data=df1))

В результате мы получим результат для лица 1:

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -7.252e-16  1.323e-01    0.00        1    
x            1.000e+00  6.124e-02   16.33 8.23e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Теперь сгенерируйте дополнительные данные для человека 2 и объедините оба данных в один DF. У человека 2 то же x, что и у человека 1, но все y для человека 2 +1 по сравнению с человеком 1. Таким образом, функция человека 2 имеет другой перехват:

# DF for person 2
df2 = df1
# All y + 1
df2$y = df1$y + 1 
# He/she is indicated by i = 1
df2$i = 1 

# Combine both DFs
df=rbind(df1,df2)
df

Теперь мы запустить регрессию и выделить человека 2 (против человека 1), добавив переменную i (индикатор / манекен):

# Regression
mymod = lm(y~x+i,data=df)
summary(mymod)

Вот что мы получаем:

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -7.692e-16  9.428e-02     0.0        1    
x            1.000e+00  4.082e-02    24.5 1.51e-09 ***
i            1.000e+00  6.667e-02    15.0 1.13e-07 ***

Показатель i теперь представляет собой разницу в перехвате человека 2 (по сравнению с человеком 1). Мы можем предсказать модель и график для иллюстрации:

# Prediction and plot
pred = predict(mymod, newdata=df)
plot(df$x[df$i==0], pred[df$i==0],type="l",ylim=c(0,5), xlim=c(1,3), xlab = "x", ylab="y")
lines(df$x[df$i==1], pred[df$i==1], type="l", col="red")

Человек 2 (красная линия) просто получает отдельную "линию" в нашей модели, которая равна +1 по сравнению с человеком 1 (черная линия). Таким образом, в этой модели мы допускаем отдельный перехват для лиц 1 и 2. Однако оба имеют одинаковый наклон (по определению модели). Мы также можем учесть отдельные уклоны, введя термины взаимодействия.

enter image description here

R может обрабатывать факторы (или индикаторы / манекены) без нумерации c кодировка (необходимо указать 1 = TRUE или 0 = FALSE, если число c). Вот как факторы рассматриваются в R:

# First see if "i" is numeric in the moment -> TRUE
is.numeric(df$i)

# We can treat "i" as (non-numeric) factor
df$i = as.factor(df$i)
summary(lm(y~x+i,data=df))

# We can also chenge the base level
summary(lm(y~x+relevel(i,ref="0"),data=df)) # just as before
summary(lm(y~x+relevel(i,ref="1"),data=df)) # just reversed since 1 is now the reference category
# note that intercept AND indicator change (not the marginal effect of x on y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...