@ रोनाल्ड का जवाब सबसे अच्छा है और यह व्यापक रूप से कई समान समस्याओं पर लागू होता है (उदाहरण के लिए, क्या वजन और उम्र के बीच संबंध में पुरुषों और महिलाओं के बीच सांख्यिकीय रूप से महत्वपूर्ण अंतर है?)। हालांकि, मैं एक और समाधान जोड़ूंगा, जबकि मात्रात्मक के रूप में नहीं (यह एक p -value प्रदान नहीं करता है ), अंतर का एक अच्छा चित्रमय प्रदर्शन देता है।
संपादित करें : इस प्रश्न के अनुसार , ऐसा लगता है predict.lm
, ggplot2
आत्मविश्वास अंतराल की गणना करने के लिए उपयोग किया जाने वाला फ़ंक्शन , प्रतिगमन वक्र के आसपास एक साथ विश्वास बैंड की गणना नहीं करता है, लेकिन केवल पॉइंटवाइज़ आत्मविश्वास बैंड। ये अंतिम बैंड यह आकलन करने के लिए सही नहीं हैं कि क्या दो फिट रैखिक मॉडल सांख्यिकीय रूप से अलग हैं, या किसी अन्य तरीके से कहा गया है, कि क्या वे एक ही सच्चे मॉडल के साथ संगत हो सकते हैं या नहीं। इस प्रकार, वे आपके प्रश्न का उत्तर देने के लिए सही वक्र नहीं हैं। चूंकि जाहिरा तौर पर एक साथ विश्वास बैंड (अजीब!) प्राप्त करने के लिए कोई आर बिलिन नहीं है, इसलिए मैंने अपना स्वयं का फ़ंक्शन लिखा। यह रहा:
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
: ये प्रतिगमन घटता के आसपास बिंदुवार 95% विश्वास बैंड हैं। बाहरी, अर्धपारदर्शी बैंड (ग्राफिक्स टिप, @ रोलैंड के लिए धन्यवाद) एक साथ 95% आत्मविश्वास बैंड हैं। जैसा कि आप देख सकते हैं, वे अपेक्षित रूप से पॉइंटवाइज़ बैंड से बड़े हैं। तथ्य यह है कि दो घटता से एक साथ विश्वास बैंड ओवरलैप नहीं है इस तथ्य के संकेत के रूप में लिया जा सकता है कि दो मॉडल के बीच अंतर सांख्यिकीय रूप से महत्वपूर्ण है।
बेशक, एक वैध पी के साथ परिकल्पना परीक्षण के लिए , @ रोलैंड दृष्टिकोण का पालन किया जाना चाहिए, लेकिन इस ग्राफिकल दृष्टिकोण को खोजपूर्ण डेटा विश्लेषण के रूप में देखा जा सकता है। साथ ही, कथानक हमें कुछ अतिरिक्त विचार दे सकता है। यह स्पष्ट है कि दो डेटा सेट के लिए मॉडल सांख्यिकीय रूप से भिन्न हैं। लेकिन यह भी दिखता है कि दो डिग्री 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 मॉडल के बीच का अंतर महत्वपूर्ण नहीं है, इस प्रकार हम प्रत्येक डेटा सेट के लिए दो रैखिक रजिस्टरों का उपयोग कर सकते हैं।