Toolbox function that bridges ideal point estimates computed from two separate datasets.

ipbridging(
  d1 = NULL,
  d2 = NULL,
  bridge.method = "procrustes",
  anchors.method = "subsample",
  anchors.subsample.method = "random",
  anchors.subsample.pr = 0.1,
  anchors.subsample.wgt.d1 = NULL,
  anchors.subsample.wgt.d2 = NULL,
  anchors.selectrows.d1 = 1:100,
  anchors.selectrows.d2 = 1:100,
  anchors.selectrows.data = NULL,
  anchors.newdata = NULL,
  input.type = "responses",
  ip.method = "ooc",
  ip.dims = 2,
  ip.polarity.d1 = c(1, 1),
  ip.polarity.d2 = c(1, 1),
  tr.trans.d2 = TRUE,
  tr.opt = FALSE,
  tr.opt.iter.n = 10000,
  tr.opt.sample.n = 30,
  tr.opt.th.inline = 0.5,
  tr.blend = TRUE,
  tr.blend.th1 = 0.05,
  tr.blend.th2 = 0.15,
  ...
)

Arguments

d1

First dataset that contains some policy preferences. Must be one of following types:

  • If input.type=="responses", matrix or data.frame of responses. Rows are resepondents and columns are questions/issues.

  • If input.type=="idealpoints", matrix or data.frame of ideal points. Rows are respondents and columns are ideal point dimensions.

  • If ideal points are estimated by ipest function, one can assign ipest.out object directly to here.

  • If anchored data is created using setanchors function, one can leave d1==NULL and set anchors.out object to anchor.method argument.

d2

Second dataset that contains some policy preferences. Must be the same class of object as d1.

bridge.method

Method of bridging. Currently, following methods are aviailable:

  • "procrustes" (default): Procrustes transformation method. Based on anchor cases, this method provides restricted non-parametric procedure to find optimal transformation matrix to bridge ideal point estimates.

  • "homography": Homography transformation method. Based on anchor cases, this method provides non-parametric procedure to find optimal transformation matrix to bridge ideal point estimates.

  • "joint": Joint scaling method. Simple method to combine d1 and d2 and jointly compute ideal points. The procedure described in Jessee (2016).

  • "modelmap": Use the model estimated on d1 to map ideal point coordinates of d2 respondents. This method does not require anchor cases. Can be used only if input.type=="responses" and ip.method=="irtMCMC". See Jessee (2016).

  • "olsmap": OLS mapping method, Based on anchor cases, use OLS regression to map d2 ideal point coordinates on d1 ideal point space. The procedure described in Shor et al. (2010).

  • "anchoredpooling": Use anchor cases to pool d1 and d2 and jointly compute ideal points. Issues/questions in two datasets are assumed to be independent from each other. See Shor et al. (2010) for more details.

anchors.method

Method to select anchors to bridge ideal points. Following values are currently available. Ignored if bridge.method is "joint" or "modelmap".

  • "subsample" (default): Sample subset of d1 and d2 and use them as anchors. Sampled anchors from another dataset are added to the target dataset when computing ideal points on each dataset. See anchors.subsample.pr and anchors.subsample.method for sampling options.

  • "selectrows": Use this option if specific anchors are already included in both d1 and d2. Row numbers for anchors must be set in anchors.selectrows.d1 and anchors.selectrows.d2, respectively (Two vectors must have the same length and each element must corresponds to the same anchor respondent). This is the only option for anchors selection if input.type=="idealpoints".

  • "newdata" Use new dataset that only contains anchors. The data.frame assigned in anchors.newdata are appended to both d1 and d2.

  • One can also set the output from setanchors function directly to this argument. Then, if d1,d2==NULL, the ideal points are estimated using datasets contained in anchors.out object. If ipest.out objects are assigned to d1,d2 or input.type=="idealpoints", anchors.out object is used only for the bridging purpose.

Note that "subsample" and "newdata" require d1 and d2 to have identical columns. This is not required for "selectrows".

anchors.subsample.method

Method to sample anchors. Following values are currently available:

  • "random" (default): randomly sample subset of both datasets and use them as anchors. The sample size is determined by anchors.subsample.pr.

  • "random.d1": randomly sample subset of d1 and use them as anchors. The sample size is determined by anchors.subsample.pr.

  • "random.d2": randomly sample subset of d2 and use them as anchors. The sample size is determined by anchors.subsample.pr.

  • "selectrows": Use this option if specific anchors are already known ( but not shared between datasets). Row numbers for anchors must be set in anchors.selectrows.d1 and anchors.selectrows.d2, respectively (Two vectors does not have to have the same length).

anchors.subsample.pr

Numeric vector of length 1 or 2. Used when anchors.method=="subsample". Proportion of dataset (i.e., d1 and d2) to be sampled as anchor. When length is 1, the propotion is determined by the dataset of smaller size if anchors.subsample.method=="random", specific dataset's size if anchors.subsample.method is "random.d1" or "random.d2". When length is 2 and anchors.subsample.method=="random", the first element determines the proportion in d1, the second element determines the proportion in d2.

anchors.subsample.wgt.d1

Optional weights passed to prob option of sample function used in random sampling of anchors from d1 when anchors.subsample.method is "random" or "random.d1". If not NULL, it must be a vector of length equals to nrow(d1).

anchors.subsample.wgt.d2

Optional weights passed to prob option of sample function used in random sampling of anchors from d2 when anchors.subsample.method is "random" or "random.d2". If not NULL, it must be a vector of length equals to nrow(d1).

anchors.selectrows.d1

Must be the vector of positive integers. Specify the row numbers of anchors in d1. If anchors.method=="selectrows", must be the same length and with perfect correspondence with anchors.selectrows.d2. If anchors.method=="subsample" and anchors.subsample.method=="selectrows", the above condition is not required.

anchors.selectrows.d2

Must be the vector of positive integers. Specify the row numbers of anchors in d2.

anchors.selectrows.data

Required if anchors.method=="selectrows". Specify the dataset where anchors are originally found. Must be the same length as anchors.selectrows.d1. Allowed values are 1 (=d1), 2 (=d2) and 3 (=new data).

anchors.newdata

Matrix or data.frame of anchors. Must have identical columns as d1 and d2. Used if anchors.method=="newdata".

input.type

The input type of d1 and d2. If "responses" (default), dataset values are responses to multiple issues or votes. If "idealpoints", dataset values are ideal points.

ip.method

Method of ideal point computation (used only when input.type=="response". Following values are currently available.

  • "ooc" (default): Ordered optimal classification. Calls oocflex function.

  • "blackbox": Blackbox scaling. Calls blackbox function from blackbox package (minscale=10 by default).

  • "oc": Optimal classification. Calls oc function from oc package (polarity=c(1,1) by default).

  • "wnominate": W-NOMINATE. Calls wnominate function from wnominate package (polarity=c(1,1) by default).

  • "irtMCMC": IRT model via Markov chain Monte Carlo method. Calls ideal function from pscl package.

For ip.method=="ooc", the inputs d1 and d2 must be positive integer. For all other methods, the inputs must be a dummy variable indication 0=Nay and 1=Yea (and 9 for unit nonresponse). All methods allow item non-response as NA.

ip.dims

Number of dimension in ideal point computation. Must be a positive integer between 1 and 10. If bridge.method=="homography", only 2 is accepted at this point.

ip.polarity.d1

A vector specifying the row number of the d1(or pooled data)'s respondent(s) constrained to have a positive (i.e., right-wing or conservative) score on each dimension. Used when ip.method is "ooc", "oc", or "wnominate".

ip.polarity.d2

A vector specifying the row number of the d2's respondent(s) constrained to have a positive (i.e., right-wing or conservative) score on each dimension. Used when ip.method is "ooc", "oc", or "wnominate".

tr.trans.d2

Used if bridge.method is a transformation method (i.e., "procrustes", "homography", or "olsmap"). If TRUE (default), transform d2 ideal points to map them on d1 space. If FALSE, transform d1 ideal points to map them on d2 space.

tr.opt

Used if bridge.method is a transformation method (i.e., "procrustes", "homography", or "olsmap"). If TRUE, conduct optimization of transformation through RANSAC (random sample consensus). The default is FALSE.

tr.opt.iter.n

Used if bridge.method is a transformation method (i.e., "procrustes", "homography", or "olsmap"). Number of iteration in the optimization of transformation matrix.

tr.opt.sample.n

Used if bridge.method is a transformation method (i.e., "procrustes", "homography", or "olsmap"). Size of anchoring respondents to be sub-sampled at each iteration of optimization.

tr.opt.th.inline

Used if bridge.method is a transformation method (i.e., "procrustes", "homography", or "olsmap"). Upper bound to determine inline respondents at each iteration of optimization. A respondent is considered 'inline' if the distance between transformed ip2 and ip1 goes below this threshold.

tr.blend

Used if bridge.method is a transformation method (i.e., "procrustes", "homography", or "olsmap"). If FALSE, do not use blending procedure in homograhy transformation. The default is TRUE.

tr.blend.th1

Used if bridge.method is a transformation method (i.e., "procrustes", "homography", or "olsmap"). First threshold used in 'blending' procedure. If minimum difference between transformed ip2 and ip1 goes below this threshold, the transformed ip2 is replaced with the closest ip1.

tr.blend.th2

Used if bridge.method is a transformation method (i.e., "procrustes", "homography", or "olsmap"). Second threshold used in 'blending' procedure. If minimum difference between transformed ip2 and ip1 goes below this threshold (but above blend.th1), the transformed ip2 is replaced with the value that intrapolates ip1 that falls within this threshold.

...

Additional arguments passed to the ideal point estimation function called in ip.method.

Value

A list with the following elements along with specified argument values

  • ip1: Original ip1 matrix.

  • ip2_trans: Transformed ip2 matrix mapped on ip1 space.

  • ip2_orig: Original ip2 matrix

References

  • Jessee, S. (2016), '(How) Can We Estimate the Ideology of Citizens and Political Elites on the Same Scale?', American Journal of Political Science 60(4), 1108--1124.

  • Shor, B.; Berry, C. & McCarty, N. (2010), 'A Bridge to Somewhere: Mapping State and Congressional Ideology on a Cross-institutional Common Space', Legislative Studies Quarterly 35(3), 417--448.

See also