【问题标题】:Efficient Empirical Distribution Calculation高效的经验分布计算
【发布时间】:2017-04-05 07:46:44
【问题描述】:

考虑根据经验估计 XY 中的条件分布离散,

Pr(Y|X)

两个变量都被映射到整数集,这样

X in {1, ..., N_X} and Y in {1, ..., N_Y}

我有一个观察数据框obs,这样obs$x[t]obs$y[t] 是我观察到的XY 事件t 的值。

然后我的问题是,将obs 转换为包含经验分布的矩阵F 的最有效方法是什么

F[i,j] = sum((obs$x == i) & (obs$y == j))/sum(obs$x == i)

当然,我可以为i in (1:N_X)j in (1:N_Y) 使用双循环,但我正在寻找最有效的方法。

【问题讨论】:

  • 你能分享示例数据吗?

标签: r empirical-distribution


【解决方案1】:

这是一种使用data.table 的方法,可能可以进一步优化

#data
library(data.table)
Nx <- 1e3
Ny <- 1e2
num <- 1e4
set.seed(1L)
obs <- data.table(t=1:num, 
    x=sample(1:Nx, num, replace=TRUE),
    y=sample(1:Ny, num, replace=TRUE))

#calculate F_{i,j}
ans <- obs[, {
        n = .N
        .SD[, list(Fxy=.N/n), by=.(y)]
    }, by=.(x)]

#convert into matrix
library(Matrix)
matAns <- as.matrix(sparseMatrix(
    i=ans[["x"]], 
    j=ans[["y"]],
    x=ans[["Fxy"]]
))

head(matAns)

很想学习一种更快的计算方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 2017-12-10
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    相关资源
    最近更新 更多