2017-04-05 67 views
2

考虑凭经验估计二者XY的条件分布的离散,高效经验分布计算

Pr(Y|X) 

两个变量已经被映射到整数集合,使得

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

我有观察的数据帧obs,使得obs$x[t]obs$y[t]是我观察到的事件的XY值。

我的问题则是,什么是obs转换为包含经验分布矩阵F这样

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

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

+0

你能分享例如数据? – mtoto

回答

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) 

很想学习更快的方法来计算这个