Эффективный эмпирический расчет распределения

Рассмотрим эмпирическую оценку условного распределения дискретного в обоих X а также Y,

Pr(Y|X)

Обе переменные были сопоставлены с целочисленными наборами, так что

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

У меня есть дата наблюдения obsтакой, что obs$x[t] а также obs$y[t] мои наблюдаемые X а также Y значения для события 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) но я ищу самый эффективный способ.

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)

хотел бы узнать более быстрый метод для расчета этого

Другие вопросы по тегам