首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R(优化问题)中使用优化函数(优化)和dbinom

在R(优化问题)中使用优化函数(优化)和dbinom
EN

Stack Overflow用户
提问于 2016-10-26 18:11:09
回答 1查看 101关注 0票数 0

当p= 0.5,n=5和x=3时

代码语言:javascript
复制
dbinom(3,5,0.5) = 0.3125

让我说我不知道p (n和x是已知的)并且想找到它。

代码语言:javascript
复制
binp <- function(bp) dbinom(3,5,bp) - 0.3125
optimise(binp, c(0,1))

它不返回0.5。还有,为什么

代码语言:javascript
复制
dbinom(3,5,0.5) == 0.3125 #FALSE

但,

代码语言:javascript
复制
x <- dbinom(3,5,0.5)
x == dbinom(3,5,0.5) #TRUE
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-26 19:12:10

optimize()搜索最小化函数输出的参数。函数可以返回一个负值(例如,binp(0.1)-0.3044)。如果您搜索将差从零降到最小的参数,那么最好使用sqrt((...)^2)。如果您想要使输出为零的参数,uniroot将帮助您。你想要的东西并不是唯一决定的。(注:x <- dbinom(3, 5, 0.5); x == dbinom(3, 5, 0.5)等同于dbinom(3, 5, 0.5) == dbinom(3, 5, 0.5))

代码语言:javascript
复制
 ## check output of dbinom(3, 5, prob)
input <- seq(0, 1, 0.001)
output <- Vectorize(dbinom, "prob")(3, 5, input)
plot(input, output, type="l")
abline(h = dbinom(3, 5, 0.5), col = 2)     # there are two answers

代码语言:javascript
复制
max <- optimize(function(x) dbinom(3, 5, x), c(0, 1), maximum = T)$maximum  # [1] 0.6000006

binp <- function(bp) dbinom(3,5,bp) - 0.3125   # your function

uniroot(binp, c(0, max))$root # [1] 0.5000036
uniroot(binp, c(max, 1))$root # [1] 0.6946854


binp2 <- function(bp) sqrt((dbinom(3,5,bp) - 0.3125)^2)

optimize(binp2, c(0, max))$minimum  # [1] 0.499986
optimize(binp2, c(max, 1))$minimum  # [1] 0.6947186


dbinom(3, 5, 0.5) == 0.3125            # [1] FALSE
round(dbinom(3, 5, 0.5), 4) == 0.3125  # [1] TRUE
format(dbinom(3, 5, 0.5), digits = 16) # [1] "0.3124999999999999"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40269365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档