选择所需平均值的最佳参数值

时间:2013-07-19 01:57:17

标签: r

我第一次在这里发帖。

我的数据类似于以下示例:

  

C1 C2 C3 C4   1 1.33 1.86 1.91 2.51
  2 1.54 1.74 1.98 2.25
  3 1.75 1.97 2.20 2.59

我想找到一个参数值(x),使得每行小于x的平均值数最接近1.例如,对于上述数据,我知道x = 1.75给出了x的期望值。但是,当我有1,000行和100列时,我想使用R来查找它。

  

x = 1.75
  dataset.counts< - rowSums(dataset [,]< x)
  dataset.counts
  [1] 1 2 0
  平均(dataset.counts)
  [1] 1

我可以使用optim()查找x?

2 个答案:

答案 0 :(得分:2)

我对R一无所知。但是我可以告诉你一个将在O(n logn)中运行的通用算法,其中n是数据点的数量(对于数据集10,应该在一秒钟内运行)百万号)。

  1. 将所有元素存储在数组a
  2. 排序a
  3. 制作变量xx_idx
  4. 在{0,n-1]范围内的i上运行二进制搜索。
  5. 在搜索的每一步:
    • 遍历每一行并计算该行中小于或等于a[i]的数字元素
    • mean设置为总数除以行数。
    • 如果meanx更接近1,请将x_idx设为i并将x设为a[x_idx]
    • 如果mean小于1,请将搜索范围限制在上半部分。
    • 如果mean大于1,则将搜索限制在下半部分。
    • 如果mean是1休息,则为
  6. return x;

答案 1 :(得分:2)

@Glen_b,谢谢。我正在使用uniroot发布适用于我的代码的控制台。非常感谢你的帮助。

  

数据集
      R1 R2 R3 R4
  1 1.33 1.86 1.91 2.51
  2 1.54 1.74 1.98 2.25
  3 1.75 1.97 2.20 2.59

     

f< - function(x){
  + 1 - mean(rowSums(dataset [,]< x))
  +}

     

uniroot(f,c(0,6),tol = 1e-10)
  $根
  [1] 1.747159

$ f.root
[1] 0

$ ITER
[1] 8

$ estim.prec
[1] 0.008522727