我试图在效果大小周围找到置信区间。为此,我需要找到与 t 分布相关的非中心性参数,相对于相应的 t 统计量,概率为0.025和0.975(参见here for更多细节)。
我的问题是找到正确的非中心性参数的最有效方法是什么?我目前的解决方案是蛮力方法(实际上是作者推荐的)。例如
# test data
d <- c(1.73, 1.06, 2.03, 1.40, 0.95, 1.13, 1.41, 1.73, 1.63, 1.56)
# t-test of difference from 1
t_test <- t.test(d, rep(1, length(d)))
# calculate probability of the t stat with many ncps
prob <- mapply(pt, t_test$statistic, t_test$parameter, seq(-15, 15, length = 1e4))
probs <- data.frame(ncp = seq(-15, 15, length = 1e4), prob = prob)
probs$upper <- 0.025 - probs[ ,2]
probs$lower <- 0.975 - probs[ ,2]
# find ncp for upper bound
probs[which.min(abs(probs$upper)), 1]
## [1] 7.007201
# find ncp for lower bound
probs[which.min(abs(probs$lower)), 1]
## [1] 1.471647
这些是正确的,但似乎应该有更有效的方法。有什么想法吗?
答案 0 :(得分:0)
这对我来说看起来像是统计上的胡言乱语,就像做后期权力分析的无用任务一样。但我认为可以轻松地将这两个计算设置为优化调用,尽管这个练习的实用性最小:
> optim( par =c( x=1),
function( ncp) abs(0.025-pt(t_test$statistic, t_test$parameter, ncp) ))
$par
x
7.007642
$value
[1] 2.925137e-08
$counts
function gradient
56 NA
$convergence
[1] 0
$message
NULL
Warning message:
In optim(par = c(x = 1),
function(ncp) abs(0.025 - pt(t_test$statistic, :
one-dimensional optimization by Nelder-Mead is unreliable:
use "Brent" or optimize() directly
> optim( par =c( x=1),
function( ncp) abs(0.975-pt(t_test$statistic, t_test$parameter, ncp) ))
$par
x
1.472336
$value
[1] 1.113777e-10
$counts
function gradient
56 NA
$convergence
[1] 0
$message
NULL