İki eğimin farkı nasıl hesaplanır?


12

İki çizginin (az ya da çok) paralel olup olmadığını anlamak için bir yöntem var mı? Doğrusal regresyonlardan üretilen iki çizgim var ve bunların paralel olup olmadığını anlamak istiyorum. Başka bir deyişle, bu iki çizginin eğimlerinden farklı olmak istiyorum.

Bunu hesaplamak için bir R işlevi var mı?

EDIT: ... ve doğrusal bir regresyon çizgisinin eğimini (derece olarak) nasıl alabilirim?

Yanıtlar:


24

Açık bir şeyi kaçırıp kaçırmadığımı merak ediyorum, ancak bunu ANCOVA kullanarak istatistiksel olarak yapamaz mıydınız? Önemli bir konu iki regresyonlarında yamaçlar tahmini olmasıdır ile hata. Bunlar, genel olarak popülasyonlardaki eğimlerin tahminidir. Endişe, iki regresyon çizgileri paralel olup olmadığı ise nüfusta o zaman karşılaştırmak mantıklı değil ile doğrudan kesin denklik için; her ikisi de dikkate alınması gereken hata / belirsizliğe tabidir.bir1bir2

Bunu istatistiksel bir bakış açısıyla düşünürsek ve her iki veri kümesi için ve verileri anlamlı bir şekilde birleştirebilirsek (yani her iki kümedeki ve , ikisi için benzer aralıklara sahip iki popülasyondan çizilir) değişkenler sadece iki popülasyonda farklı olan aralarındaki ilişkidir), aşağıdaki iki modele uyabiliriz:xyxy

y^=b0+b1x+b2g

ve

y^=b0+b1x+b2g+b3xg

Burada model katsayılarıdır ve , her bir gözlemin hangi veri kümesine ait olduğunu gösteren bir gruplama değişkeni / faktörüdür.bbeng

İkinci, daha karmaşık modelin verilere daha basit modelden daha iyi uyup uymadığını test etmek için bir ANOVA tablosu veya F-oranı kullanabiliriz. Daha basit model, iki çizginin eğimlerinin aynı olduğunu ( ), ancak çizgilerin birbirinden miktarıyla .b1b2

Daha karmaşık model, hattın eğimi ile gruplama değişkeni arasındaki etkileşimi içerir. Bu etkileşim terimi için katsayı sıfırdan önemli ölçüde farklıysa veya ANOVA / F oranı daha karmaşık model verilere daha iyi uyduğunu gösteriyorsa, iki çizginin paralel olduğu Null hipotezini reddetmeliyiz.

Burada kukla veriler kullanan R'deki bir örnek. İlk olarak, eşit eğimli veriler:

set.seed(2)
samp <- factor(sample(rep(c("A","B"), each = 50)))
d1 <- data.frame(y = c(2,5)[as.numeric(samp)] + (0.5 * (1:100)) + rnorm(100),
                 x = 1:100,
                 g = samp)
m1 <- lm(y ~ x * g, data = d1)
m1.null <- lm(y ~ x + g, data = d1)
anova(m1.null, m1)

Hangi verir

> anova(m1.null, m1)
Analysis of Variance Table

Model 1: y ~ x + g
Model 2: y ~ x * g
  Res.Df    RSS Df Sum of Sq      F Pr(>F)
1     97 122.29                           
2     96 122.13  1   0.15918 0.1251 0.7243

Bu veri örneğindeki eşit eğimlerin sıfır hipotezini reddetmediğimizi gösterir. Tabii ki, gerçekten bir tane varsa, bir farkı tespit etmek için yeterli güce sahip olduğumuzu garanti etmek isteriz, böylece örnek boyutumuz beklenen etki için çok küçük olduğu için yanlışlıkla boşluğu reddetmemize yol açmadık.

Şimdi farklı yamaçlarla.

set.seed(42)
x <- seq(1, 100, by = 2)
d2 <- data.frame(y = c(2 + (0.5 * x) + rnorm(50),
                       5 + (1.5 * x) + rnorm(50)),
                 x = x,
                 g = rep(c("A","B"), each = 50))
m2 <- lm(y ~ x * g, data = d2)
m2.null <- lm(y ~ x + g, data = d2)
anova(m2.null, m2)

Hangi verir:

> anova(m2.null, m2)
Analysis of Variance Table

Model 1: y ~ x + g
Model 2: y ~ x * g
  Res.Df     RSS Df Sum of Sq     F    Pr(>F)    
1     97 21132.0                                 
2     96   103.8  1     21028 19439 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Burada sıfır hipotezine karşı önemli kanıtlarımız var ve bu yüzden alternatif lehine reddedebiliriz (başka bir deyişle, iki çizginin eğimlerinin eşit olduğu hipotezini reddediyoruz).

iki modeldeki etkileşim terimleri ( ), iki grup için eğimlerde tahmini farkı verir. İlk model için, eğimlerdeki farkın tahmini küçüktür (~ 0.003)b3xg

> coef(m1)
(Intercept)           x          gB        x:gB 
2.100068977 0.500596394 2.659509181 0.002846393

ve bunun üzerine bir testi, eğimlerdeki bu farkın 0 olduğu yönündeki sıfır hipotezini reddedemez:t

> summary(m1)

Call:
lm(formula = y ~ x * g, data = d1)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.32886 -0.81224 -0.01569  0.93010  2.29984 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 2.100069   0.334669   6.275 1.01e-08 ***
x           0.500596   0.005256  95.249  < 2e-16 ***
gB          2.659509   0.461191   5.767 9.82e-08 ***
x:gB        0.002846   0.008047   0.354    0.724    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 1.128 on 96 degrees of freedom
Multiple R-squared: 0.9941, Adjusted R-squared: 0.9939 
F-statistic:  5347 on 3 and 96 DF,  p-value: < 2.2e-16 

İki grup için eğimleri farklı kıldığımız ikinci veri setine takılan modele dönersek, iki çizginin eğimlerindeki tahmini farkın ~ 1 birim olduğunu görürüz.

> coef(m2)
(Intercept)           x          gB        x:gB 
  2.3627432   0.4920317   2.8931074   1.0048653 

"A" grubu için eğim ~ 0.49'dur ( xyukarıdaki çıktıda), "B" grubu için eğimi elde ederken, "A" grubunun eğimine fark eğimleri (hatırlama etkileşim terimiyle verin) eklememiz gerekir. ; ~ 0.49 + ~ 1 = ~ 1.49. Bu 1.5'in "B" grubu için belirtilen eğime oldukça yakındır. Bu eğim farkına ilişkin bir testi, fark için tahminin 0'dan uzakta olduğunu gösterir:t

> summary(m2)

Call:
lm(formula = y ~ x * g, data = d2)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.1962 -0.5389  0.0373  0.6952  2.1072 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 2.362743   0.294220   8.031 2.45e-12 ***
x           0.492032   0.005096  96.547  < 2e-16 ***
gB          2.893107   0.416090   6.953 4.33e-10 ***
x:gB        1.004865   0.007207 139.424  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 1.04 on 96 degrees of freedom
Multiple R-squared: 0.9994, Adjusted R-squared: 0.9994 
F-statistic: 5.362e+04 on 3 and 96 DF,  p-value: < 2.2e-16

Bu çok iyi açıklama için çok teşekkür ederim. Amacım, eğimin daha az mı yoksa daha mı fazla olduğunu anlamaktır, bu yüzden test etmek için ANOVA kullanacağımı düşünüyorum.
Dail

iki distim vektörüm varsa ve ben onların eğimlerini karşılaştırmak istiyorum ama y (lm (x ~ y) yok, nasıl ANOVA kullanabilirim? Anova (lm (x ~ 1), lm (y ~ 1)) ama bir uyarı alıyorum
Dail

Burada vektörlerle ne demek istiyorsun? R veya matematiksel anlamda? Bu yüzden yeni bir soru başlayın, yöneltilen soruya çok farklıdır - do not bu bir düzenleme - böyle büyüklüğü geniş yürütülmesi takiplerin yorumlarda bir doğa imkansızdır.
Gavin Simpson

beklemek yok, iki modeli ANOVA ile karşılaştırmak zorundayım ... tamam, ama bu formülle bir model oluşturursam: x ~ 1 ve y ~ 1 ile başka bir model uyarısı alıyorum. R anlamda bahsediyorum. Nasıl yapabilirim?
Dail

1
@ İki eğim / çizgi elde etmek için iki regresyon taktıysanız, her iki veri kümesi için x ve y verileriniz vardır. Cevabımda söylediğim gibi, xs ve ys iki veri kümesinde karşılaştırılabilir ise, o zaman tüm verileri birleştirebilir ve bir gruplama değişkeni ekleyebilirsiniz. Örneğim, bunu kukla veriler kullanarak nasıl yapacağınızı gösterir, ancak zaten x ve y verileriniz var, ayrı regresyonlara uymak için kullandığınız verilerdir.
Gavin Simpson

8

İlk soru aslında geometriden. Formun iki satırı varsa:

y=bir1x+b1
y=bir2x+b2

o zaman onlar paralel bir1=bir2. Eğimler eşitse, o zaman çizgiler paraleldir.

İkinci soru için, taba rengiα=bir1, nerede α çizginin yaptığı açıdır x-aks ve bir1çizginin eğimidir. Yani

α=arctanbir1

ve dereceye dönüştürmek için 2π=360. Derecelerdeki cevap

α=arctanbir13602π.

İçin R işlevi arctandenir atan.

Örnek R kodu:

> x<-rnorm(100)
> y<-x+1+rnorm(100)/2
> mod<-lm(y~x)
> mod$coef
    (Intercept)           x 
      0.9416175   0.9850303 
    > mod$coef[2]
        x 
0.9850303 
> atan(mod$coef[2])*360/2/pi
       x 
44.56792 

Son satır derece.

Güncelleme. Negatif eğim değerleri için dereceye dönüşüm farklı bir kural izlemelidir. Açının x ekseninin üstünde olduğunu varsaydığımız için x ekseni ile açı 0 ile 180 arasında değerler alabilir. Yani negatif değerleri içinbir1, formül:

α=180-arctanbir13602π.

Not. Lise trigonometrisini hatırlamak benim için eğlenceli olsa da, gerçekten yararlı cevap Gavin Simpson tarafından verilen cevaptır. Regresyon çizgilerinin eğimleri rasgele değişkenler olduğundan, bunları karşılaştırmak için istatistiksel hipotez çerçevesi kullanılmalıdır.


teşekkür ederim! regresyondan eğim nasıl alınır? katsayı ve kesişme almak zorunda mıyım?
Dail

belki doğrusal regresyon dereceleri doğrudan bazı işlevlerle döndürür?
Dail

degress = +45 ve degress = -315 demek aynı çizgide değil mi? whare aynı hat hakkında konuşmuyor mu?
Dail

1

... @mpiktas'ın cevabını takip ederek, bir lmnesneden eğimi nasıl çıkaracağınız ve yukarıdaki formülü nasıl uygulayacağınız aşağıda açıklanmıştır.

# prepare some data, see ?lm
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)

lm.D9 <- lm(weight ~ group)
# extract the slope (this is also used to draw a regression line if you wrote abline(lm.D9)
coefficients(lm.D9)["groupTrt"] 
      groupTrt 
   -0.371 
# use the arctan*a1 / (360 / (2*pi)) formula provided by mpiktas
atan(coefficients(lm.D9)["groupTrt"]) * (360/(2 * pi)) 
 groupTrt 
-20.35485 
180-atan(coefficients(lm.D9)["groupTrt"]) * (360/(2 * pi))
 groupTrt 
200.3549 

örnek için çok teşekkür ederim, bu durumda dereceler -200?
Dail

Evet. Sorununuzun çözüldüğünü düşünüyorsanız, @mpiktas'ın cevabını doğru olarak işaretleyin, teşekkürler.
Roman Luštrik

@ RomanLuštrik, bölümü kaçırdınız 2π
mpiktas

1
@ RomanLuštrik, kodu düzelttim ve doğru çıktıyı ekledim. Düzeltmeyi kaldırmaktan çekinmeyin.
mpiktas
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.