我第一次在这里发帖。
我的数据类似于以下示例:
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?
答案 0 :(得分:2)
我对R一无所知。但是我可以告诉你一个将在O(n logn)中运行的通用算法,其中n是数据点的数量(对于数据集10,应该在一秒钟内运行)百万号)。
a
a
x
和x_idx
i
上运行二进制搜索。a[i]
的数字元素mean
设置为总数除以行数。 mean
比x
更接近1,请将x_idx
设为i
并将x
设为a[x_idx]
mean
小于1,请将搜索范围限制在上半部分。mean
大于1,则将搜索限制在下半部分。mean
是1休息,则为答案 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