政治学编程问题

时间:2011-06-01 20:18:43

标签: r

对不起,我在这里非常具有描述性,但我希望你能帮助我解决以下问题(我尝试用R编程):

假设我们有一个数组,其中行是聚会,列是聚会的发行位置(以距所有各方的中间发布位置的距离来衡量)。我想模仿宣布问题平台的各方。这是这样的:从与中位数发行位置的距离最小的问题开始,并以概率宣布该平台(1减去与中位数的发布距离......各方宣布该问题作为他们的平台,概率= 1如果他们是该问题的中间方)。如果rbinom(1,1,prob)== 1,他们将宣布该问题(即列指示符)作为他们的平台。如果rbinom(1,1,prob)== 0,他们将继续讨论与中位数发布位置的距离是第二到最小的问题(并从二项分布中得出)等等直到平台是宣布。所有各方都采取相同的步骤为该模型的运行找到问题平台,但各方在最接近中间方的问题上存在差异。

您是否有关于如何设置此类设置的建议?

1 个答案:

答案 0 :(得分:2)

我建立了一个可以计算你想要的玩具模型。假设有n个派对和k个问题,下面我提供了一个代码来计算一方的派对选择。为所有各方概括代码应该是相当直接的。你只需要添加一个循环。我把这作为练习留给你=):

n = 4 # example with n=4
k = 3 # k = 3 issues 
party_position = matrix(runif(k*n),nrow=n, ncol=k) # matrix with party positions on each issue

med = apply(party_position,2 , median) # compute median of each column

gen.pos = function(party_position, median=med, k) {

 if ( k ==1 ) { # case base, i.e., when all previous decisions were rbinom == 0, there is only one platafform left. Pick that one.
    issue.announcing = which.max(abs(party_position[1,]-med))
    return(issue.announcing)
 }
 else {
    dif=abs(party_position[1,]-med) # difference between party position and median
    value=min(dif) # value gets minor difference
    pos=which.min(dif) # position in party_position matrix of value
    decision = rbinom(1, 1, 1- value) # decision with probability 1 - difference of minimum value and median
      if (decision < 1) { # if rbinom < 1, i.e, equals zero
        k=k-1 # set new k, so recursive function can work
        party_position[1,-pos] # it'll drop of matrix minimum value found before, so we can pick new minimum value
        return (gen.pos(party.position, median=med, k)) } # call the function with new matrix
      else { #i.e. if decision was equal 1, just pick pos as issue plataform
        issue.announcing = pos 
        return (issue.announcing)
      }
  }
}

功能“gen.pos”将为第一方(第一行)找到派对。我想你只需要申请“for”来为所有各方创造职位。请注意,该函数是递归的,这是,顺便说一下,我花费时间的原因:我真的很喜欢编写递归函数!

ps。:检查我的功能。它似乎在这里工作,我认为这是正确的,但有些人说,'信任,但检查'。

ps.2:该函数返回第一方的位置(即列)。如果您需要数字,而不是位置,请使用,

position.final = gen.pos(Party_position, med, k)
plataform = party_position[1,position.final]