预测异方差数据的方差


15

我正在尝试对异方差数据进行回归分析,以预测线性模型中的误差方差和均值。像这样:

y(x,t)=y¯(x,t)+ξ(x,t),ξ(x,t)N(0,σ(x,t)),y¯(x,t)=y0+ax+bt,σ(x,t)=σ0+cx+dt.

换句话说,数据包括在和各种值下重复测量。我假设这些测量值是“真实”平均值,它是和的线性函数,加性高斯噪声的标准偏差(或方差,我还没有决定)也线性地取决于。(我可以允许对和进行更复杂的依赖-线性形式没有很强的理论动机-但我不希望在现阶段使事情复杂化。)X ˉ ÝX X ξ X X X y(x,t)xty¯(x,t)xtξ(x,t)x,txt

我知道这里的搜索词是“异方差”,但是到目前为止,我所能找到的只是关于如何减少/删除它以更好地预测,但是在尝试预测方面却没有在自变量方面。我想以置信区间(或贝叶斯等效项)估算和,如果在SPSS中有一种简便的方法,那就更好了!我该怎么办?谢谢。y¯ ÿ 0一个b σ 0Ç dσy0,a,b,σ0,cd


请参阅此相关问题以获取一些参考,方差是参数的函数
Andy W

您尝试过GARCH吗?
Aksakal)

广义线性模型是处理您的问题的分支。有一本标题相同的书,非常推荐。
迭戈

Answers:


1

我认为您的第一个问题是不再是正态分布,如何将数据转换为纯正数取决于确切的是。例如,如果,则误差为比例类型,应在回归之前采用y数据的对数,或者从普通最小二乘(OLS)调整回归)转换为权重为最小二乘(将回归更改为最小比例类型错误)。同样,如果,则必须取对数的对数并将其倒数。 σ X σ X = 一个X + b 1 / Ý 2 σ X = Ë 一个X + b N(0,σ(x,t))σ(x,t)σ(x,t)=ax+bt1/y2σ(x,t)=eax+bt

我认为错误类型的预测覆盖率不高的原因是,首先进行任何旧回归(gro吟,通常是普通最小二乘法,OLS)。然后从残差图(即)观察残差形状,然后绘制数据的频率直方图,然后进行观察。然后,如果残差是向右打开的扇形光束,则尝试比例数据建模,如果直方图看起来像是指数衰减,则可以尝试平方,平方,乘幂等的倒数,等。 ,取指数y。1 / ymodely1/y

现在,这只是个简短的故事。较长的版本包括更多类型的回归,包括Theil中位数回归,Deming二元回归和用于最小化不适定问题的误差的回归,这些回归与最小化传播误差没有特别的曲线拟合度关系。最后一个是个弥天大谎,但是,看到这个举个例子。因此,一个人试图获得的答案有很大的不同。通常,如果要在变量之间建立关系,则常规的OLS不是首选方法,而Theil回归将是对此的快速而肮脏的改进。OLS仅在y方向上最小,因此斜率太浅,截距太大,无法确定变量之间的基本关系。换句话说,OLS给出给定x的ay的最小误差估计,它没有给出x随y的变化的估计。当r值很高(0.99999+)时,回归使用的值几乎没有差别,并且y中的OLS与x中的OLS大致相同,但是,当r值较低时,y中的OLS与X中的OLS。

总而言之,很大程度上取决于一开始进行回归分析的动机是什么。这决定了所需的数值方法。做出选择之后,残差便具有与回归目的相关的结构,需要在更大的背景下进行分析。


0

STATS BREUSCH PAGAN扩展命令既可以测试残差的异方差性,又可以根据某些或所有回归变量来估计残差。


0

解决此类问题的一般方法是使数据的(正规化)可能性最大化

LL(y0,a,b,σ0,c,d)=i=1nlogϕ(yi,y0+axi+bti,σ0+cxi+dti)
ϕ(x,μ,σ)=12πσe(xμ)22σ2

θ^θ=(y0,a,b,σ0,c,d)

Hθnθ^H1

这是Python中的示例代码:

import scipy
import numpy as np

# generate toy data for the problem
np.random.seed(1) # fix random seed
n = 1000 # fix problem size
x = np.random.normal(size=n)
t = np.random.normal(size=n)
mean = 1 + x * 2 + t * 3
std = 4 + x * 0.5 + t * 0.6
y = np.random.normal(size=n, loc=mean, scale=std)

# create negative log likelihood
def neg_log_lik(theta):
    est_mean = theta[0] + x * theta[1] + t * theta[2]
    est_std = np.maximum(theta[3] + x * theta[4] + t * theta[5], 1e-10)
    return -sum(scipy.stats.norm.logpdf(y, loc=est_mean, scale=est_std))

# maximize
initial = np.array([0,0,0,1,0,0])
result = scipy.optimize.minimize(neg_log_lik, initial)
# extract point estimation
param = result.x
print(param)
# extract standard error for confidence intervals
std_error = np.sqrt(np.diag(result.hess_inv))
print(std_error)

σσ1010

该代码产生的结果(参数估计值及其标准误差)为:

[ 0.8724218   1.75510897  2.87661843  3.88917283  0.63696726  0.5788625 ]
[ 0.15073344  0.07351353  0.09515104  0.08086239  0.08422978  0.0853192 ]

您可以看到估计值接近其真实值,这证实了此模拟的正确性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.