从 R 中的 hist() 结果构建矩阵



它与另一个问题有关: 密度 = True 的 numpy.直方图的 hist 中的维度

但是我太笼统了,所以现在我直接进入正题:

我有一个 633x34 矩阵,其中每一行都是一个数字向量,如下所示:

> dput(head(A,1))
structure(c(0.00198789974070879, -0.00172860847018153, -0.00527225583405355, 
0.00639585133967147, -0.00242005185825411, -0.00717372515125336, 
0.0037165082108902, 0.00164217804667233, 0.00034572169403646, 
-0.00864304235090751, -0.00639585133967158, 0.0068280034572169, 
0.00354364736387214, 0.000432152117545437, -0.00440795159896279, 
0.00544511668107173, 0.0031979256698359, 0.00164217804667233, 
0.000259291270527373, -0.00155574762316346, 0.00129645635263609, 
0.00259291270527229, -0.00397579948141746, 0.00328435609334476, 
0.00207433016421787, 0.00112359550561814, 0.00440795159896257, 
0.00164217804667266, -0.00319792566983579, 0.00233362143474514, 
0.00025929127052704, 0.000172860847018175, 0.000864304235090874, 
0.003630077787381), .Dim = c(1L, 34L))

我正在尝试构建一个 nrow = nrow(A) 和 ncol = 10 的矩阵 B,其中每行都是 diff(hist$breaks) 和 hist$density 之间的乘积的结果。

问题是 hist() 不接受固定数量的箱(在我的例子中为 10),而是将整数作为建议(每个文档)。 所以我的这个循环:

B <- matrix(, nrow = 633, ncol = 10)
for(i in 1:nrow(A)){
B[i,] <- diff(hist(B[i,], breaks = 10, freq = TRUE)$breaks) * hist(B[i,], breaks = 10, freq = TRUE)$density
}

显然给了:

Error in distribution_rep[i, ] <- diff(hist(dS[i, ], breaks = 10, freq = TRUE)$breaks) *  : 
number of items to replace is not a multiple of replacement length

这是一个错误,因为每行的箱数都不同。

最好的解决方法是使用a function to compute the vector of breakpoints,我已经尝试过seq(min(A[i, ]), max(A[i, ]), by = length(A[i,]/3.4))但它不起作用。

你们知道我可以在breaks =中输入什么表达来达到我的目标或其他解决此问题的方法吗? 谢谢你的时间。

编辑:正如所问的,我将进一步阐述这个问题的目标,一些细节已经在我之前链接的另一个开放性问题中。 我正在将一些代码从 Python 移植到 R,但我被困在使用 numpy.histogram 的一行。 这是给我带来麻烦的台词:

hist, bin_edges = np.histogram(A, bins=10, density=True)

那么我必须以这种方式使用该行的输出:

B = hist*np.diff(bin_edges)

构建一个矩阵 B,其维度 (nrow(A), bins) 作为分布的表示。 我想要的矩阵 B 的第一行是

array([ 0.05882353,  0.02941176,  0.05882353,  0.05882353,  0.08823529,
0.14705882,  0.23529412,  0.20588235,  0.02941176,  0.08823529])

我现在面临的两个主要问题是: a) 理解 python 中 hist 的输出,密度=真(在我的另一个问题中接近) b) 开发一种方法,在 R 中为 2 个向量获得相等数量的箱数。

我一直在寻找的数学函数是

breaks=seq(min(data),max(data),l=number_of_bins+1)

比我想象的要容易,无论如何谢谢大家。

最新更新