Bagaimana saya bisa menguji jika dua estimasi parameter dalam model yang sama berbeda secara signifikan?

12

Saya punya modelnya

y=xa×zb+e

di mana adalah variabel dependen, dan adalah variabel penjelas, dan adalah parameter dan adalah istilah kesalahan. Saya memiliki estimasi parameter dan dan matriks kovarian dari estimasi ini. Bagaimana saya menguji apakah dan berbeda secara signifikan?yxzabeabab

K. Roelofs
sumber

Jawaban:

16

Menilai hipotesis bahwa dan berbeda sama dengan menguji hipotesis nolabab=0 (terhadap alternatif yang ).ab0

Analisis berikut ini menganggap wajar bagi Anda untuk memperkirakan sebagai Ia juga menerima formulasi model Anda (yang seringkali masuk akal), yang - karena kesalahannya bersifat aditif (dan bahkan bisa menghasilkan nilai observasi negatif ) - tidak mengizinkan kami untuk membuat garis itu dengan mengambil logaritma dari kedua belah pihak.ab

U=a^b^.
yy

Varians dari dapat diekspresikan dalam bentuk matriks kovarians dari sebagaiU(cij)(a^,b^)

Var(U)=Var(a^b^)=Var(a^)+Var(b^)2Cov(a^,b^)=c11+c222c122.

Ketika adalah diperkirakan dengan kuadrat, satu biasanya menggunakan "uji t;" yaitu, distribusi diperkirakan oleh distribusi t Student dengan derajat kebebasan (di mana adalah jumlah data dan menghitung jumlah koefisien) ). Apapun, biasanya merupakan dasar dari setiap tes. Anda dapat melakukan tes Z (ketika besar atau ketika pas dengan Kemungkinan Maksimum) atau bootstrapnya, misalnya.(a^,b^)t = U /

t=U/Var(U)
n-2n2tnn2n2tn

Untuk lebih spesifik, nilai p dari uji t diberikan oleh

p=2tn2(|t|)

di mana adalah fungsi distribusi Student t (kumulatif). Ini adalah satu ungkapan untuk "area ekor:" kesempatan bahwa variabel t Student (dari derajat kebebasan) sama dengan atau melebihi ukuran statistik uji,tn2n2|t|.


Secara umum, untuk angka dan Anda dapat menggunakan pendekatan yang persis sama untuk menguji hipotesis apa punc1, c2,μ

H0:c1a+c2b=μ

terhadap alternatif dua sisi. (Ini mencakup kasus "kontras" khusus tetapi luas .) Gunakan matriks varians-kovarians yang diperkirakan untuk memperkirakan varians dari dan membentuk statistik(cij)U=c1a+c2b

t=(c1a^+c2b^μ)/Var(U).

Di atas adalah case dan(c1,c2)=(1,1)μ=0.


Untuk memeriksa apakah saran ini benar, saya menjalankan Rkode berikut untuk membuat data sesuai dengan model ini (dengan kesalahan yang terdistribusi secara normal e), cocok dengan mereka, dan menghitung nilai berkali-kali. Ceknya adalah bahwa plot probabilitas (berdasarkan distribusi t Student yang diasumsikan) erat mengikuti diagonal. Berikut adalah plot dalam simulasi ukuran mana (dataset yang sangat kecil, dipilih karena distribusi jauh dari Normal) dantt500n=5ta=b=1/2.

Plot probabilitas

Dalam contoh ini, setidaknya, prosedur ini bekerja dengan baik. Pertimbangkan untuk menjalankan kembali simulasi menggunakan parameter (standar deviasi kesalahan), dan yang mencerminkan situasi Anda.a, b, σn

Ini kodenya.

#
# Specify the true parameters.
#
set.seed(17)
a <- -1/2
b <- -1/2
sigma <- 0.25 # Variance of the errors
n <- 5        # Sample size
n.sim <- 500  # Simulation size
#
# Specify the hypothesis.
#
H.0 <- c(1, -1) # Coefficients of `a` and `b`.
mu <- 0 
#
# Provide x and z values in terms of their logarithms.
#
log.x <- log(rexp(n))
log.z <- log(rexp(n))
#
# Compute y without error.
#
y.0 <- exp(a * log.x + b * log.z)
#
# Conduct a simulation to estimate the sampling distribution of the t statistic.
#
sim <- replicate(n.sim, {
  #
  # Add the errors.
  #
  e <- rnorm(n, 0, sigma)
  df <- data.frame(log.x=log.x, log.z=log.z, y.0, y=y.0 + e)
  #
  # Guess the solution.
  #
  fit.ols <- lm(log(y) ~ log.x + log.z - 1, subset(df, y > 0))
  start <- coefficients(fit.ols) # Initial values of (a.hat, b.hat)
  #
  # Polish it using nonlinear least squares.
  #
  fit <- nls(y ~ exp(a * log.x + b * log.z), df, list(a=start[1], b=start[2]))
  #
  # Test a hypothesis.
  #
  cc <- vcov(fit)
  s <- sqrt((H.0 %*% cc %*% H.0))
  (crossprod(H.0, coef(fit)) - mu) / s
})
#
# Display the simulation results.
#
summary(lm(sort(sim) ~ 0 + ppoints(length(sim))))
qqplot(qt(ppoints(length(sim)), df=n-2), sim, 
       pch=21, bg="#00000010", col="#00000040",
       xlab="Student t reference value", 
       ylab="Test statistic")
abline(0:1, col="Red", lwd=2)
whuber
sumber
2
Ini luar biasa. Jawabannya dengan teori, dengan langkah-langkah yang harus diikuti untuk mengulangi untuk tes lain, dengan pendekatan numerik untuk kejelasan, dan dengan kode. Ini adalah standar emas.
SecretAgentMan
1
Saya menemukan " The hipotesis bahwa a dan b adalah berbeda" ambigu dalam kalimat pembuka, karena tidak jelas apakah itu adalah nol atau hipotesis alternatif. Pertanyaan OP memperjelas mereka mencari bukti perbedaan, dan klausa kedua kalimat Anda berbicara tentang itu. Secara pedagogis saya pikir ini membantu orang yang lebih baru untuk pengujian hipotesis menjadi sangat eksplisit. (Tapi +1 untuk jawaban Anda secara keseluruhan :)
Alexis
1
@Alexis terima kasih - Saya mengerti apa yang Anda katakan. Karena saya memiliki orang-orang seperti itu dalam pikiran, saya akan mengklarifikasi.
Whuber