线性回归模型和交互项问题

Linear regression model and interaction's terms problem

我对 R 和统计完全陌生。

使用 crabs.csv 数据集,我使用以下代码制作了线性回归模型:

facdF = dF %>% mutate(sex = factor(sex, labels = c("F", "M")))
fac2dF = dF %>% mutate(sp = factor(sp, labels = c("O", "B")))

dfS <- summary(with(fac2dF, lm(as.numeric(gsub(",",".",CL)) ~ sex*sp)))

dF 是原始数据帧。当我 运行 代码时,我得到模型摘要的输出:

Call:
lm(formula = as.numeric(gsub(",", ".", CL)) ~ sex * sp)

Residuals:
    Min      1Q  Median      3Q     Max 
-16.430  -4.423  -0.065   5.378  14.570 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   27.965      1.100  25.421  < 2e-16 ***
sexM           4.565      1.587   2.876  0.00462 ** 
spO            6.507      1.598   4.071 7.61e-05 ***
sexM:spO      -5.963      2.266  -2.631  0.00942 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 6.957 on 147 degrees of freedom
Multiple R-squared:  0.115, Adjusted R-squared:  0.09692 
F-statistic: 6.366 on 3 and 147 DF,  p-value: 0.0004364

我基本上想问你两个问题:

  1. 为什么 sexM:spO 的估计值为负数?

  2. 我必须提取 sexF:spO 的预测,但相互作用项不存在。我该怎么做?

编辑:根据要求,文件 crabs.csv 位于 github

我通过选择因素解决了这个问题:

facdF = dF %>% mutate(sex = factor(sex, labels = c("F")))
fac2dF = dF %>% mutate(sp = factor(sp, labels = c("O")))

而不是:

facdF = dF %>% mutate(sex = factor(sex, labels = c("M", "F")))
fac2dF = dF %>% mutate(sp = factor(sp, labels = c("B", "O")))

sexM:spO 为负的原因是因为那是数据中效果的方向。也就是说,如果男性是 O 种,相对于 B 种,男性的 CL 低 5。

library("MASS")
data(crabs)

fit <- lm(CL ~ sex * sp, data = crabs)
summary(fit)
#> 
#> Call:
#> lm(formula = CL ~ sex * sp, data = crabs)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -16.988  -4.636   0.184   5.130  15.086 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)  28.1020     0.9499  29.584  < 2e-16 ***
#> sexM          3.9120     1.3434   2.912  0.00401 ** 
#> spO           6.5160     1.3434   4.851  2.5e-06 ***
#> sexM:spO     -4.8420     1.8998  -2.549  0.01158 *  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 6.717 on 196 degrees of freedom
#> Multiple R-squared:  0.1232, Adjusted R-squared:  0.1098 
#> F-statistic: 9.181 on 3 and 196 DF,  p-value: 1.031e-05

sexM 出现的原因是因为分类变量在 R 模型中被视为因素,并且在 R 中因素默认具有字母级别。要获得交互项 sexF:spO,您必须确保传入的变量将 M 作为第一级,将 F 作为第二级,例如:

crabs$sex <- factor(crabs$sex, levels = c("M", "F"))
fit <- lm(CL ~ sex * sp, data = crabs)
summary(fit)
#> 
#> Call:
#> lm(formula = CL ~ sex * sp, data = crabs)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -16.988  -4.636   0.184   5.130  15.086 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)  32.0140     0.9499  33.702  < 2e-16 ***
#> sexF         -3.9120     1.3434  -2.912  0.00401 ** 
#> spO           1.6740     1.3434   1.246  0.21420    
#> sexF:spO      4.8420     1.8998   2.549  0.01158 *  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 6.717 on 196 degrees of freedom
#> Multiple R-squared:  0.1232, Adjusted R-squared:  0.1098 
#> F-statistic: 9.181 on 3 and 196 DF,  p-value: 1.031e-05

这会翻转交互项的符号。