You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言生成n容量样本后如何对x每行执行optimise得到1000个结果

问题原因

你的代码仅返回1个优化结果,是因为optimise调用的似然函数直接对整个矩阵x的所有元素计算对数似然和,全局只做了1次优化,没有按单个样本拆分计算。
另外注意replicate(1000, rpois(n, 10))默认生成n行1000列的矩阵,每一列对应1个容量为n的独立泊松样本,如果你需要按行处理,调整遍历维度即可。

解决代码

方案1:按列遍历(匹配replicate默认输出结构,得到1000个样本的优化结果)

f2d <- function(n){
  # 生成1000个容量为n的泊松样本,每列为1个样本
  x <- replicate(1000, rpois(n, 10))
  # 对每一列单独执行极大似然估计
  res_list <- apply(
    X = x,
    MARGIN = 2, # 2表示按列遍历,需按行遍历则改为1
    FUN = function(single_sample){
      optimise(
        f = function(theta){ sum(dpois(single_sample, theta, log = TRUE)) }, 
        interval = c(0,50), 
        maximum = TRUE
      )
    }
  )
  return(res_list)
}

# 调用示例,n为单个样本的容量
optim_res <- f2d(n = 15)

返回的optim_res是长度为1000的列表,每个元素对应一个样本的optimise输出,包含maximum(最优参数值)和objective(最大对数似然值)两个字段。
如果需要把结果转为数据框方便后续分析,可以追加如下代码:

res_df <- do.call(rbind.data.frame, optim_res)

方案2:按行遍历

如果你明确需要对矩阵的每一行做优化,只需把apply的MARGIN参数改为1即可。如果要得到1000个结果,确保矩阵有1000行,生成矩阵时可做转置处理:

x <- t(replicate(1000, rpois(n, 10))) # 转置后为1000行n列,每行为1个样本
结果验证

泊松分布参数的极大似然估计解析解就是样本均值,你可以对比每个样本的均值和optimise返回的maximum值,二者几乎完全一致,可用于验证代码正确性。

内容的提问来源于stack exchange,提问作者Monj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:15:03