R'deki iki polinom regresyonu arasındaki farkın istatistiksel önemini karşılaştırın


10

Her şeyden önce bu forumda biraz araştırma yaptım ve çok benzer sorular sorulduğunu biliyorum , ancak genellikle doğru cevaplanmadılar veya bazen cevap anlayabileceğim kadar ayrıntılı değil. Yani bu kez sorum şu: İki veri setim var, her birinde, böyle bir polinom regresyonu yapıyorum:

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

Polinom regresyon grafikleri şunlardır:

resim açıklamasını buraya girin

Katsayılar:

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

Ve şimdi bilmek istiyorum ki, bir R fonksiyonu kullanmak için bana bir test yapmak için bir yol varsa, ilgili gün aralığının olduğunu bilerek iki polinom regresyonu arasındaki farkta istatistiksel bir anlamlılık olup olmadığını söyler [ 1100].

Anladığım kadarıyla, doğrudan anova testini uygulayamadığım için değerler iki farklı veri kümesinden veya model / gerçek verileri karşılaştırmak için kullanılan AIC'den geliyor.

İlgili soruda @Roland tarafından verilen talimatları takip etmeye çalıştım, ancak sonuçlarıma bakarken muhtemelen bir şeyler yanlış anladım:

İşte yaptığım şey:

Her iki veri setimi de bir araya getirdim.

f@Roland'ın bahsettiği değişken faktördür. İlk set için 1s, diğeri için 0s koydum.

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

Verilerim şu şekilde görünüyor:

resim açıklamasını buraya girin

Kırmızı fit3ANOVAolan hala çalışıyor ama mavi olanla ilgili bir sorunum var fit3ANOVACN, modelin garip sonuçları var. Uygun modelin doğru olup olmadığını bilmiyorum, @Roland'ın tam olarak ne anlama geldiğini anlamıyorum.

@DeltaIV çözümü göz önüne alındığında, bu durumda: resim açıklamasını buraya girin Modeller üst üste gelmelerine rağmen önemli ölçüde farklıdır. Varsaymaya hakkım var mı?


Bana öyle geliyor ki, kullanıcı @ Roland'ın bağlantı kurduğunuz soruya yaptığı yorum, sorunuzu mükemmel bir şekilde cevaplıyor. Tam olarak anlamadığınız nedir?
DeltaIV

Peki birkaç şey, yorum bölümünde olduğu için bunun uygun bir cevap olup olmadığından emin değildim, ama o zaman çalışıyorsa, sadece anladığımdan emin olmalıyım. Temel olarak, başlangıçta hangi veri kümelerinden geldiklerine bağlı olarak 1'ler ve 0'lar gibi bir sütun oluşturduğum yeni bir veri kümesi oluşturmalıyım? Bundan sonra, her veriyle diğeri dikkate alınan veri kümelerinden sadece biriyle iki model oluşturuyorum. Sonra anova testini uygularım. Öyle mi? Ayrıca anova testini hiç kullanmadım, doğru p değeri hakkında konuştuklarını gördüm, tam olarak ne olurdu?
PaoloH

1
Sizin durumunuzda iki regresyon aynı aralıktadır. Doğrusal regresyon için güven bantlarını yorumlamak en iyi durumdur. Bu durumda, iki regresyon , tüm aralık boyunca birbirlerinin güven bandının içinde tamamen ( eğer sizin durumunuzda yer alıyorsa, istatistiksel olarak farklı değildir - sadece küçük bir alt aralıkta çakışıyorlarsa değil. [0,100]
DeltaIV

Yanıtlar:


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

Gördüğünüz gibi fit1, anlamlı olarak daha iyidir fit0, yani gruplama değişkeninin etkisi önemlidir. Gruplama değişkeni ilgili veri kümelerini temsil ettiğinden, iki veri kümesine polinom uyumları önemli ölçüde farklı kabul edilebilir.


Üzgünüm, bu açık olmalı ama Anova test sonuçlarına aşina değilim, fit1'in fit0'dan daha iyi olduğunu söyleyen şey nedir? Son derece düşük olan Pr (> F) mı?
PaoloH

1
P değeri, modellerin önemli ölçüde farklı olup olmadığını söyler (düşük p değeri, varyasyonu dikkate alarak "daha farklı" anlamına gelir, genellikle p <0.05 anlamlı kabul edilir). Daha küçük RSS, daha iyi oturan modeli gösterir.
Roland

@PaoloH Btw., Bağımlı değişken olarak oranlardan kaçınmalısınız. Sıradan en küçük kareler modellerinin varsayımları böyle bir bağımlı değişkene sahip değildir.
Roland

8

@Ronald'ın cevabı en iyisidir ve birçok benzer soruna yaygın olarak uygulanabilir (örneğin, erkekler ve kadınlar arasında kilo ve yaş arasındaki ilişkide istatistiksel olarak anlamlı bir fark var mı?). Bununla birlikte, niceliksel olmasa da ( p- değeri sağlamaz ), farkın güzel bir grafik görüntüsünü veren başka bir çözüm ekleyeceğim .

DÜZENLEME : göre bu soruya , bu gibi görünüyor predict.lmkullandığı işlevi, ggplot2güven aralıkları hesaplamak için, hesaplamak gelmez eşzamanlı güven bantları regresyon eğrisi etrafında, ama sadece noktasal güven bantları. Bu son bantlar, takılan iki doğrusal modelin istatistiksel olarak farklı olup olmadığını değerlendirmek için doğru olanlar değildir veya başka bir şekilde, aynı gerçek modelle uyumlu olup olmadıklarını söyleyebilirler. Böylece, sorunuzu cevaplamak için doğru eğriler değildirler. Görünüşe göre aynı anda güven bantları (garip!) Almak için R yerleşik yok, çünkü kendi fonksiyonumu yazdım. İşte burada:

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)

resim açıklamasını buraya girin

İç bantlar tarafından varsayılan olarak hesaplanan olanlardır geom_smooth: bunlar noktasal regresyon kıvrımlarda% 95 güven bantlar. Dış, yarı saydam bantlar (grafik ipucu için teşekkürler, @Roland) aynı anda % 95 güven bantlarıdır. Gördüğünüz gibi, bunlar beklendiği gibi noktasal bantlardan daha büyük. İki eğriden eşzamanlı güven bantlarının örtüşmemesi, iki model arasındaki farkın istatistiksel olarak anlamlı olduğunun bir göstergesi olarak alınabilir.

Tabii ki, geçerli p değeri olan bir hipotez testi için @Roland yaklaşımı izlenmelidir, ancak bu grafiksel yaklaşım keşifsel veri analizi olarak görülebilir. Ayrıca, plan bize bazı ek fikirler verebilir. İki veri seti için olan modellerin istatistiksel olarak farklı olduğu açıktır. Ama aynı zamanda iki derece 1 modelin iki kuadratik modelin yanı sıra neredeyse verilere uyması gibi görünüyor. Bu hipotezi kolayca test edebiliriz:

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

Derece 1 modeli ile derece 2 modeli arasındaki fark anlamlı değildir, bu nedenle her veri kümesi için iki doğrusal regresyon da kullanabiliriz.


3
Çizim için +1. İstatistiksel analizlerin önemli bir parçası.
Roland

Sadece yönteminizde emin olmak için: "iki eğriden gelen güven aralıklarının çakışmaması" iki model arasındaki farkın istatistiksel olarak anlamlı olduğunun bir göstergesi olarak alınabilir. " Ama üst üste binmeleri farkın önemli olmadığını söyleyemem doğru mu?
PaoloH

Daha spesifik olmak için yazıda bir örnek ekledim.
PaoloH

@PaoloH, sorunuza yeni bir komplo eklediğiniz için buraya bir yorum ekleyeceğim.
DeltaIV
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.