r - 通过在 R 中设置标准来查找输出?
问题描述
对于一组输入(见下文),当我运行以下 R 代码时,我得到两个存储在ncp
. ncp
现在假设我希望(ie, abs(ncp[2] - ncp[1])
) 中的两个答案之间的差异为1.4
。
在这种情况下,是否可以改为求解最小的可能df
(当前df
在输入中)?
alpha = c(.025, .975); df = 29; q = 3 # The input
f <- function(ncp, alpha, q, df){ # Notice `ncp` is the unknown
alpha - suppressWarnings(pt(q, df, ncp, lower.tail = FALSE)) # The function
}
ncp <- sapply(c(alpha[1], alpha[2]), # Root finding: finds `ncp`
function(x) uniroot(f, c(-q, q+15), alpha = x, q = q, df = df)[[1]])
解决方案
由于您将其余所有内容保持不变,因此我们可以编写一个ncp
只接受参数的函数df
ncp=function(df){
sapply(c(alpha[1], alpha[2]), # Root finding
function(x) uniroot(f, c(-q, q+15), alpha = x, q = q, df = df)[[1]]/sqrt(30))
}
ncp(29)
[1] 0.1592547 0.9280011
在此之后,您可以编写一个函数来获取 ncp 值的绝对差,我们将减去
m=function(df,y=0){
abs(abs(diff(ncp(df)))-y)
}
简而言之,m(df,0)
给出与零相比的绝对差异。而m(df,0.4)
将是 ncp 值的绝对差 - 0.4。我们的目标是最小化这个绝对值差异和 y。我将对此进行详细说明。
在使用相应的 y 值最小化 m 函数时:
例如,让我们尝试找出df
所有其余部分(alpha 和 q)保持不变,使得 ncp 值的绝对差为 1:
(a=optimise(m,c(1,100000),y=1))#default for minimization ie maximum=FALSE
$`minimum`
[1] 4.415955
$objective
[1] 3.798379e-08
目标值为 0,因此我们确实找到了正确的 df 值,因为我们正在最小化。
ncp(a$minimum)
[1] 0.03385211 1.03385215
从上面的 ncp 值,yu 可以看出这两个值之间的差确实是 1。因此 df=4.415955 将给我们 ncp 与上述 alpha 和 q 值的绝对差为 1
b=ncp(a$minimum)
abs(b[2]-b[1])
[1] 1
所以我也可以这样做:
m(a$minimum)
[1] 1
我倾向于相信现在很清楚 y 代表的论点是什么m
。
现在要找到 0.4 的差异,我们只需做同样的事情:
optimise(m,c(1,1000000),y=0.4,maximum = F)
$`minimum`
[1] 1e+06
$objective
[1] 0.315684
至于这个,我们看到目标值不为零,所以我们没有收敛。即使我们要扩大范围,目标也不会改变。这意味着最小的差异是objective(0.315684) +0.4 =0.715684
.. 这是具有此 alpha 和 q 的 ncp 值的最小绝对差异。IE
m(Inf)
[1] 0.7156824
所以我们不能有 0.4 的绝对差,但是如果我们改变 alpha 和 q,我们会得到 0.4 的绝对差
对于所有y
这样的值m(Inf)<y<m(1)
,我们将得到一个满足条件的df
推荐阅读
- google-cloud-platform - Google Cloud Platform - 将端口转发到多个 SQL 实例
- python - 从 docker 上的 tensorflow_serving 请求时出现错误 400
- visual-studio - 跟踪私有 NuGet 包中代码依赖关系的最佳实践
- git - 使用 README 初始化你的 repo 是否意味着你不能从本地 repo 推送?
- android - 如何测试订阅“in_app_purchase”?
- php - 如何将字符串写入 ZipArchive 流
- vb.net - 使用 VB.Net 从阿拉伯语文本中删除空格和新行
- php - 如何在PHP中以时间间隔显示列表
- go - Helm sprig 模板管道和/或否定
- python - 如何更改VScode中变量的颜色?