为这个概率函数而努力寻找变量输入

时间:2018-07-11 22:29:59

标签: r performance function variables probability

我正在尝试构建一个函数,该函数将基于3种潜在输入来输出表示产品成为畅销书可能性的概率:

  

nbids,avgask,vol

畅销书也用变量'huge'== 1

表示

这是通过评估37个观测值的数据集的概率得出的。例如,通过使用以下公式,它将评估某产品的平均销量超过600时成为畅销产品的可能性:

  

(最畅销和具有avgask的产品数量> = 600)/   (具有avgask> = 600

的产品数量

现在已经有了足够的数学知识,我对自己设计的方法和阈值充满信心。我关心的是我的编码能力。基本上,由于我的数据中只有6种最畅销的产品,因此并非所有阈值组合都由最畅销的产品代表。因此,根据所有3个变量的输入值,我最终可能会得出0%的机率,原因是数据集中的最畅销书都不代表我输入的属性。

要解决此问题,我将允许用户仅使用2,或者甚至可能输入三个可能变量中的一个,以便可以使用来自数据的更多表示形式。问题是,我无法在头脑上全神贯注地允许函数使用可变数量的输入(...)并根据它们设计变量表。结果,我放弃了基于潜在输入组合的7种不同功能。以下是用户仅输入nbids和avgask的函数示例:

prob_nbids_avgask <- function (nbids, avgask) {
  # Create Constraints
  c_h = df$huge == 1
  c_nb = ((df$n_bids >= 600) == T)
  c_avg_ask = (df$avg_ask >= 1250)


  # Create Inputs Table
  input = tibble(
    n_bids = nbids,
    avg_ask = avgask
  )

  # Conditions Table
  conditions = tibble(
    c_nb = (input[[1]][[1]] >= 600),
    c_avg_ask = (input[[2]][[1]] >= 1250)
  )

  # Probability Calculation

  # Probability Function Components
  numerator = nrow(df[c_h &
                        c_nb == conditions[[1]] &
                        c_avg_ask == conditions[[2]],])

  denominator = nrow(df[
                          c_nb == conditions[[1]] &
                          c_avg_ask == conditions[[2]],])

  # Calculate Probability

  if (numerator != 0) {
    numerator / denominator
  } else {
    print('No Examples Exist, Use Less Inputs')
  }
}

我不能满足于此,但是由于缺乏编码经验,我在精神上无法实现我想要的目标。我的想法是为给定的输入使用类似vlookup的东西。输入阈值表如下:

c_vl = (df$vol < 375000)
c_vm = (df$vol >= 375000 & df$vol < 750000)
c_vh = (df$vol >= 750000)
c_nb = ((df$n_bids >= 600) == T)
c_avg_ask = (df$avg_ask >= 1250)

这些规则应该很容易解释。如果用户仅提供了vol(归因于c_vl,c_vm,c_vh,低中高)和nbid(c_nb),则我的函数将查找这4个参数,并构建TRUE / FALSE表,以用于构建概率的分子和分母:

  # Probability Function Components
  numerator = nrow(df[c_h &
                        c_vl == conditions[[1]] &
                        c_vm == conditions[[2]] &
                        c_vh == conditions[[3]] &
                        c_nb == conditions[[4]] &
                        c_avg_ask == conditions[[5]],])

  denominator = nrow(df[c_vl == conditions[[1]] &
                          c_vm == conditions[[2]] &
                          c_vh == conditions[[3]] &
                          c_nb == conditions[[4]] &
                          c_avg_ask == conditions[[5]],])

我希望这足以说明我的问题。我真的想提高我的编码能力,不能忍受制作7个重复的函数。我已经用尽所有可能的方法将其汇总为1个函数,并且需要经验丰富的程序员的帮助。我将非常感谢您的帮助,而且我敢肯定,解决方案将为我的掌心打个巴掌。

0 个答案:

没有答案