Bagaimana cara menghitung selisih dua lereng?

11

Apakah ada metode untuk memahami apakah dua garis paralel (kurang lebih)? Saya memiliki dua garis yang dihasilkan dari regresi linier dan saya ingin memahami jika mereka paralel. Dengan kata lain, saya ingin mendapatkan perbedaan dari kedua garis tersebut.

Apakah ada fungsi R untuk menghitung ini?

EDIT: ... dan bagaimana saya bisa mendapatkan kemiringan (dalam derajat) dari garis regresi linier?

Dail
sumber

Jawaban:

23

Saya ingin tahu apakah saya kehilangan sesuatu yang jelas, tetapi tidak bisakah Anda melakukan ini secara statistik menggunakan ANCOVA? Masalah penting adalah bahwa kemiringan dalam dua regresi diperkirakan dengan kesalahan. Mereka adalah perkiraan lereng populasi secara luas. Jika yang menjadi perhatian adalah apakah kedua garis regresi itu paralel atau tidak dalam populasi maka tidak masuk akal untuk membandingkan dengan secara langsung untuk kesetaraan yang tepat; keduanya tunduk pada kesalahan / ketidakpastian yang perlu dipertimbangkan.Sebuah1Sebuah2

Jika kita memikirkan hal ini dari sudut pandang statistik, dan kita dapat menggabungkan data pada dan untuk kedua set data dalam beberapa cara yang berarti (yaitu dan pada kedua set diambil dari dua populasi dengan rentang yang sama untuk keduanya. variabel hanya hubungan di antara mereka yang berbeda dalam dua populasi), maka kita bisa cocok dengan dua model berikut:xyxy

y^=b0+b1x+b2g

dan

y^=b0+b1x+b2g+b3xg

Di mana adalah koefisien model, dan adalah variabel / faktor pengelompokan, yang menunjukkan data yang ditetapkan untuk setiap pengamatan.bsayag

Kita dapat menggunakan tabel ANOVA atau F-rasio untuk menguji apakah model kedua yang lebih kompleks cocok dengan data lebih baik daripada model yang lebih sederhana. Model yang lebih sederhana menyatakan bahwa kemiringan dua garis adalah sama ( ) tetapi garis-garis tersebut saling mengimbangi dengan jumlah .b1b2

Model yang lebih kompleks mencakup interaksi antara kemiringan garis dan variabel pengelompokan. Jika koefisien untuk istilah interaksi ini berbeda secara signifikan dari nol atau rasio ANOVA / F menunjukkan model yang lebih kompleks cocok dengan data yang lebih baik maka kita harus menolak hipotesis Null bahwa dua garis itu paralel.

Berikut adalah contoh dalam R menggunakan data dummy. Pertama, data dengan kemiringan yang sama:

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)

Pemberian yang mana

> 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

Menunjukkan bahwa kami gagal menolak hipotesis nol dari kemiringan yang sama dalam sampel data ini. Tentu saja, kami ingin meyakinkan diri sendiri bahwa kami memiliki kekuatan yang cukup untuk mendeteksi perbedaan jika benar-benar ada perbedaan sehingga kami tidak mengarah pada kegagalan untuk menolak nol karena ukuran sampel kami terlalu kecil untuk efek yang diharapkan.

Sekarang dengan kemiringan yang berbeda.

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)

Pemberian yang mana:

> 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

Di sini kita memiliki bukti substansial terhadap hipotesis nol dan dengan demikian kita dapat menolaknya demi alternatif (dengan kata lain, kami menolak hipotesis bahwa kemiringan kedua garis itu sama).

Istilah interaksi dalam dua model yang saya pasang ( ) memberikan perbedaan estimasi dalam kemiringan untuk kedua kelompok. Untuk model pertama, estimasi perbedaan lereng kecil (~ 0,003)b3xg

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

dan -test pada ini akan gagal untuk menolak hipotesis nol bahwa perbedaan ini di lereng adalah 0: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 

Jika kita beralih ke model yang dipasang pada kumpulan data kedua, di mana kami membuat kemiringan untuk dua kelompok berbeda, kita melihat bahwa perbedaan estimasi dalam kemiringan dari dua garis adalah ~ 1 unit.

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

Kemiringan untuk grup "A" adalah ~ 0,49 ( xdalam output di atas), sementara untuk mendapatkan kemiringan untuk grup "B" kita perlu menambahkan perbedaan lereng (berikan dengan istilah interaksi ingat) ke kemiringan grup "A" ; ~ 0,49 + ~ 1 = ~ 1,49. Ini cukup dekat dengan kemiringan lain untuk grup "B" sebesar 1,5. Uji - pada perbedaan lereng ini juga menunjukkan bahwa estimasi untuk perbedaan dibatasi jauh dari 0: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
Gavin Simpson
sumber
terima kasih banyak atas penjelasan yang sangat bagus ini. Tujuan saya adalah untuk memahami jika sloper kurang atau lebih sama, jadi saya pikir saya akan menggunakan ANOVA untuk mengujinya.
Dail
jika saya memiliki dua vektor distint dan saya ingin membandingkan slops mereka tetapi saya tidak punya y (lm (x ~ y), bagaimana saya bisa menggunakan ANOVA? Saya mencoba anova (lm (x ~ 1), lm (y ~ 1)) tapi saya mendapat peringatan
Dail
Apa yang Anda maksud dengan vektor di sini? Dalam pengertian R atau pengertian matematika? Hal ini sangat berbeda dari pertanyaan Anda diajukan, jadi silakan memulai pertanyaan baru - jangan tidak mengedit satu ini - tidak mungkin untuk melakukan tindak lanjut dari luas seperti alam di komentar.
Gavin Simpson
tidak tunggu, saya harus membandingkan dua model dengan ANOVA ... ok, tapi Jika saya membuat model dengan rumus ini: x ~ 1 dan model lain dengan y ~ 1 saya mendapatkan peringatan. Saya berbicara tentang dalam arti R. Bagaimana saya bisa melakukannya?
Dail
1
@Ail jika Anda memasang dua regresi untuk mendapatkan dua kemiringan / garis, Anda memiliki data x dan y untuk kedua set data. Seperti yang saya katakan dalam Jawaban saya, jika xs dan ys sebanding dalam dua set data, maka Anda bisa menggabungkan semua data dan menambahkan variabel pengelompokan. Contoh saya menunjukkan bagaimana melakukan ini menggunakan data dummy, tetapi Anda sudah memiliki data x dan y, itu adalah data yang Anda gunakan agar sesuai dengan regresi terpisah.
Gavin Simpson
8

Pertanyaan pertama sebenarnya dari geometri. Jika Anda memiliki dua baris formulir:

y=a1x+b1
y=Sebuah2x+b2

Sebuah1=Sebuah2

berjemurα=Sebuah1αxSebuah1

α=ArktanSebuah1

2π=360

α=ArktanSebuah13602π.

Arktanatan

Contoh kode R:

> 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 

Baris terakhir adalah derajat.

Sebuah1

α=180-ArktanSebuah13602π.

Catatan. Meskipun menyenangkan bagi saya untuk mengingat trigonometri sekolah menengah, jawaban yang sangat berguna adalah yang diberikan oleh Gavin Simpson. Karena kemiringan garis regresi adalah variabel acak, untuk membandingkannya, kerangka hipotesis statistik harus digunakan.

mpiktas
sumber
Terima kasih! bagaimana cara mendapatkan kemiringan dari regresi? apakah saya harus mendapatkan koefisien dan mencegat?
Dail
mungkin regresi linier mengembalikan derajat langsung dengan beberapa fungsi?
Dail
mengatakan degress = +45 dan degress = -315 bukan baris yang sama? Bagaimana tidak berbicara tentang baris yang sama?
Dail
1

... menindaklanjuti jawaban @mpiktas, berikut ini cara mengekstrak kemiringan dari lmobjek dan menerapkan rumus di atas.

# 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 
Roman Luštrik
sumber
terima kasih banyak untuk contohnya, dalam hal ini derajat -200?
Dail
Iya. Jika Anda merasa masalah Anda telah terpecahkan, centang jawaban @mpiktas sebagai yang benar, terima kasih.
Roman Luštrik
2π
1
@ RomanLuštrik, saya telah memperbaiki kode dan menambahkan output yang benar. Jangan ragu untuk menghapus koreksi.
mpiktas