เปรียบเทียบนัยสำคัญทางสถิติของความแตกต่างระหว่างการถดถอยพหุนามทั้งสองใน R


10

ดังนั้นก่อนอื่นเลยฉันทำการค้นคว้าเกี่ยวกับฟอรัมนี้และฉันรู้ว่ามี คำถามที่คล้ายกันมากถูกถาม แต่พวกเขามักจะไม่ได้รับคำตอบที่ถูกต้องหรือบางครั้งคำตอบนั้นไม่ละเอียดพอที่จะเข้าใจ ดังนั้นเวลานี้คำถามของฉันคือฉันมีชุดข้อมูลสองชุดในแต่ละชุดฉันทำการถดถอยพหุนามดังนี้:

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

พหุนามถดถอยพหุนามคือ:

ป้อนคำอธิบายรูปภาพที่นี่

ค่าสัมประสิทธิ์คือ:

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

และตอนนี้ฉันอยากรู้ว่าถ้ามีวิธีใช้ฟังก์ชัน R เพื่อทำการทดสอบที่จะบอกฉันว่ามีนัยสำคัญทางสถิติหรือไม่ในความแตกต่างระหว่างการถดถอยพหุนามทั้งสองที่รู้ว่าช่วงเวลาที่เกี่ยวข้องของวันคือ [ 1,100]

จากสิ่งที่ฉันเข้าใจฉันไม่สามารถใช้การทดสอบ anova โดยตรงเพราะค่ามาจากชุดข้อมูลที่แตกต่างกันสองชุดหรือ AIC ซึ่งใช้ในการเปรียบเทียบแบบจำลอง / ข้อมูลจริง

ฉันพยายามทำตามคำแนะนำของ @Roland ในคำถามที่เกี่ยวข้อง แต่ฉันอาจเข้าใจผิดบางอย่างเมื่อดูผลลัพธ์ของฉัน:

นี่คือสิ่งที่ฉันทำ:

ฉันรวมทั้งชุดข้อมูลของฉันเป็นหนึ่ง

fเป็นตัวแปรที่ @Roland พูดถึง ฉันใส่ 1s สำหรับเซตแรกและ 0s สำหรับอีกชุด

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

ข้อมูลของฉันดูเหมือนว่าตอนนี้:

ป้อนคำอธิบายรูปภาพที่นี่

สีแดงfit3ANOVAยังคงใช้งานได้ แต่ฉันมีปัญหากับสีฟ้าfit3ANOVACNแบบจำลองมีผลลัพธ์แปลก ๆ ฉันไม่รู้ว่ารูปแบบพอดีถูกต้องหรือไม่ฉันไม่เข้าใจความหมายของ @Roland

เมื่อพิจารณาถึงวิธีแก้ปัญหา @DeltaIV ฉันคิดว่าในกรณีนี้: ป้อนคำอธิบายรูปภาพที่นี่ โมเดลมีความแตกต่างอย่างมีนัยสำคัญแม้ว่าจะมีการทับซ้อนกัน ฉันคิดถูกหรือไม่


สำหรับฉันแล้วความคิดเห็นของผู้ใช้ @ Roland ต่อคำถามที่คุณเชื่อมโยงอยู่ตอบคำถามของคุณได้อย่างสมบูรณ์แบบ อะไรที่คุณไม่เข้าใจ
DeltaIV

มีสองสิ่งที่ฉันไม่แน่ใจว่าใช่หรือไม่นี่เป็นคำตอบที่ถูกต้องเนื่องจากอยู่ในส่วนความคิดเห็น แต่ถ้าใช้งานได้ฉันต้องแน่ใจว่าฉันเข้าใจ โดยพื้นฐานแล้วฉันควรสร้างชุดข้อมูลใหม่ที่ฉันสร้างคอลัมน์ที่มี 1s และ 0s ขึ้นอยู่กับว่าชุดข้อมูลมาจากไหน หลังจากนั้นฉันสร้างสองรุ่นหนึ่งโดยมีข้อมูลทุกอันอีกรุ่นหนึ่งมีเพียงหนึ่งชุดข้อมูลที่นำมาพิจารณา จากนั้นฉันใช้การทดสอบโนวา มันคืออะไร นอกจากนี้ฉันไม่เคยใช้การทดสอบโนวาฉันเห็นว่าพวกเขาพูดคุยเกี่ยวกับค่า p ที่เหมาะสมว่าจะเป็นอย่างไร
เปาโล

1
ในกรณีของคุณการถดถอยสองรายการอยู่ในช่วงเวลาเดียวกัน นี่เป็นกรณีที่ดีที่สุดในการตีความแถบความเชื่อมั่นสำหรับการถดถอยเชิงเส้น ในกรณีนี้การถดถอยสองแบบนั้นไม่แตกต่างกันอย่างมีนัยสำคัญหากพวกเขาอยู่ในช่วงความเชื่อมั่นของกันและกันในช่วงเวลาทั้งหมด (ในกรณีของคุณ) - ไม่ใช่ถ้าพวกเขาทับซ้อนกันในช่วงย่อยขนาดเล็ก [0,100]
DeltaIV

คำตอบ:


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

อย่างที่คุณเห็นfit1ดีกว่าอย่างมีนัยสำคัญfit0นั่นคือผลกระทบของตัวแปรการจัดกลุ่มมีความสำคัญ เนื่องจากตัวแปรการจัดกลุ่มแสดงชุดข้อมูลที่เกี่ยวข้องพหุนามพอดีกับชุดข้อมูลสองชุดจึงมีความแตกต่างกันอย่างมาก


ฉันขอโทษที่ต้องชัดเจน แต่ฉันไม่คุ้นเคยกับผลการทดสอบ Anova สิ่งที่บอกเราว่า fit1 ดีกว่า fit0? มันเป็น Pr (> F) ซึ่งต่ำมากหรือไม่?
เปาโล

1
p-value แจ้งให้คุณทราบว่าโมเดลมีความแตกต่างอย่างมีนัยสำคัญหรือไม่ (p-value ต่ำกว่าหมายถึง "แตกต่างกันมาก" โดยคำนึงถึงรูปแบบที่เปลี่ยนแปลงโดยทั่วไปแล้ว p <0.05 ถือว่ามีนัยสำคัญ) RSS ขนาดเล็กบ่งบอกถึงรูปแบบการกระชับที่ดีขึ้น
Roland

@ เปาโล Btw. คุณควรหลีกเลี่ยงอัตราส่วนเป็นตัวแปรตาม สมมติฐานของโมเดลสี่เหลี่ยมจัตุรัสน้อยสุดสามัญไม่ได้มีตัวแปรตามเช่นนั้น
Roland

8

คำตอบของ @Ronald เป็นคำตอบที่ดีที่สุดและใช้ได้อย่างกว้างขวางกับปัญหาที่คล้ายคลึงกันหลายประการ (เช่นมีความแตกต่างอย่างมีนัยสำคัญระหว่างผู้ชายกับผู้หญิงในความสัมพันธ์ระหว่างน้ำหนักและอายุหรือไม่) อย่างไรก็ตามฉันจะเพิ่มวิธีแก้ปัญหาอื่นซึ่งในขณะที่ไม่เชิงปริมาณ (ไม่ได้ให้ค่าp ) ให้การแสดงผลกราฟิกที่ดีของความแตกต่าง

แก้ไข : ตามคำถามนี้ดูเหมือนว่าpredict.lmฟังก์ชั่นที่ใช้ggplot2ในการคำนวณช่วงความเชื่อมั่นไม่คำนวณแถบความเชื่อมั่นพร้อมกันรอบ ๆ เส้นโค้งการถดถอย แต่มีเพียงแถบความเชื่อมั่นแบบจุดเท่านั้น แถบสุดท้ายเหล่านี้ไม่ใช่สิ่งที่ถูกต้องในการประเมินว่าแบบจำลองเชิงเส้นสองแบบที่ติดตั้งนั้นมีความแตกต่างทางสถิติหรือกล่าวอีกนัยหนึ่งไม่ว่าพวกมันจะเข้ากันได้กับแบบจำลองที่เหมือนกันจริงหรือไม่ ดังนั้นพวกเขาไม่ใช่เส้นโค้งที่ถูกต้องในการตอบคำถามของคุณ เนื่องจากเห็นได้ชัดว่าไม่มี R บิวอินเพื่อรับแถบความมั่นใจพร้อมกัน (แปลก!) ฉันจึงเขียนฟังก์ชั่นของตัวเอง นี่มันคือ:

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)

ป้อนคำอธิบายรูปภาพที่นี่

ภายในวงเป็นผู้คำนวณโดยเริ่มต้นจากgeom_smoothคนเหล่านี้เป็นpointwise 95% วงดนตรีที่ความเชื่อมั่นรอบเส้นโค้งการถดถอย แถบด้านนอกกึ่งโปร่งใส (ขอบคุณสำหรับปลายกราฟิก @Roland) แทนแถบความมั่นใจ 95% พร้อมกัน อย่างที่คุณเห็นพวกมันมีขนาดใหญ่กว่าวงพอยต์ตามคาด ความจริงที่ว่าแถบความเชื่อมั่นที่เกิดขึ้นพร้อมกันจากทั้งสองเส้นโค้งนั้นไม่ได้ซ้อนทับกันสามารถนำมาใช้เป็นข้อบ่งชี้ถึงความจริงที่ว่าความแตกต่างระหว่างทั้งสองรุ่นนั้นมีนัยสำคัญทางสถิติ

แน่นอนว่าสำหรับการทดสอบสมมติฐานด้วยค่าp- value ที่ถูกต้องจะต้องปฏิบัติตามวิธี @Roland แต่วิธีกราฟิกสามารถดูเป็นการวิเคราะห์ข้อมูลเชิงสำรวจได้ นอกจากนี้เนื้อเรื่องยังช่วยให้เรามีแนวคิดเพิ่มเติม เป็นที่ชัดเจนว่าแบบจำลองสำหรับชุดข้อมูลทั้งสองนั้นมีความแตกต่างทางสถิติ แต่มันก็ดูเหมือนว่าแบบจำลองสององศา 1 จะพอดีกับข้อมูลเกือบจะเป็นแบบสองกำลังสอง เราสามารถทดสอบสมมติฐานนี้ได้อย่างง่ายดาย:

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

ความแตกต่างระหว่างตัวแบบดีกรี 1 และตัวแบบดีกรี 2 นั้นไม่สำคัญดังนั้นเราอาจใช้การถดถอยเชิงเส้นสองชุดสำหรับแต่ละชุดข้อมูล


3
+1 สำหรับการวางแผน ส่วนสำคัญของการวิเคราะห์ทางสถิติ
Roland

เพียงเพื่อให้แน่ใจว่าในวิธีการของคุณ: ความจริงที่ว่า "ช่วงความเชื่อมั่นจากทั้งสองเส้นโค้งไม่ทับซ้อนกันสามารถนำมาใช้เป็นเครื่องบ่งชี้ถึงความจริงที่ว่าความแตกต่างระหว่างทั้งสองรุ่นมีความสำคัญทางสถิติ" แต่ฉันไม่สามารถพูดได้ว่าความแตกต่างไม่สำคัญหากพวกเขาทับซ้อนกันใช่มั้ย
เปาโล

เพื่อให้เจาะจงยิ่งขึ้นฉันได้เพิ่มตัวอย่างในโพสต์
เปาโล

@Poloolo เนื่องจากคุณได้เพิ่มพล็อตใหม่ในคำถามของคุณฉันจะเพิ่มความคิดเห็นที่นั่น
DeltaIV
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.