如何在R中进行lm()输出测试

时间:2019-03-27 04:24:59

标签: r

我被告知并看到了一些示例,其中线性模型和t检验基本上是相同的检验,只是t检验是带有伪编码预测变量的专门线性模型。有没有一种方法可以获取lm的输出,以输出与r中的常规t.test函数相同的t值,p值,置信区间和标准误差,其中{{1 }}参数是var.equal吗?

例如,现在lm和t.test的输出现在不同

FALSE

我要使data("mtcars") #these outputs below give me different values summary(lm(mpg ~ am, mtcars)) t.test(mpg ~ am, mtcars) 与t.test函数具有相同的值,这是一个Welch t检验。我该怎么办?

2 个答案:

答案 0 :(得分:2)

首先,CrossValidated How are regression, the t-test, and the ANOVA all versions of the general linear model? 上有一篇很棒的文章,提供了许多关于 t 检验,线性回归和ANOVA之间关系的背景信息。

实质上, t 检验中的p值与线性模型中的坡度参数的p值相对应。

您需要比较

t.test(mpg ~ am, mtcars, alternative = "two.sided", var.equal = T)
#
#   Two Sample t-test
#
#data:  mpg by am
#t = -4.1061, df = 30, p-value = 0.000285
#alternative hypothesis: true difference in means is not equal to 0
#95 percent confidence interval:
# -10.84837  -3.64151
#sample estimates:
#mean in group 0 mean in group 1
#       17.14737        24.39231

fit <- lm(mpg ~ as.factor(am), mtcars)
summary(fit)
#
#Call:
#lm(formula = mpg ~ as.factor(am), data = mtcars)
#
#Residuals:
#    Min      1Q  Median      3Q     Max
#-9.3923 -3.0923 -0.2974  3.2439  9.5077
#
#Coefficients:
#               Estimate Std. Error t value Pr(>|t|)
#(Intercept)      17.147      1.125  15.247 1.13e-15 ***
#as.factor(am)1    7.245      1.764   4.106 0.000285 ***
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#Residual standard error: 4.902 on 30 degrees of freedom
#Multiple R-squared:  0.3598,   Adjusted R-squared:  0.3385
#F-statistic: 16.86 on 1 and 30 DF,  p-value: 0.000285

请注意,p值相同。

两条评论:

  1. as.factor(am)am变成类别变量
  2. 要匹配线性模型的假设(其中误差项epsilon ~ N(0, sigma^2)),我们需要将t.testvar.equal = T一起使用,假设两者的测量值的方差相同组。
  3. t 值的符号差异来自“已分类” am参考级别的不同定义。

要在线性模型中获得相同的组均值,我们可以删除截距

lm(mpg ~ as.factor(am) - 1, mtcars)
#
#Call:
#lm(formula = mpg ~ as.factor(am) - 1, data = mtcars)
#
#Coefficients:
#as.factor(am)0  as.factor(am)1
#         17.15           24.39

答案 1 :(得分:0)

线性回归的假设是残差正态分布,平均值为0,方差恒定。因此,仅当您假设方差相等时,您的t.test和回归摘要才会具有一致的结果。