我有一些数据大致沿着直线拟合:
当我对这些值进行线性回归时,我得到一个线性方程:
在理想世界中,该等式应为。
显然,我的线性值接近理想值,但不完全相同。我的问题是,如何确定此结果是否具有统计意义?
0.997的值是否明显不同于 1?-0.01 与0 显着不同吗?还是它们在统计上是相同的,我可以得出具有一定合理置信度的结论?
我可以使用什么好的统计检验?
谢谢
我有一些数据大致沿着直线拟合:
当我对这些值进行线性回归时,我得到一个线性方程:
在理想世界中,该等式应为。
显然,我的线性值接近理想值,但不完全相同。我的问题是,如何确定此结果是否具有统计意义?
0.997的值是否明显不同于 1?-0.01 与0 显着不同吗?还是它们在统计上是相同的,我可以得出具有一定合理置信度的结论?
我可以使用什么好的统计检验?
谢谢
Answers:
可以通过嵌套模型的标准F检验处理这种情况。由于您要针对具有固定参数的空模型测试两个参数,因此您的假设是:
F检验涉及两个模型的拟合并比较其残差平方和,即:
测试统计为:
相应的p值为:
在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
sd = 2/sqrt(1+abs(x))
这是一个很酷的图形方法,我从朱利安·法拉威(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
您可以使用n个自举样本来计算系数。这很可能会导致正态分布的系数值(中心极限定理)。这样,您就可以构造一个(例如95%)置信区间,其均值周围带有t值(n-1个自由度)。如果您的配置项不包括1(0),那么它在统计上是显着不同的,或更准确地说是:您可以拒绝等斜率的零假设。