【问题标题】:building a matrix from results of hist() in R从 R 中 hist() 的结果构建矩阵
【发布时间】: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)

标签: r histogram bins


【解决方案1】:

我正在寻找的数学函数是

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

比我想象的要容易,还是谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多