Statistical-Significance

如何測試同一模型中的兩個參數估計值是否顯著不同?

  • December 24, 2018

我有模型

$$ y=x^a \times z^b + e $$

在哪裡 $ y $ 是因變量, $ x $ 和 $ z $ 是解釋變量, $ a $ 和 $ b $ 是參數和 $ e $ 是一個錯誤術語。我有參數估計 $ a $ 和 $ b $ 以及這些估計的協方差矩陣。我如何測試是否 $ a $ 和 $ b $ 有顯著不同?

評估假設 $ a $ 和 $ b $ 不同等於檢驗原假設 $ a - b = 0 $ (反對替代方案 $ a-b\ne 0 $ )。

以下分析假設您估計是合理的 $ a-b $ 作為$$ U = \hat a - \hat b. $$ 它還接受您的模型公式(通常是一個合理的公式),因為誤差是相加的(甚至可能產生負觀測值 $ y $ )——不允許我們通過取兩邊的對數來線性化它。

的方差 $ U $ 可以用協方差矩陣表示 $ (c_{ij}) $ 的 $ (\hat a, \hat b) $ 作為

$$ \operatorname{Var}(U) = \operatorname{Var}(\hat a - \hat b) = \operatorname{Var}(\hat a) + \operatorname{Var}(\hat b) - 2 \operatorname{Cov}(\hat a, \hat b) = c_{11} + c_{22} - 2c_{12}^2. $$

什麼時候 $ (\hat a, \hat b) $ 用最小二乘估計,通常使用“t檢驗”;也就是說,分佈 $$ t = U / \sqrt{\operatorname{Var(U)}} $$由Student t 分佈近似,其中 $ n-2 $ 自由度(其中 $ n $ 是數據計數和 $ 2 $ 計算係數的數量)。不管, $ t $ 通常是任何測試的基礎。您可以執行 Z 測試(當 $ n $ 例如,很大或在擬合最大似然時)或引導它。

具體來說,t 檢驗的 p 值由下式給出

$$ p = 2t_{n-2}(-|t|) $$

在哪裡 $ t_{n-2} $ 是學生 t(累積)分佈函數。它是“尾部區域”的一種表達方式:學生 t 變量(的 $ n-2 $ 自由度)等於或超過檢驗統計量的大小, $ |t|. $


更一般地,對於數字 $ c_1, $ $ c_2, $ 和 $ \mu $ 您可以使用完全相同的方法來檢驗任何假設

$$ H_0: c_1 a + c_2 b = \mu $$

反對雙向選擇。(這包括“對比”的特殊但普遍的情況。)使用估計的方差-協方差矩陣 $ (c_{ij}) $ 估計方差 $ U = c_1 a + c_2 b $ 並形成統計量

$$ t = (c_1 \hat a + c_2 \hat b - \mu) / \sqrt{\operatorname{Var}(U)}. $$

上述情況是這樣的 $ (c_1,c_2) = (1,-1) $ 和 $ \mu=0. $


**為了檢查這個建議是否正確,**我運行了以下R代碼來根據這個模型創建數據(帶有正態分佈的錯誤e),擬合它們,併計算 $ t $ 多次。檢查是概率圖 $ t $ (基於假設的學生 t 分佈)緊跟對角線。這是尺寸模擬中的情節 $ 500 $ 在哪裡 $ n=5 $ (一個非常小的數據集,選擇是因為 $ t $ 分佈遠非正常)和 $ a=b=-1/2. $

概率圖

至少在這個例子中,該過程運行良好。 考慮使用參數重新運行模擬 $ a, $ $ b, $ $ \sigma $ (誤差標準差),和 $ n $ 反映你的情況。

這是代碼。

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

引用自:https://stats.stackexchange.com/questions/384362

comments powered by Disqus