【发布时间】:2018-03-20 17:50:55
【问题描述】:
它与另一个问题有关: The dimensions in hist for numpy.histogram with density = True
但是我已经太笼统了,所以现在我会直奔主题:
我有一个 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() 不接受固定数量的 bin(在我的情况下为 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
作为一个错误,因为每一行的 bin 数量是不同的。
最好的解决方法是使用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) 理解密度 = True 的 Python 中 hist 的输出(在我的另一个问题中接近) b) 开发一种方法,用 R 中的 hist() 为不同的向量获取相同数量的 bin。
【问题讨论】:
-
"其中每一行是 diff(hist$breaks) 和 hist$density 之间的乘积。"这样做的目的是什么?
-
构建分布的表示
-
查看帮助(“ecdf”)以获得更好的方法。
-
我已经尝试过 ecdf() 但我认为它不适合我,也许您可以详细说明您的建议?附言我将编辑我的问题以提供更多详细信息。
-
Size hist 专为绘图而设计,具有漂亮的轴限制。您可能必须手动划分数据。如果这对你有用,我可以作为答案发布:
tapply(A, cut(A, 10, include.lowest = TRUE), length)/length(A)