如何在 R 的 qt 函数中使用 ncp 参数?



我正在使用R进行一些计算。这个问题是关于R的,也是关于统计学的。

假设我有一个配对样本的数据集,其中包括一名受试者在注射安慰剂后的血小板浓度,以及许多受试者注射药物后的血小板密度。我想估计成对样本的平均差。我只是在学习t分布。如果我想使用Z检验来确定平均差的95%置信区间,我可以简单地使用:

mydata$diff <- mydata$medication - mydata$placebo
mu0 <- mean(mydata$diff)
sdmu <- sd(mydata$diff) / sqrt(length(mydata$diff))
qnorm(c(0.025, 0.975), mu, sdmu)

经过多次混淆和与t.test函数的交叉检查,我发现我可以用获得t检验的95%置信区间

qt(c(0.025, 0.975), df=19) * sdmu + mu0

我对此的理解如下:

Tstatistic = (mu - mu0)/sdmu
Tcdf^-1(0.025) <= (mu - mu0) / sdmu <= Tcdf^-1(0.975)
=>
sdmu * Tcdf^-1(0.025) + mu0 <= mu <= sdmu * Tcdf^-1(0.975) + mu0

令人困惑的原因是,如果我使用Z测试,我会这样写:

qnorm(c(0.025, 0.975), mu0, sdmu)

直到我试图弄清楚如何使用t分布,我才意识到我也可以将正态分布参数移出函数:

qnorm(c(0.025, 0.975), 0, 1) * sdmu + mu0

我试着理解这在数学上意味着什么,这意味着Z统计量(mu-mu0(/sdmu总是正态分布,平均值为0,标准偏差为1?

让我困惑的是,我想把t分布参数转移到函数的自变量中,以减少思考这种转换的巨大心理开销。

然而,根据我版本的R函数qt的文档,为了做到这一点,我需要计算非中心性参数ncp。根据(我的版本(文件,ncp的解释如下:

Let T= (mX - m0) / (S/sqrt(n)) where mX is the mean and S the sample standard deviation (sd) of X_1, X_2, …, X_n which are i.i.d. N(μ, σ^2) Then T is distributed as non-central t with df= n - 1 degrees of freedom and non-centrality parameter ncp = (μ - m0) * sqrt(n)/σ.

我一点都无法理解。起初,它似乎适合我的框架,因为Tstatistic = (mu - m0) / sdmu。但是μ不是我想要的qt函数(即Tcdf-1(返回吗?它怎么会出现在我需要作为输入的ncp中?σ呢?μ和σ在这种情况下是什么意思?

基本上,在函数调用之外没有任何术语的情况下,我如何才能获得与qt(c(0.025, 0.975), df=19) * sdmu + mu0相同的结果?我能解释一下它是如何工作的吗?

让我试着在不使用任何公式的情况下进行解释。

首先,学生t分布和正态分布是两种不同的概率分布,(在大多数情况下(不应该给你相同的结果。

t分布是测试两个正态分布样本之间差异的适当概率分布。由于我们不知道人口sd,我们必须坚持从样本中得到的数据。这种分布不再是正态分布,而是t-分布。

z分布可用于近似测试。在这种情况下,我们使用z分布作为t分布的近似值。但是,建议不要在自由度较低的情况下进行此操作。原因:t分布的自由度越高,它就越像正态分布。教科书通常说,t和df>30的正态分布足够相似,可以用正态分布近似t。为了做到这一点,首先必须对数据进行归一化,使mean=0,sd=1。然后可以使用z分布进行近似。

我通常建议而不是使用此近似值。当必须用你的头、笔和一堆表格在纸上进行计算时,这是一个合理的支撑。在基本统计中存在许多变通方法,它们本应以较少的计算工作量为您提供合理的结果。现代计算机通常是过时的(至少在大多数情况下(。

顺便说一句,z分布(按惯例(定义为正态分布N(0,1(,即均值为0且sd为1的正态分布。

最后,关于指定这些分布的不同方式。正态分布实际上是我所知道的唯一可以通过直接设置mean和sd来指定的概率分布(如果你感兴趣的话,有几十种分布(。非中心性参数的影响与正态分布的平均值相似。在图中,它沿着x轴移动t分布。但它也改变了形状并使其倾斜,使mean和ncp相互远离。

该代码将显示ncp如何改变t-分布的形状和位置:

x <- seq(-5, 15, 0.1)
plot(x, dt(x, df = 10, ncp = 0), from = -4, to = +4, type = "l")
for(ncp in 1:6)
lines(x, dt(x, df = 10, ncp = ncp))

最新更新