线性回归模型和交互项问题
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
我基本上想问你两个问题:
为什么 sexM:spO 的估计值为负数?
我必须提取 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
这会翻转交互项的符号。
我对 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
我基本上想问你两个问题:
为什么 sexM:spO 的估计值为负数?
我必须提取 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
这会翻转交互项的符号。