Mengubah hipotesis nol dalam regresi linier


18

Saya memiliki beberapa data yang sangat berkorelasi. Jika saya menjalankan regresi linier, saya mendapatkan garis regresi dengan kemiringan mendekati satu (= 0,93). Yang ingin saya lakukan adalah menguji apakah kemiringan ini sangat berbeda dari 1,0. Harapan saya adalah tidak. Dengan kata lain, saya ingin mengubah hipotesis nol dari regresi linier dari kemiringan nol ke kemiringan satu. Apakah ini pendekatan yang masuk akal? Saya juga sangat menghargai Anda bisa memasukkan beberapa kode R dalam jawaban Anda sehingga saya bisa menerapkan metode ini (atau yang lebih baik Anda sarankan!). Terima kasih.

Jawaban:


11
set.seed(20); y = rnorm(20); x = y + rnorm(20, 0, 0.2) # generate correlated data
summary(lm(y ~ x))                  # original model
summary(lm(y ~ x, offset= 1.00*x))  # testing against slope=1
summary(lm(y-x ~ x))                # testing against slope=1

Output:

            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.01532    0.04728   0.324     0.75    
x            0.91424    0.04128  22.148 1.64e-14 ***

 

            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  0.01532    0.04728   0.324   0.7497  
x           -0.08576    0.04128  -2.078   0.0523 .

 

            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  0.01532    0.04728   0.324   0.7497  
x           -0.08576    0.04128  -2.078   0.0523 .

Terima kasih! Saya hanya tidak tahu bagaimana cara mengubah perintah lm.
Nick Crawford

Lalu apakah persis sama "lm (yx ~ x)" dari "lm (y ~ x, offset = 1,00 * x)" (atau tanpa itu 1,00)? Bukankah substraksi itu akan bermasalah dengan asumsi untuk kuadrat terkecil atau dengan collinearity? Saya ingin menggunakannya untuk regresi logistik dengan efek acak glmer (....). Akan bagus jika memiliki metode yang sederhana namun benar untuk mendapatkan nilai-p.
skan

Di sini stats.stackexchange.com/questions/111559/... Matifou mengatakan metode ini lebih buruk daripada menggunakan Wald dalam tes.
skan

7

Rβ=rβRr

y=β0+β1x+kamu

β1=0R=[0,1]r=1

Untuk jenis hipotesis ini, Anda dapat menggunakan linearHypothesisfungsi dari paket mobil :

set.seed(20); y = rnorm(20); x = y + rnorm(20, 0, 0.2) # generate correlated data
mod <- lm(y ~ x))                  # original model


> linearHypothesis(mod,matrix(c(0,1),nrow=1),rhs=c(1))
Linear hypothesis test

Hypothesis:
x = 1

Model 1: restricted model
Model 2: y ~ x

  Res.Df     RSS Df Sum of Sq      F  Pr(>F)  
1     19 0.96022                              
2     18 0.77450  1   0.18572 4.3162 0.05234 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Apakah ini dapat digunakan untuk tes satu sisi?
jpmath

6

Tampaknya Anda masih berusaha menolak hipotesis nol. Ada banyak masalah dengan itu, tidak sedikit dari itu adalah bahwa mungkin Anda tidak memiliki kekuatan yang cukup untuk melihat bahwa Anda berbeda dari 1. Sepertinya Anda tidak peduli bahwa kemiringan 0,07 berbeda dari 1. Tetapi bagaimana jika Anda benar-benar tidak tahu? Bagaimana jika Anda benar-benar memperkirakan kemiringan yang sangat bervariasi dan mungkin sebenarnya jauh dari 1 dengan sesuatu seperti interval kepercayaan ± 0,4. Taktik terbaik Anda di sini bukan mengubah hipotesis nol tetapi sebenarnya berbicara tentang perkiraan interval. Jika Anda menerapkan perintah confint () ke model Anda, Anda bisa mendapatkan interval kepercayaan 95% di sekitar kemiringan Anda. Kemudian Anda dapat menggunakan ini untuk membahas kemiringan yang Anda dapatkan. Jika 1 berada dalam interval kepercayaan Anda dapat menyatakan bahwa itu berada dalam kisaran nilai yang Anda yakini mengandung nilai sebenarnya. Tetapi yang lebih penting Anda juga bisa menyatakan kisaran nilai itu.


3

Titik pengujian adalah bahwa Anda ingin menolak hipotesis nol Anda, bukan mengkonfirmasinya. Fakta bahwa tidak ada perbedaan yang signifikan, sama sekali bukan bukti dari tidak adanya perbedaan yang signifikan. Untuk itu, Anda harus menentukan ukuran efek apa yang Anda anggap wajar untuk menolak nol.

slHaihale-1

set.seed(20); y = rnorm(20); x = y + rnorm(20, 0, 0.2)
model <- lm(y~x)

coefx <- coef(summary(model))[2,1]
seslope <- coef(summary(model))[2,2]
DF <- model$df.residual

# normal test
p <- (1 - pt(coefx/seslope,DF) )*2
# test whether different from 1
p2 <- (1 - pt(abs(coefx-1)/seslope,DF) )*2

Sekarang Anda harus menyadari fakta bahwa ukuran efek yang menjadi perbedaan signifikan adalah

> qt(0.975,DF)*seslope
[1] 0.08672358

asalkan kita memiliki penduga yang layak untuk kesalahan standar pada lereng. Oleh karena itu, jika Anda memutuskan bahwa perbedaan yang signifikan hanya terdeteksi dari 0,1, Anda dapat menghitung DF yang diperlukan sebagai berikut:

optimize(
    function(x)abs(qt(0.975,x)*seslope - 0.1),
    interval=c(5,500)
) 
$minimum
[1] 6.2593

Pikiran Anda, ini sangat tergantung pada perkiraan seslope. Untuk mendapatkan perkiraan yang lebih baik pada seslope, Anda bisa melakukan resampling data Anda. Cara yang naif adalah:

n <- length(y)
seslope2 <-
  mean(
    replicate(n,{
      id <- sample(seq.int(n),1)
      model <- lm(y[-id]~x[-id])
      coef(summary(model))[2,2]
    })
  )

menempatkan seslope2 di fungsi optimisasi, mengembalikan:

$minimum
[1] 6.954609

Semua ini akan memberi tahu Anda bahwa dataset Anda akan mengembalikan hasil yang signifikan lebih cepat dari yang Anda anggap perlu, dan bahwa Anda hanya perlu 7 derajat kebebasan (dalam hal ini 9 pengamatan) jika Anda ingin memastikan bahwa non-signifikan berarti apa yang Anda inginkan cara.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.