So sánh ý nghĩa thống kê của sự khác biệt giữa hai hồi quy đa thức trong R


10

Vì vậy, trước hết tôi đã thực hiện một số nghiên cứu trên diễn đàn này và tôi biết những câu hỏi cực kỳ giống nhau đã được hỏi nhưng chúng thường không được trả lời đúng hoặc đôi khi câu trả lời đơn giản là không đủ chi tiết để tôi hiểu. Vì vậy, lần này câu hỏi của tôi là: Tôi có hai bộ dữ liệu, mỗi bộ, tôi thực hiện một hồi quy đa thức như vậy:

Ratio<-(mydata2[,c(2)])
Time_in_days<-(mydata2[,c(1)])
fit3IRC <- lm( Ratio~(poly(Time_in_days,2)) )

Các biểu đồ hồi quy đa thức là:

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

Các hệ số là:

> as.vector(coef(fit3CN))
[1] -0.9751726 -4.0876782  0.6860041
> as.vector(coef(fit3IRC))
[1] -1.1446297 -5.4449486  0.5883757 

Và bây giờ tôi muốn biết, nếu có một cách sử dụng hàm R để làm một bài kiểm tra sẽ cho tôi biết liệu có một ý nghĩa thống kê nào trong sự khác biệt giữa hồi quy hai đa thức hay không khi biết rằng khoảng thời gian liên quan là [ 1.100].

Từ những gì tôi hiểu, tôi không thể áp dụng trực tiếp thử nghiệm anova vì các giá trị đến từ hai bộ dữ liệu khác nhau cũng như AIC, được sử dụng để so sánh mô hình / dữ liệu thực.

Tôi đã cố làm theo hướng dẫn do @Roland đưa ra trong câu hỏi liên quan nhưng có lẽ tôi đã hiểu nhầm điều gì đó khi nhìn vào kết quả của mình:

Đây là những gì tôi đã làm:

Tôi kết hợp cả hai tập dữ liệu của tôi thành một.

flà yếu tố biến mà @Roland nói đến. Tôi đặt 1s cho tập đầu tiên và 0 cho tập khác.

y<-(mydata2[,c(2)])
x<-(mydata2[,c(1)])
f<-(mydata2[,c(3)])

plot(x,y, xlim=c(1,nrow(mydata2)),type='p')

fit3ANOVA <- lm( y~(poly(x,2)) )

fit3ANOVACN <- lm( y~f*(poly(x,2)) )

Bây giờ dữ liệu của tôi trông như thế này:

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

Màu đỏ fit3ANOVAvẫn còn hoạt động nhưng tôi gặp vấn đề với màu xanh fit3ANOVACNmô hình có kết quả kỳ lạ. Tôi không biết mô hình phù hợp có đúng không, tôi không hiểu chính xác ý nghĩa của @Roland.

Xem xét giải pháp @DeltaIV Tôi cho rằng trong trường hợp đó: nhập mô tả hình ảnh ở đây Các mô hình khác nhau đáng kể mặc dù chúng trùng nhau. Tôi có đúng không?


Dường như với tôi rằng người dùng @ Roland bình luận cho câu hỏi bạn đang liên kết đến, trả lời câu hỏi của bạn một cách hoàn hảo. Chính xác thì bạn không hiểu gì?
DeltaIV

Vâng, một vài điều, tôi không chắc chắn hay không đây là một câu trả lời thích hợp vì nó nằm trong phần bình luận, nhưng nếu nó hoạt động thì tôi chỉ cần chắc chắn rằng tôi đã hiểu. Về cơ bản, tôi nên tạo một tập dữ liệu mới trong đó tôi tạo một cột có số 1 và 0 tùy thuộc vào bộ dữ liệu ban đầu chúng đến từ đâu? Sau đó, tôi tạo hai mô hình một với mọi dữ liệu còn lại chỉ có một trong các bộ dữ liệu được tính đến. Sau đó, tôi áp dụng thử nghiệm anova. Là nó ? Ngoài ra tôi chưa bao giờ sử dụng thử nghiệm anova, tôi thấy họ đã nói về giá trị p thích hợp, điều đó sẽ chính xác là gì?
PaoloH

1
Trong trường hợp của bạn, hai hồi quy là trên cùng một khoảng. Đây là trường hợp tốt nhất, để giải thích các dải tin cậy cho hồi quy tuyến tính. Trong trường hợp này, hai hồi quy không khác nhau về mặt thống kê nếu chúng hoàn toàn nằm trong dải tin cậy của nhau trong toàn bộ khoảng thời gian ( trong trường hợp của bạn) - không phải nếu chúng chỉ chồng chéo trong một khoảng nhỏ. [0,100]
DeltaIV

Câu trả lời:


15
#Create some example data
mydata1 <- subset(iris, Species == "setosa", select = c(Sepal.Length, Sepal.Width))
mydata2 <- subset(iris, Species == "virginica", select = c(Sepal.Length, Sepal.Width))

#add a grouping variable
mydata1$g <- "a"
mydata2$g <- "b"

#combine the datasets
mydata <- rbind(mydata1, mydata2)

#model without grouping variable
fit0 <- lm(Sepal.Width ~ poly(Sepal.Length, 2), data = mydata)

#model with grouping variable
fit1 <- lm(Sepal.Width ~ poly(Sepal.Length, 2) * g, data = mydata)

#compare models 
anova(fit0, fit1)
#Analysis of Variance Table
#
#Model 1: Sepal.Width ~ poly(Sepal.Length, 2)
#Model 2: Sepal.Width ~ poly(Sepal.Length, 2) * g
#  Res.Df     RSS Df Sum of Sq      F    Pr(>F)    
#1     97 16.4700                                  
#2     94  7.1143  3    9.3557 41.205 < 2.2e-16 ***
#  ---
#  Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Như bạn thấy, fit1tốt hơn đáng kể so với fit0, tức là ảnh hưởng của biến nhóm là rất đáng kể. Do biến nhóm đại diện cho các bộ dữ liệu tương ứng, nên đa thức phù hợp với hai bộ dữ liệu có thể được coi là khác nhau đáng kể.


Tôi xin lỗi điều này phải rõ ràng nhưng tôi không quen với kết quả kiểm tra Anova, điều gì đang nói với chúng tôi rằng fit1 tốt hơn fit0? Có phải là Pr (> F) cực kỳ thấp?
PaoloH

1
Giá trị p cho bạn biết nếu các mô hình khác nhau đáng kể (giá trị p thấp hơn có nghĩa là "khác biệt hơn" có tính đến biến thể, thông thường p <0,05 được coi là đáng kể). RSS nhỏ hơn cho thấy mô hình phù hợp tốt hơn.
Roland

@PaoloH Btw., Bạn nên tránh các tỷ lệ dưới dạng các biến phụ thuộc. Giả định của các mô hình bình phương nhỏ nhất thông thường không có biến phụ thuộc như vậy.
Roland

8

Câu trả lời của @Ronald là tốt nhất và nó có thể áp dụng rộng rãi cho nhiều vấn đề tương tự (ví dụ: có sự khác biệt đáng kể về mặt thống kê giữa nam và nữ trong mối quan hệ giữa cân nặng và tuổi tác không?). Tuy nhiên, tôi sẽ thêm một giải pháp khác, mặc dù không phải là định lượng (nó không cung cấp giá trị p ), mang lại một màn hình đồ họa đẹp về sự khác biệt.

EDIT : theo câu hỏi này , có vẻ như predict.lm, hàm được sử dụng ggplot2để tính các khoảng tin cậy, không tính các dải tin cậy đồng thời xung quanh đường hồi quy, mà chỉ là các dải tin cậy theo chiều. Các dải cuối cùng này không phải là những dải phù hợp để đánh giá xem hai mô hình tuyến tính được trang bị có khác nhau về mặt thống kê hay nói theo một cách khác, liệu chúng có thể tương thích với cùng một mô hình thật hay không. Vì vậy, họ không phải là đường cong phù hợp để trả lời câu hỏi của bạn. Vì rõ ràng không có R dựng sẵn để có được các dải tin cậy đồng thời (lạ!), Tôi đã viết chức năng của riêng mình. Đây là:

simultaneous_CBs <- function(linear_model, newdata, level = 0.95){
    # Working-Hotelling 1 – α confidence bands for the model linear_model
    # at points newdata with α = 1 - level

    # summary of regression model
    lm_summary <- summary(linear_model)
    # degrees of freedom 
    p <- lm_summary$df[1]
    # residual degrees of freedom
    nmp <-lm_summary$df[2]
    # F-distribution
    Fvalue <- qf(level,p,nmp)
    # multiplier
    W <- sqrt(p*Fvalue)
    # confidence intervals for the mean response at the new points
    CI <- predict(linear_model, newdata, se.fit = TRUE, interval = "confidence", 
                  level = level)
    # mean value at new points
    Y_h <- CI$fit[,1]
    # Working-Hotelling 1 – α confidence bands
    LB <- Y_h - W*CI$se.fit
    UB <- Y_h + W*CI$se.fit
    sim_CB <- data.frame(LowerBound = LB, Mean = Y_h, UpperBound = UB)
}

library(dplyr)
# sample datasets
setosa <- iris %>% filter(Species == "setosa") %>% select(Sepal.Length, Sepal.Width, Species)
virginica <- iris %>% filter(Species == "virginica") %>% select(Sepal.Length, Sepal.Width, Species)

# compute simultaneous confidence bands
# 1. compute linear models
Model <- as.formula(Sepal.Width ~ poly(Sepal.Length,2))
fit1  <- lm(Model, data = setosa)
fit2  <- lm(Model, data = virginica)
# 2. compute new prediction points
npoints <- 100
newdata1 <- with(setosa, data.frame(Sepal.Length = 
                                       seq(min(Sepal.Length), max(Sepal.Length), len = npoints )))
newdata2 <- with(virginica, data.frame(Sepal.Length = 
                                          seq(min(Sepal.Length), max(Sepal.Length), len = npoints)))
# 3. simultaneous confidence bands
mylevel = 0.95
cc1 <- simultaneous_CBs(fit1, newdata1, level = mylevel)
cc1 <- cc1 %>% mutate(Species = "setosa", Sepal.Length = newdata1$Sepal.Length)
cc2 <- simultaneous_CBs(fit2, newdata2, level = mylevel)
cc2 <- cc2 %>% mutate(Species = "virginica", Sepal.Length = newdata2$Sepal.Length)

# combine datasets
mydata <- rbind(setosa, virginica)
mycc   <- rbind(cc1, cc2)    
mycc   <- mycc %>% rename(Sepal.Width = Mean) 
# plot both simultaneous confidence bands and pointwise confidence
# bands, to show the difference
library(ggplot2)
# prepare a plot using dataframe mydata, mapping sepal Length to x,
# sepal width to y, and grouping the data by species
p <- ggplot(data = mydata, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + 
# add data points
geom_point() +
# add quadratic regression with orthogonal polynomials and 95% pointwise
# confidence intervals
geom_smooth(method ="lm", formula = y ~ poly(x,2)) +
# add 95% simultaneous confidence bands
geom_ribbon(data = mycc, aes(x = Sepal.Length, color = NULL, fill = Species, ymin = LowerBound, ymax = UpperBound),alpha = 0.5)
print(p)

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

Các ban nhạc bên trong là những tính bằng cách mặc định bằng cách geom_smooth: đây là những pointwise 95% các ban nhạc tự tin xung quanh các đường cong hồi quy. Thay vào đó, các dải bán trong suốt (cảm ơn về mẹo đồ họa, @Roland) thay vào đó là các dải tin cậy 95% đồng thời . Như bạn có thể thấy, chúng lớn hơn các dải theo chiều, như mong đợi. Việc các dải tin cậy đồng thời từ hai đường cong không trùng nhau có thể được coi là một dấu hiệu cho thấy thực tế là sự khác biệt giữa hai mô hình có ý nghĩa thống kê.

Tất nhiên, đối với thử nghiệm giả thuyết với giá trị p hợp lệ , phải tuân theo cách tiếp cận @Roland, nhưng phương pháp đồ họa này có thể được xem là phân tích dữ liệu thăm dò. Ngoài ra, cốt truyện có thể cho chúng ta một số ý tưởng bổ sung. Rõ ràng là các mô hình cho hai tập dữ liệu là khác nhau về mặt thống kê. Nhưng có vẻ như hai mô hình độ 1 sẽ phù hợp với dữ liệu gần như hai mô hình bậc hai. Chúng ta có thể dễ dàng kiểm tra giả thuyết này:

fit_deg1 <- lm(data = mydata, Sepal.Width ~ Species*poly(Sepal.Length,1))
fit_deg2 <- lm(data = mydata, Sepal.Width ~ Species*poly(Sepal.Length,2))
anova(fit_deg1, fit_deg2)
# Analysis of Variance Table

# Model 1: Sepal.Width ~ Species * poly(Sepal.Length, 1)
# Model 2: Sepal.Width ~ Species * poly(Sepal.Length, 2)
#  Res.Df    RSS Df Sum of Sq      F Pr(>F)
# 1     96 7.1895                           
# 2     94 7.1143  2  0.075221 0.4969   0.61

Sự khác biệt giữa mô hình độ 1 và mô hình độ 2 là không đáng kể, do đó chúng tôi cũng có thể sử dụng hai hồi quy tuyến tính cho mỗi bộ dữ liệu.


3
+1 cho âm mưu. Một phần quan trọng của phân tích thống kê.
Roland

Để chắc chắn, theo phương pháp của bạn: thực tế là "khoảng tin cậy từ hai đường cong không trùng nhau có thể được coi là một dấu hiệu cho thấy sự khác biệt giữa hai mô hình có ý nghĩa thống kê." Nhưng tôi không thể nói rằng sự khác biệt không đáng kể nếu chúng trùng nhau phải không?
PaoloH

Để cụ thể hơn tôi đã thêm một ví dụ trong bài viết.
PaoloH

@PaoloH, vì bạn đã thêm một cốt truyện mới trong câu hỏi của mình, tôi sẽ thêm một nhận xét ở đó.
DeltaIV
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.