-1 到 1 之间的随机数总和为 0 [关闭]

2023-11-25

用R,如何生成n随机数x_1, ..., x_n位于之间-1 and 1总和为0?

推广到另一个总和和另一个范围怎么样?


简单解决第一个问题

这是第一个问题的简单解决方案。 模拟u_1, ..., u_n之间-1 and 1。 然后设置x_1 = (u_1-u_n)/2, x_2 = (u_2-u_1)/2, x_3 = (u_3-u_2)/2, ..., x_n = (u_n-u_{n-1})/2.

n <- 10L
u <- runif(n, -1, 1)
x <- c(u[1L]-u[n], diff(u)) / 2
sum(x)
summary(x)

推广到任意总和

现在,如何生成n随机数x_1, ..., x_n位于之间-1 and 1和给定的数字s(之间-n and n)?

像以前一样进行,但减去s/n to the u_i并添加s/n to the x_i:

s <- 3
n <- 10L
u <- runif(n, -1, 1) - s/n
x <- c(u[1L]-u[n], diff(u))/2 + s/n
sum(x)
summary(x)

泛化到任意范围?

现在,如何生成n随机数x_1, ..., x_n位于两个给定数字之间a and b和给定的数字s(之间n*a and n*b)?

前面的方法可以推广到这种情况a = -b:

a <- -4; b <- 4; s <- 10
n <- 10L
u <- runif(n, -(b-a)/2, (b-a)/2) - s/n
x <- c(u[1L]-u[n], diff(u))/2 + s/n
sum(x)
summary(x)

最后是DRS算法

The 狄利克雷重缩放算法解决任意数字对的最后一个问题a < b.

此外,模拟向量(x_1, ..., x_n)均匀分布 on the (n-1)维流形{sum x_i = s}, a <= x_i <= b.

这是一个 R 实现,改编自 Roger Stafford 编写的 Matlab 实现(代码中给出的参考)。

# adapted from Roger Stafford's Matlab implementation
# Roger Stafford (2023). Random Vectors with Fixed Sum (https://www.mathworks.com/matlabcentral/fileexchange/9700-random-vectors-with-fixed-sum), MATLAB Central File Exchange. Retrieved March 23, 2023.
DRS <- function(n, s, a, b) {
  n <- as.integer(n)
  if(s < n*a || s > n*b || a >= b) {
    stop("Invalid parameters.")
  }
  # Rescale to a unit cube: 0 <= x(i) <= 1
  s <- (s - n*a) / (b - a)
  # Construct the transition probability table, t.
  #   t(i,j) will be used only in the region where j <= i + 1.
  k <- max(min(as.integer(floor(s)), n-1L), 0L) # Must have 0 <= k <= n-1
  s <- max(min(s, k+1L), k)                     # Must have k <= s <= k+1
  s1 <- s - (k:(k-n+1L))   # s1 will never be negative
  s2 <- ((k+n):(k+1L)) - s # s2 will never be negative
  w <- matrix(0, nrow = n, ncol = n+1L)
  w[1L, 2L] <- .Machine$double.xmax # Scale for full 'double' range
  t <- matrix(0, nrow = n-1L, ncol = n)
  tiny <- .Machine$double.eps # The smallest positive 'double' 
  for(i in 2L:n) {
    tmp1 <- w[i-1L, 2L:(i+1L)] * s1[1L:i] / i
    tmp2 <- w[i-1L, 1L:i] * s2[(n-i+1L):n] / i
    w[i, 2L:(i+1L)] <- tmp1 + tmp2
    tmp3 <- w[i, 2L:(i+1L)] + tiny               # In case tmp1 & tmp2 are both 0,
    tmp4 <- as.double(s2[(n-i+1L):n] > s1[1L:i]) #   then t is 0 on left & 1 on right
    t[i-1L, 1L:i] <- (tmp2 / tmp3) * tmp4 + (1 - tmp1 / tmp3) * (1 - tmp4)
  }
  # Derive the polytope volume v from the appropriate element in the bottom row of w.
  v <- n^(3/2) * (w[n, k+2L] / .Machine$double.xmax) * (b - a)^(n - 1L)
  # Now construct the vector x.
  x <- numeric(n)
  rt <- runif(n - 1L) # For random selection of simplex type
  rs <- runif(n - 1L) # For random location within a simplex
  j <- k + 1L # For indexing in the t table
  sm <- 0 # Start with sum zero
  pr <- 1 # Start with product 1
  for(i in (n-1L):1L) { # Work backwards in the t table
    e <- as.double(rt[n-i] <= t[i, j]) # Use rt to choose a transition
    sx <- rs[n-i] ^ (1L/i)             # Use rs to compute next simplex coordinate
    sm <- sm + (1 - sx) * pr * s / (i + 1L) # Update sum
    pr <- sx * pr                           # Update product
    x[n-i] <- sm + pr * e # Calculate x using simplex coordinates
    s <- s - e
    j <- j - e # Transition adjustment
  }
  x[n] <- sm + pr * s # Compute the last x
  # Randomly permute the order in x and rescale
  p <- order(runif(n)) # it is a random permutation
  a + (b - a) * x[p]
}

Example:

x <- DRS(n = 10L, s = 14, a = 1, b = 2)
sum(x)
summary(x)

EDIT

有问题:这是notDRS - 请参阅给定链接中的幻灯片。 DRS 更普遍地允许不同的界限x_i.


EDIT

我刚刚发现这个方法是在R包中实现的代理人.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

-1 到 1 之间的随机数总和为 0 [关闭] 的相关文章

  • LRU、FIFO、随机

    当出现页面错误或缓存未命中时 我们可以使用最近最少使用 LRU 先入先出 FIFO 或随机替换算法 我想知道 哪一个提供了最好的性能 也称为未来缓存丢失 页面错误最少的可能性 架构 Coldfire 处理器 没有愚蠢的问题 这句话非常适合这
  • 从 ArrayList HashMap 中获取多个随机值

    我想从 ArrayList 中获取一些特定数字的随机值 final ArrayList
  • 是否可以反转伪随机数生成器?

    是否可以反转伪随机数生成器 例如 获取生成数字的数组并获取原始种子 如果是这样 这将如何实施 这绝对是可能的 您只需创建一个适合您目的的 PRNG 即可 这完全取决于您需要完成的任务 如果您更详细地描述您的情况 我很乐意提供更多建议 对于一
  • 抑制 r markdown 中的控制台输出,但保留绘图

    嗨 我有以下降价块 r echo FALSE warning FALSE message FALSE error FALSE lapply obj function x plot x main some plot box axis 1 at
  • 不同的分位数:箱线图与小提琴图

    require ggplot2 require cowplot d iris ggplot2 ggplot d aes factor 0 Sepal Length geom violin fill black alpha 0 2 draw
  • 添加不同的标签以在 ggplot R 中的堆积条形图中显示总计?

    我的问题有点类似 如何添加文本标签以显示ggplot中堆叠比例条的每个条中的总数n https stackoverflow com questions 65201095 how to add text label to show total
  • 在 RStudio 控制台中显示西里尔字母

    我在 Rstudio 控制台中显示俄语字符时遇到问题 我使用 readxl 包加载带有俄语的 Excel 文件 西里尔字母在数据框中正确显示 但是 如果我运行一个输出包含变量名称的函数 RStudio 控制台将显示符号而不是正确的西里尔字符
  • 高效编写航空公司路由算法

    Given 航班数据库 出发城市 到达城市 出发时间 到达时间 问题 如果出发时间不重要 那么在两个城市之间列出服务的最有效算法是什么 考虑到我们想要最小化中途停留时间 但仍高于标称最小值 即 20 分钟 并最小化中途停留次数 如果有直达航
  • 哪种 LaTeX 包与 knit 一起使用以获得更多的表格控制?禁忌?

    我正在用 knitr 写一张更长的桌子xtable和tabular environment longtable 在 longtable 包中时print将它们纳入我的 Rnw file 问题是我对longtable环境控制不够 我有一些文本
  • 根据绘图单击事件对数据框进行子集化

    我有下面的数据框 Name lt c John Bob Jack Number lt c 3 3 5 NN lt data frame Name Number 还有一个简单闪亮的应用程序 可以从中创建一个绘图直方图 我的目标是单击直方图的一
  • R Plotly 禁用图例单击和图例双击

    我想使用 R Plotly 从服务器端禁用绘图图例选择 我们看here https community plot ly t disable legend click functionality hiding traces 1345 2可以使
  • 插值时间序列

    我有两组具有不同时间戳的数据 一组数据包含校准数据 另一组包含样本数据 校准的频率比样品少得多 我想做的是将校准数据 低频 插值到采样时间序列 高频 上 sam lt textConnection time value 01 00 52 2
  • 在 R 中使用科学记数法和 xtable

    我将 data frame 传递给 xtable dat table lt xtable dat 1 20 digits 10 我宁愿使用科学记数法 而不是像那样显示数字 我该怎么做呢 看过了 但我发现的只是R 格式化xtable中的数字
  • 在 R 绘图上使用鼠标书写?

    我使用创建了散点图plot R 中的函数 有没有可能在这个图上画图 我想添加一条直线并获取它的参数 但在我看来abline 可能会很不方便 我想画很多条线 然后选择一条最合适的 我怎样才能完成这个任务 看看 RStudio 和这个例子 li
  • 将一个大的 xlsx 文件导入到 R 中?

    我想知道是否有人知道从 大 xlsx 文件 20Mb 导入数据的方法 我尝试使用 xlsx 和 XLConnect 库 不幸的是 两者都使用 rJava 我总是收到相同的错误 gt library XLConnect gt wb lt lo
  • 拉伸数组

    我有一个形成曲线的样本向量 假设其中有 1000 个点 如果我想将其拉伸到填充 1500 个点 给出不错结果的最简单算法是什么 我正在寻找一些只有几行 C C 的东西 我总是想增加向量的大小 并且新向量可以是当前向量大小的 1 1 倍到 5
  • 通过排列进行多组测试

    我有一个 df 其中包含与两个实验相关的两组值 value 1 和 value 2 一个实验包含两组 0 和 1 另一个实验包含三组 0 1 2 test group Value 1 Value 2 AA 0 15 1 11 2 AA 0
  • 如何将带有几行代码的字符数组转换为 data.frame?

    我有以下数组 my list lt c Jan 01 Dec 31 00 00 24 00 Jan 01 Jun 30 12 00 18 00 Jul 06 Dec 31 09 00 19 00 导致以下结果的最短代码是什么 x1 x2 x
  • 动态显示仪表板页面

    我有一个实用的闪亮应用程序 它使用shinydashboard包裹 新功能需要特定于用户的行为 例如 针对不同的用户名使用不同的数据集 因此我打算 显示登录表单 验证凭据并设置反应值LoggedIn to true如果成功的话 显示实际情况
  • R 中的微秒时间戳

    在 CSV 文件中 我有几列 其中一列有时间戳 其中每个时间戳是今天午夜经过的微秒 每个 csv 文件仅包含一天内的数据 因此这并不含糊 我的问题是 如何将这些微秒时间戳解析为 R 多谢 我的 CSV 文件的一部分 34201881666

随机推荐

  • 有序列表的自定义列表样式?

    可能是一个明显的初学者问题 我正在寻找一种简单的方法来设计标准 HTML 有序列表的样式 而无需任何标签 例如以下层次结构 A One I Two 1 Three a Four aa Five I Six 1 Seven a Eight a
  • java.sql.SQLException:没有找到适合 jdbc 的驱动程序:mysql://localhost:3306/dbname [重复]

    这个问题在这里已经有答案了 我有这个Java程序 MySQLConnectExample java import java sql import java util Properties public class MySQLConnectE
  • Windows XP 支持的最高 .NET 版本 [重复]

    这个问题在这里已经有答案了 Windows XP 支持的 NET Framework 的最高版本是多少 32 位 取决于您所使用的 Windows XP 版本 Windows XP Home Edition 及以上版本最高支持 NET 4
  • Angular2选择默认第一个选项

    我如何在角度2中默认选择选择中的第一个选项以下代码似乎不起作用
  • 为什么当我按退出键时框架不关闭?

    import java awt import javax swing import java awt event public class displayFullScreen extends JFrame private JLabel al
  • ASP.NET Web API 中的 XML 命名空间

    我目前正在开发一个项目 该项目要求我从其端点输出 XML 以及 JSON 我有以下模型 DataContract Namespace http www yale edu tp cas XmlType serviceResponse XmlR
  • istream_iterator 迭代二进制文件中的字节

    给定一个包含以下十六进制代码的文件 0B 00 00 00 00 00 20 41 我正在尝试填充std vector 然后手动检查每个字节 这是我使用迭代器构造函数从两个 std istream iterators 创建向量的代码 usi
  • docker restart_policy on-failure 与 any 有什么区别

    在 docker swarm v3 文档中 可以使用 3 种不同的重启策略条件 很明显什么是none条件确实如此 但我想知道两者之间有什么区别on failure and any具体来说是 Here s a picture from the
  • 是否可以从 Objective-C 文件访问 Swift 全局变量? [复制]

    这个问题在这里已经有答案了 我正在开发一个项目 我必须使用一些 Swift 代码扩展 Objective C 应用程序 所以我需要从 m 文件访问 Swift 代码 我导入了生成的 Swift h 文件 现在我可以访问这些方法 但不能访问全
  • 在 Doctrine 2.x ORM 中使用 REGEXP

    我对此进行了大量研究 我确信答案是否定的 但我很想证明我的观点是错误的 我想执行一个用 DQL 编写的包含 REGEXP 操作的查询 例如 select from assets where campaign id 1 and fileNam
  • 为什么 Property Set 会抛出 StackOverflow 异常?

    我了解 java 并且通常会放入 getter setter 方法 我有兴趣使用以下代码在 C 中执行此操作 但它会引发 StackOverflow 异常 我究竟做错了什么 调用代码 c firstName a 财产代码 public St
  • 当在另一个下拉列表上进行选择时,如何在 Django 管理中过滤下拉列表

    我的 Django 管理站点中有两个下拉列表 例如 我有 SelectCountry 和 SelectRegion 区域与国家 地区具有外键关系 如何确保在选择某个国家 地区时 会根据该国家 地区筛选区域 注意 我也使用 django gr
  • PHP 表单 + Google reCAPTCHA

    有点奇怪的是 谷歌的 recaptcha 文档并不像我想象的那么有用 我被要求采用当前现有的表单 每天都会收到几次垃圾邮件 并使用 Google 新的验证码进行更新 旧验证码的教程有很多 但新验证码的教程却不多 我基本上只是想要一个简单的表
  • 按钮背景资源对比

    button setBackgroundResource R Drawable abc if button getBackground getResources getDrawable R drawable abc button setBa
  • java.lang.Object 的受保护方法如何免受子类的影响?

    关键词protected授予对同一包中的类和子类的访问权限 http java sun com docs books tutorial java javaOO accesscontrol html 现在 每个班级都有java lang Ob
  • 限制闪亮字段中的输入类型

    事实上 numericInput接受字符串和数字输入 如果输入一个字符串 它将被转换为NA 尝试使用下面的代码 有没有办法不允许用户在闪亮的数字字段中键入字符串 ui lt fluidPage numericInput num label
  • C 中的内存池实现

    我正在寻找一个好的 C 内存池实现 它应包括以下内容 抗碎片化 超级快 能够在某个标识符下 捆绑 不同大小的多个分配 并删除具有给定标识符的所有分配 线程安全 我认为优秀的talloc 作为 samba 的一部分开发的可能正是您正在寻找的
  • Node.js 提示符“>”在 eshell 中无法显示

    我想在eshell中运行Node js 但提示不对 那么 我该如何解决这个问题呢 另一种方法是将其添加到您的 emacs 中 setenv NODE NO READLINE 1 这种方法的好处是它也适用于您直接运行的 Node 程序的其他调
  • jQuery detach() vs remove() vs hide() [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我在我的页面中使用高图表
  • -1 到 1 之间的随机数总和为 0 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 用R 如何生成n随机数x 1 x n位于之间 1 and 1总和为0 推广到另一个总和和另一个范围怎么样 简单解决第一个问题 这是第一个问题的简单解决方案 模拟u 1 u n之间 1