Làm cách nào để tính toán xem hồi quy tuyến tính của tôi có sự khác biệt có ý nghĩa thống kê so với dòng lý thuyết đã biết không?


14

Tôi có một số dữ liệu phù hợp với một đường thẳng gần đúng:

nhập mô tả hình ảnh ở đây

Khi tôi thực hiện hồi quy tuyến tính của các giá trị này, tôi nhận được một phương trình tuyến tính:

y=0.997x0.0136

Trong một thế giới lý tưởng, phương trình nêny=x .

Rõ ràng, giá trị tuyến tính của tôi là gần với lý tưởng đó, nhưng không chính xác. Câu hỏi của tôi là, làm thế nào tôi có thể xác định liệu kết quả này có ý nghĩa thống kê?

Giá trị của 0,997 có khác biệt đáng kể so với 1 không? -0,01 có khác biệt đáng kể so với 0 không? Hoặc chúng giống nhau về mặt thống kê và tôi có thể kết luận rằngy= =x với mức độ tin cậy hợp lý?

Một bài kiểm tra thống kê tốt tôi có thể sử dụng là gì?

Cảm ơn


1
Bạn có thể tính toán xem có hay không có sự khác biệt có ý nghĩa thống kê, nhưng bạn nên lưu ý rằng điều này không có nghĩa là không có sự khác biệt. Bạn chỉ có thể chắc chắn về ý nghĩa khi bạn làm sai lệch giả thuyết null, nhưng khi bạn không làm sai lệch giả thuyết null thì đây có thể là (1) thực sự giả thuyết null là đúng (2) thử nghiệm của bạn không mạnh mẽ do số lượng thấp trong số các mẫu (3) thử nghiệm của bạn không mạnh mẽ do giả thuyết thay thế sai (3b) sai số có ý nghĩa thống kê do trình bày sai phần không xác định của mô hình.
Sextus Empiricus

Đối với tôi dữ liệu của bạn không giống như y = x + nhiễu trắng. Bạn có thể nói thêm về nó? (một thử nghiệm cho giả định rằng bạn có nhiễu như vậy có thể không 'thấy' một sự khác biệt đáng kể, cho dù mẫu có lớn đến đâu, ngay cả khi có sự khác biệt rất lớn giữa dữ liệu và dòng y = x, chỉ vì bạn chỉ so sánh với các dòng khác y = a + bx, có thể không phải là so sánh đúng và mạnh nhất)
Sextus Empiricus

Ngoài ra, mục tiêu của việc xác định tầm quan trọng là gì. Tôi thấy nhiều câu trả lời đề nghị sử dụng một số mức độ alpha 5% (khoảng tin cậy 95%). Tuy nhiên điều này rất tùy tiện. Rất khó để thấy ý nghĩa thống kê là một biến nhị phân (hiện tại hay không hiện diện). Điều này được thực hiện với các quy tắc như mức độ alpha tiêu chuẩn, nhưng nó là tùy ý và gần như vô nghĩa. Nếu bạn đưa ra một bối cảnh thì việc sử dụng một mức cắt nhất định để đưa ra quyết định (một biến nhị phân) dựa trên một mức ý nghĩa ( không phải là một biến nhị phân), thì một khái niệm như một ý nghĩa nhị phân có ý nghĩa hơn.
Sextus Empiricus

1
Bạn đang thực hiện loại "hồi quy tuyến tính" nào? Một cách thông thường sẽ coi bạn là thảo luận về hồi quy bình phương nhỏ nhất bình thường (với một thuật ngữ chặn), nhưng trong trường hợp đó bởi vì cả hai tập hợp dư sẽ có phương tiện bằng 0 (chính xác), việc chặn trong hồi quy giữa các phần dư cũng phải bằng 0 (chính xác ). Vì nó không phải, một cái gì đó khác đang diễn ra ở đây. Bạn có thể cung cấp một số nền tảng về những gì bạn đang làm và tại sao?
whuber

Điều này có vẻ tương tự như vấn đề trong việc đo xem hai hệ thống có cho cùng một kết quả hay không. Hãy thử nhìn vào cốt truyện nhạt nhẽo cho một số tài liệu.
mdewey

Câu trả lời:


17

Loại tình huống này có thể được xử lý bằng thử nghiệm F tiêu chuẩn cho các mô hình lồng nhau . Vì bạn muốn kiểm tra cả hai tham số theo mô hình null với các tham số cố định, nên các giả thuyết của bạn là:

H0:β= =[01]HMột:β[01].

Thử nghiệm F liên quan đến việc khớp cả hai mô hình và so sánh tổng bình phương còn lại của chúng, đó là:

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

Thống kê kiểm tra là:

FF(y,x)= =n-22SSE0-SSEMộtSSEMột.

Giá trị p tương ứng là:

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


Triển khai trong R: Giả sử dữ liệu của bạn nằm trong khung dữ liệu được gọi DATAvới các biến được gọi yx. Thử nghiệm F có thể được thực hiện thủ công với mã sau đây. Trong dữ liệu giả lập mà tôi đã sử dụng, bạn có thể thấy rằng các hệ số ước tính gần với các hệ số trong giả thuyết null và giá trị p của thử nghiệm cho thấy không có bằng chứng quan trọng nào làm sai lệch giả thuyết null rằng hàm hồi quy thực là chức năng nhận dạng.

#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);

Đầu summaryra và plotcho dữ liệu này trông như thế này:

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

nhập mô tả hình ảnh ở đây


x

1
Vâng, phát hiện tốt. Dữ liệu mô phỏng không sử dụng hồi quy tuyến tính homoskedastic tiêu chuẩn. Tôi đã sử dụng tính không đồng nhất trong mô phỏng để cố gắng mô phỏng gần giống mẫu dữ liệu trong cốt truyện được hiển thị bởi OP. (Và tôi nghĩ rằng tôi đã làm một công việc khá tệ hại!) Vì vậy, đây là trường hợp tôi lắp mô hình tuyến tính homoskedastic tiêu chuẩn vào dữ liệu mô phỏng không được tạo ra từ mô hình đó. Mặc dù vậy, điều đó vẫn hợp pháp - bạn có thể mô phỏng dữ liệu từ một mô hình và sau đó khớp nó với mô hình khác, để xem điều gì sẽ xảy ra.
Phục hồi Monica

1
sd = 2/sqrt(1+abs(x))yxy= =xxy= =xy= =x+e
Sextus Empiricus

1
Điều đó đúng, nhưng nó đưa bạn vào lãnh thổ của các mô hình lỗi-biến, điều này làm cho nó phức tạp hơn. Tôi nghĩ rằng OP chỉ muốn sử dụng hồi quy tuyến tính tiêu chuẩn trong trường hợp này.
Phục hồi Monica

Tôi đồng ý rằng đó là một sidenote, nhưng dù sao cũng là một điều quan trọng. Sự đơn giản của câu hỏi đánh đố tôi (ở những điểm khác nhau), và nó cũng làm tôi lo lắng vì nó có thể là một cách trình bày quá đơn giản. Tất nhiên, nó phụ thuộc vào những gì một người thực sự đang cố gắng đạt được ('tất cả các mô hình đều sai ....') nhưng cách trình bày đơn giản này có thể trở thành một tiêu chuẩn và các câu hỏi bổ sung phức tạp mà một người nên ghi nhớ sẽ bị lãng quên hoặc thậm chí một không bao giờ bắt đầu nghĩ về nó (việc đề cập đến 95% TCTD trong các câu trả lời khác là một ví dụ về một tiêu chuẩn mà mọi người mù quáng tuân theo).
Sextus Empiricus

5

Đây là một phương pháp đồ họa thú vị mà tôi đã đưa ra từ cuốn sách tuyệt vời "Mô hình tuyến tính với R (Ấn bản thứ hai)" của Julian Faraway. Đó là khoảng tin cậy 95% đồng thời cho phần chặn và độ dốc, được vẽ dưới dạng hình elip.

Để minh họa, tôi đã tạo ra 500 quan sát với một biến "x" có phân phối N (mean = 10, sd = 5) và sau đó một biến "y" có phân phối là N (mean = x, sd = 2). Điều đó mang lại một mối tương quan hơn 0,9 mà có thể không hoàn toàn chặt chẽ như dữ liệu của bạn.

Bạn có thể kiểm tra hình elip để xem điểm (chặn = 0, độ dốc = 1) có nằm trong hoặc ngoài khoảng tin cậy đồng thời đó không.

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)

Được tạo vào ngày 2019-01-21 bởi gói reprex (v0.2.1)


1

Bạn có thể tính toán các hệ số với n mẫu khởi động. Điều này có thể sẽ dẫn đến các giá trị hệ số phân phối bình thường (Định lý giới hạn trung tâm). Với điều đó, sau đó bạn có thể xây dựng khoảng tin cậy (ví dụ 95%) với các giá trị t (n-1 độ tự do) xung quanh giá trị trung bình. Nếu CI của bạn không bao gồm 1 (0), thì nó có ý nghĩa thống kê khác nhau hoặc chính xác hơn: Bạn có thể từ chối giả thuyết khống về độ dốc bằng nhau.


Như bạn đã xây dựng nó ở đây, nó chỉ kiểm tra hai giả thuyết riêng biệt, nhưng cái bạn cần là một bài kiểm tra chung.
kjetil b halvorsen

0

β0= =0β1= =1


1
Nhưng những gì cần thiết là một bài kiểm tra chung như trong các câu trả lời khác.
kjetil b halvorsen

@kjetilbhalvorsen Tôi đã nhận ra rằng tôi đã sai sáng nay khi đọc các câu trả lời khác. Tôi sẽ xóa nó.
RScrlli

0

Bạn nên điều chỉnh hồi quy tuyến tính và kiểm tra khoảng tin cậy 95% cho hai tham số. Nếu CI của độ dốc bao gồm 1 và CI của phần bù bao gồm 0 thì phép thử hai mặt là không đáng kể. ở mức (95%) ^ 2 - khi chúng tôi sử dụng hai bài kiểm tra riêng biệt, rủi ro typ-I tăng lên.

Sử dụng R:

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

hoặc bạn sử dụng

summary(fit)

và calc 2 khoảng sigma một mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.