R语言 复现公式 order statistic

img

想用R语言复现图中公式,输入应该是某些因子的多列1到N的排序顺序,输出应该是基于这些排序通过这个公式计算后的最终排序结果

目前没有思路,希望大家提提建议

jiecheng<-function(n){
  init=1
  for (each in 1:n){
    init=init*each
  }
  return (init)
}#上面这个是阶乘的函数
Q_cal<-function(vec){#对任意由rank构成的样本排列向量的Q值函数
  n<-length(vec)
  V_vec<-rep(0,n)#先构造一个全0的长度为n的全零V向量,之后填充
  for (k in 1:n){
    sumnum=0#连加号的起点
    for (i in 1:k){#对连加号里的i在1-k上进行遍历
      first<-vec[i]*(-1)^(i-1)/jiecheng(i)#首先是排除V(k-i),这里的vec[i]就是之前我们讨论的r的值,后续可以再修改
      if (i!=k){
        first<-first*V_vec[k-i]#如果i不是k,那么V(k-i)不为V(0)
      }#如果是k则跳过,因为V(0)=1,直接用first即可
      sumnum<-sumnum+first#逐次累加first
    }
    V_vec[k]<-sumnum#把sumnum赋给V_vec第k个值,继续直至算到n
  }
  Q<-jiecheng(n)*V_vec[n]#最后用n!乘以V(n)即可
  return (Q)
}
try_csv<-read.csv("抽样.csv")#用你的那个样本
#先把第一列(sample)去掉,然后转置,这是因为dataframe的行无法
#变成向量(因为编写的Q_cal需要对每一个样本的行向量进行计算),
#所以变成列
rank_part<-t(try_csv[-1])
sample<-ncol(rank_part)#样本数量
vec_Q<-rep(0,sample)
for (each in 1:sample){
  vec_Q[each]<-Q_cal(rank_part[,each])#累次计算每一个样本的Q值
}
print(vec_Q)#打印Q向量
try_csv$Q=vec_Q

我用的是你私聊给我发的那个数据模板

你这个是只计算Q值吗?如果是的话,下面那个Vk算式里r有上下标,它是什么意思?以及V0的初始值有没有