如何计算我的线性回归与已知理论线是否存在统计显着差异?

机器算法验证 回归 假设检验 统计学意义
2022-03-26 17:16:03

我有一些数据沿着大致线性的线拟合:

在此处输入图像描述

当我对这些值进行线性回归时,我得到一个线性方程:

y=0.997x0.0136

在理想世界中,方程应该y=x

显然,我的线性值接近那个理想值,但并不完全如此。我的问题是,我怎样才能确定这个结果是否具有统计意义?

0.997 的值是否与1显着不同-0.01与 0有显着差异吗?或者它们在统计上是否相同,我可以得出结论具有一些合理的置信水平?y=x

我可以使用什么好的统计测试?

谢谢

4个回答

这种情况可以通过嵌套模型的标准 F 检验来处理。由于您想针对具有固定参数的空模型测试这两个参数,因此您的假设是:

H0:β=[01]HA:β[01].

F 检验涉及拟合两个模型并比较它们的残差平方和,即:

SSE0=i=1n(yixi)2SSEA=i=1n(yiβ^0β^1xi)2

检验统计量为:

FF(y,x)=n22SSE0SSEASSEA.

对应的 p 值为:

pp(y,x)=F(y,x)F-Dist(r|2,n2) dr.


R 中的实现:假设您的数据位于一个名为andDATA的变量的数据框中可以使用以下代码手动执行 F 检验。在我使用的模拟模拟数据中,您可以看到估计的系数接近原假设中的系数,并且检验的 p 值显示没有显着证据证明可以证伪原假设,即真正的回归函数是身份功能。yx

#Generate mock data (you can substitute your data if you prefer)
set.seed(12345);
n    <- 1000;
x    <- rnorm(n, mean = 0, sd = 5);
e    <- rnorm(n, mean = 0, sd = 2/sqrt(1+abs(x)));
y    <- x + e;
DATA <- data.frame(y = y, x = x);

#Fit initial regression model
MODEL <- lm(y ~ x, data = DATA);

#Calculate test statistic
SSE0   <- sum((DATA$y-DATA$x)^2);
SSEA   <- sum(MODEL$residuals^2);
F_STAT <- ((n-2)/2)*((SSE0 - SSEA)/SSEA);
P_VAL  <- pf(q = F_STAT, df1 = 2, df2 = n-2, lower.tail = FALSE);

#Plot the data and show test outcome
plot(DATA$x, DATA$y,
     main = 'All Residuals',
     sub  = paste0('(Test against identity function - F-Stat = ',
            sprintf("%.4f", F_STAT), ', p-value = ', sprintf("%.4f", P_VAL), ')'),
     xlab = 'Dataset #1 Normalized residuals',
     ylab = 'Dataset #2 Normalized residuals');
abline(lm(y ~ x, DATA), col = 'red', lty = 2, lwd = 2);

summary输出和plot数据如下所示:

summary(MODEL);

Call:
lm(formula = y ~ x, data = DATA)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.8276 -0.6742  0.0043  0.6703  5.1462 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.02784    0.03552  -0.784    0.433    
x            1.00507    0.00711 141.370   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.122 on 998 degrees of freedom
Multiple R-squared:  0.9524,    Adjusted R-squared:  0.9524 
F-statistic: 1.999e+04 on 1 and 998 DF,  p-value: < 2.2e-16

F_STAT;
[1] 0.5370824

P_VAL;
[1] 0.5846198

在此处输入图像描述

这是我从 Julian Faraway 的优秀著作“Linear Models With R (Second Edition)”中抄录的一个很酷的图形方法。它是截距和斜率的同时 95% 置信区间,绘制为椭圆。

为了说明,我创建了 500 个观察值,其中变量“x”具有 N(mean=10,sd=5) 分布,然后是变量“y”,其分布为 N(mean=x,sd=2)。这会产生略高于 0.9 的相关性,这可能不像您的数据那么紧密。

您可以检查椭圆以查看点 (intercept=0,slope=1) 是否落在该同时置信区间之内或之外。

library(tidyverse)
library(ellipse)
#> 
#> Attaching package: 'ellipse'
#> The following object is masked from 'package:graphics':
#> 
#>     pairs

set.seed(50)
dat <- data.frame(x=rnorm(500,10,5)) %>% mutate(y=rnorm(n(),x,2))

lmod1 <- lm(y~x,data=dat)
summary(lmod1)
#> 
#> Call:
#> lm(formula = y ~ x, data = dat)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -6.9652 -1.1796 -0.0576  1.2802  6.0212 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)  0.24171    0.20074   1.204    0.229    
#> x            0.97753    0.01802  54.246   <2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 2.057 on 498 degrees of freedom
#> Multiple R-squared:  0.8553, Adjusted R-squared:  0.855 
#> F-statistic:  2943 on 1 and 498 DF,  p-value: < 2.2e-16

cor(dat$y,dat$x)
#> [1] 0.9248032

plot(y~x,dat)
abline(0,1)


confint(lmod1)
#>                  2.5 %    97.5 %
#> (Intercept) -0.1526848 0.6361047
#> x            0.9421270 1.0129370

plot(ellipse(lmod1,c("(Intercept)","x")),type="l")
points(coef(lmod1)["(Intercept)"],coef(lmod1)["x"],pch=19)

abline(v=confint(lmod1)["(Intercept)",],lty=2)
abline(h=confint(lmod1)["x",],lty=2)

points(0,1,pch=1,size=3)
#> Warning in plot.xy(xy.coords(x, y), type = type, ...): "size" is not a
#> graphical parameter

abline(v=0,lty=10)
abline(h=0,lty=10)

reprex 包(v0.2.1)于 2019 年 1 月 21 日创建

您可以使用 n 个自举样本计算系数。这可能会导致正态分布的系数值(中心极限定理)。然后,您可以构建一个(例如 95%)置信区间,其中 t 值(n-1 自由度)围绕均值。如果您的 CI 不包括 1 (0),则它在统计上存在显着差异或更精确:您可以拒绝等斜率的原假设。

您可以执行简单的假设检验,即 t 检验。对于截距,您的零假设是(请注意,这是显着性检验),对于斜率,您在 H0 下具有该值。β0=0β1=1