आर में दो बहुपद प्रतिगमन के बीच अंतर के सांख्यिकीय महत्व की तुलना करें


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 

और अब मैं जानना चाहता हूं, अगर एक परीक्षण करने के लिए आर फ़ंक्शन का उपयोग करने का एक तरीका है जो मुझे बताएगा कि दो बहुपद प्रतिगमन के बीच अंतर में एक सांख्यिकीय महत्व है या नहीं, यह जानते हुए कि दिनों का प्रासंगिक अंतराल है [ 1100]।

जो मैंने समझा था कि मैं सीधे एनोवा टेस्ट लागू नहीं कर सकता क्योंकि मान डेटा के दो अलग-अलग सेटों से आते हैं और न ही एआईसी, जो मॉडल / सच्चे डेटा की तुलना करने के लिए उपयोग किया जाता है।

मैंने संबंधित प्रश्न में @ रोलैंड द्वारा दिए गए निर्देशों का पालन करने की कोशिश की, लेकिन मुझे अपने परिणामों को देखते समय कुछ गलत समझा।

मैंने जो किया था यह रहा :

मैंने अपने दोनों डेटासेट को एक में जोड़ दिया।

fचर कारक है जिसके बारे में @ रोलैंड ने बात की है। मैंने पहले सेट के लिए 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, मॉडल के अजीब परिणाम हैं। मुझे नहीं पता कि क्या फिट मॉडल सही है, मुझे समझ नहीं आता कि @ रोलैंड का वास्तव में क्या मतलब था।

@DeltaIV समाधान को ध्यान में रखते हुए, मुझे लगता है कि उस मामले में: यहां छवि विवरण दर्ज करें मॉडल ओवरलैप होते हुए भी काफी भिन्न होते हैं। क्या मुझे ऐसा मान लेना सही है?


यह मुझे लगता है कि उपयोगकर्ता @ रोलांड की टिप्पणी जिस प्रश्न से आप लिंक कर रहे हैं, वह आपके प्रश्न का पूरी तरह से उत्तर देता है। वास्तव में ऐसा क्या है जो आपको समझ में नहीं आता है?
डेल्टिव

अच्छी तरह से कुछ बातें, मुझे यकीन नहीं था कि यह टिप्पणी अनुभाग में थी, लेकिन यह उचित जवाब नहीं था, लेकिन अगर यह काम कर रहा है, तो मुझे यकीन है कि मुझे समझ में आने की आवश्यकता है। मूल रूप से, मुझे एक नया डेटासेट बनाना चाहिए जहां मैं 1s और 0s जैसे कॉलम बनाता हूं, जिसके आधार पर वे मूल रूप से कौन से डेटासेट से आते हैं? फिर उसके बाद मैं प्रत्येक डेटा के साथ दो मॉडल बनाता हूं, दूसरे को केवल एक डेटासेट के साथ लिया जाता है। फिर मैं ऑवा परीक्षण लागू करता हूं। क्या यही है ? इसके अलावा, मैंने कभी भी एओवा परीक्षण का उपयोग नहीं किया है, मैंने देखा कि वे उचित पी-मूल्य के बारे में बात करते हैं जो वास्तव में होगा?
पाओलोएच

1
[0,100]

जवाबों:


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, यानी समूह चर का प्रभाव महत्वपूर्ण है। चूंकि समूहीकरण चर संबंधित डेटासेट का प्रतिनिधित्व करता है, इसलिए दो डेटासेट के लिए बहुपद फिट को काफी भिन्न माना जा सकता है।


मुझे खेद है कि यह स्पष्ट होना चाहिए, लेकिन मैं एनोवा परीक्षा के परिणामों से परिचित नहीं हूं जो हमें बता रहा है कि fit1 fit0 से बेहतर है? क्या यह पीआर (> एफ) है जो बेहद कम है?
पाओलोह

1
पी-मूल्य आपको बताता है कि क्या मॉडल काफी अलग हैं (कम पी-वैल्यू का अर्थ है "अधिक भिन्न" भिन्नता को ध्यान में रखते हुए, आमतौर पर पी <0.05 महत्वपूर्ण माना जाता है)। छोटा RSS बेहतर फिटिंग मॉडल को इंगित करता है।
रोलैंड

@ पाओलो Btw।, आपको आश्रित चर के रूप में अनुपात से बचना चाहिए। साधारण कम से कम वर्गों के मॉडल इस तरह के एक आश्रित चर के साथ पकड़ नहीं है।
रोलैंड

8

@ रोनाल्ड का जवाब सबसे अच्छा है और यह व्यापक रूप से कई समान समस्याओं पर लागू होता है (उदाहरण के लिए, क्या वजन और उम्र के बीच संबंध में पुरुषों और महिलाओं के बीच सांख्यिकीय रूप से महत्वपूर्ण अंतर है?)। हालांकि, मैं एक और समाधान जोड़ूंगा, जबकि मात्रात्मक के रूप में नहीं (यह एक 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 मॉडल के बीच का अंतर महत्वपूर्ण नहीं है, इस प्रकार हम प्रत्येक डेटा सेट के लिए दो रैखिक रजिस्टरों का उपयोग कर सकते हैं।


3
प्लॉटिंग के लिए +1। सांख्यिकीय विश्लेषण का एक महत्वपूर्ण हिस्सा।
रोलैंड

बस यह सुनिश्चित करने के लिए कि आपकी विधि: तथ्य यह है कि "दो घटता से विश्वास अंतराल ओवरलैप नहीं है, इस तथ्य के संकेत के रूप में लिया जा सकता है कि दो मॉडल के बीच का अंतर सांख्यिकीय रूप से महत्वपूर्ण है।" लेकिन मैं यह नहीं कह सकता कि यदि वे ओवरलैप करते हैं तो अंतर महत्वपूर्ण नहीं है?
पाओलो

अधिक विशिष्ट होने के लिए मैंने पोस्ट में एक उदाहरण जोड़ा।
पाओलोएच

@PaoloH, जब से आपने अपने प्रश्न में एक नया प्लॉट जोड़ा है, मैं वहां एक टिप्पणी जोड़ूंगा।
DeltaIV
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.