如何计算线性回归与已知理论线之间是否具有统计学上的显着差异?


14

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

在此处输入图片说明

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

y=0.997x0.0136

在理想世界中,该等式为。y=x

显然,我的线性值接近理想值,但不完全相同。我的问题是,如何确定此结果是否具有统计意义?

0.997的值是否明显不同于 1?-0.01 与0 显着不同吗?还是它们在统计上是相同的,我可以得出具有一定合理置信度的结论?y=x

我可以使用什么好的统计检验?

谢谢


1
你可以计算是否存在或不是统计上显著差异,但你要注意,这并不能意味着是否不存在差异。您只能在虚假虚假假设时确定其含义,但是当您不虚假虚假假设时,则可以是(1)虚假假说正确(2)由于数字低,您的测试无能为力的样本(3)由于错误的替代假设(3b),由于错误地表示了模型的非确定性部分,因此对统计意义的错误衡量使测试无法发挥作用。
Sextus Empiricus

对我来说,您的数据看起来不像y = x +白噪声。您能详细介绍一下吗?(假设您得到这样的噪声,无论样本有多大,即使数据与y = x线之间存在巨大差异,也可能无法“看到”明显差异,仅与其他行y = a + bx进行比较,这可能不是正确且最有力的比较)
Sextus Empiricus

同样,确定重要性的目标是什么。我看到许多答案建议使用5%的alpha等级(95%置信区间)。但是,这是非常任意的。很难将统计意义视为二进制变量(存在或不存在)。这是通过标准Alpha级别等规则完成的,但是它是任意的,几乎没有意义。如果给定上下文,则使用某个截止级别以便根据重要性级别(而不是二进制变量)做出决定(二进制变量),那么诸如二进制重要性的概念就更有意义了。
Sextus Empiricus

1
您正在执行哪种“线性回归”?通常,您会认为您正在讨论普通的最小二乘回归(带有截距项),但是在那种情况下,因为两组残差均具有零均值(准确),所以残差之间的回归截距也应为零(正好是)。既然不是,那么这里正在发生其他事情。您能为您的工作提供背景知识吗?为什么?
ub

这看起来类似于查看两个系统是否给出相同结果的测量问题。尝试查看一些乏味的内容。
mdewey

Answers:


17

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

H0β=[01个]H一种β[01个]

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

小号小号Ë0=一世=1个ñÿ一世-X一世2小号小号Ë一种=一世=1个ñÿ一世-β^0-β^1个X一世2

测试统计为:

FFÿX=ñ-22小号小号Ë0-小号小号Ë一种小号小号Ë一种

相应的p值为:

ppÿX=FÿXF区[R|2ñ-2 d[R


在R中的实现:假设您的数据位于一个名为DATA且变量名为y和的数据帧中x。可以使用以下代码手动执行F测试。在我使用的模拟模拟数据中,您可以看到估计的系数接近于原假设中的系数,并且测试的p值没有显示任何重要证据来证伪原假设是真实的回归函数是原假设。身份功能。

#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

在此处输入图片说明


X

1
是的,发现得很好。模拟数据不使用标准同方线性回归。我在仿真中使用了异方差性来尝试大致模拟OP显示的绘图中的数据模式。(而且我想我做得非常好!)因此,在这种情况下,我正在将标准同方线性模型拟合到不是从该模型生成的模拟数据。但这仍然是合法的-可以模拟一个模型中的数据,然后将其拟合到另一个模型中,以查看结果如何。
恢复莫妮卡

1
sd = 2/sqrt(1+abs(x))ÿXÿ=XXÿ=Xÿ=X+Ë
Sextus Empiricus

1
没错,但这会让您陷入变量误差模型的领域,这使其变得更加复杂。我认为在这种情况下,OP只想使用标准线性回归。
恢复莫妮卡

我同意这是一个旁注,但仍然很重要。问题的简单性使我感到困惑(在不同的地方),也令我感到担忧,因为它可能表示得太简单了。当然,这取决于一个人实际想要实现的目标(“所有模型都是错误的...。”),但是这种简单的表示方式可能会成为一种标准,一个人应该记住的复杂的其他问题将被遗忘,甚至被忽略。永远不要去想它(在其他答案中提到95%CI就是人们盲目遵循的这种标准的一个例子)。
Sextus Empiricus

5

这是一个很酷的图形方法,我从朱利安·法拉威(Julian Faraway)的出色著作《带有R的线性模型(第二版)》中总结出来。截距和斜率同时具有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-01-21


1

您可以使用n个自举样本来计算系数。这很可能会导致正态分布的系数值(中心极限定理)。这样,您就可以构造一个(例如95%)置信区间,其均值周围带有t值(n-1个自由度)。如果您的配置项不包括1(0),那么它在统计上是显着不同的,或更准确地说是:您可以拒绝等斜率的零假设。


正如您在此处阐述的那样,它仅分别检验两个假设,但您需要的是联合检验。
kjetil b halvorsen

0

β0=0β1个=1个


1
但是,与其他答案一样,需要进行联合测试。
kjetil b halvorsen

@kjetilbhalvorsen我意识到今天早上阅读其他答案时我错了。我将其删除。
RScrlli

0

您应该拟合线性回归并检查两个参数的95%置信区间。如果斜率的CI包括1,而偏移量的CI包括0,则两面测试无关紧要。(95%)^ 2水平上-由于我们使用两个单独的测试,因此I型风险增加。

使用R:

fit = lm(Y ~ X)
confint(fit)

或者你用

summary(fit)

并自己计算2个西格玛间隔。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.