Overview

This document demonstrates the full functionality of the biparty R package, which provides Congressional Bipartisanship Scores (CBS) for all members of the U.S. House and Senate from 1983 to 2024, spanning the 98th through the 118th Congresses. The scores are introduced and described in Authors (2026). This work was supported and funded by the Portman Center for Policy Solutions.

The package provides two complementary measures of bipartisan behavior for each member-Congress-chamber observation:

  • Attract — the share of out-party original cosponsors on bills the member sponsored. Captures the member’s ability to draw cross-party support to their own legislation.
  • Offer — the share of the member’s own original cosponsorships directed toward out-party-sponsored bills. Captures the member’s willingness to lend support to the other party’s legislation.

Both measures are available in raw (unweighted) and precision-weighted variants. The weighted version adjusts for imprecise measurement associated with legislators with low bill activity. Scores range from 0 to 1, with higher scores indicating more cross-party activity.


Installation

# install.packages("remotes")
remotes::install_github("congressional-bipartisanship-scores/biparty")
library(biparty)
library(dplyr)

The Datasets

The package provides two datasets. Load them with data():

data(aggregate.cbs)
data(issue.area.cbs)

aggregate.cbs

One row per legislator-Congress-chamber observation. Contains overall attract and offer scores (weighted and unweighted), member identifiers, and crosswalk columns.

colnames(aggregate.cbs)
##  [1] "congress"                     "chamber"                     
##  [3] "bioguide_id"                  "name"                        
##  [5] "party"                        "attract_aggregate_weighted"  
##  [7] "offer_aggregate_weighted"     "attract_aggregate_unweighted"
##  [9] "offer_aggregate_unweighted"   "state"                       
## [11] "district"                     "thomas_id"                   
## [13] "icpsr_id"                     "govtrack_id"                 
## [15] "wikipedia"                    "wikidata"                    
## [17] "total_n_bills_sponsored"      "prop_bills_with_cosponsor"
aggregate.cbs %>% select(congress, chamber, name, party, 
                         attract_aggregate_weighted, offer_aggregate_weighted) %>%
  head(6)
## # A tibble: 6 × 6
##   congress chamber name      party attract_aggregate_we…¹ offer_aggregate_weig…²
##      <dbl> <chr>   <chr>     <chr>                  <dbl>                  <dbl>
## 1       98 HOUSE   GARY ACK… D                      0.276                 0.0647
## 2       98 HOUSE   JOSEPH A… D                      0.365                 0.128 
## 3       98 HOUSE   DANIEL A… D                      0.358                 0.109 
## 4       98 HOUSE   DONALD A… D                      0.318                 0.117 
## 5       98 HOUSE   WILLIAM … D                      0.379                 0.0861
## 6       98 HOUSE   GLENN AN… D                      0.352                 0.0745
## # ℹ abbreviated names: ¹​attract_aggregate_weighted, ²​offer_aggregate_weighted
aggregate.cbs %>%
  summarise(
    n_observations = n(),
    n_legislators  = n_distinct(bioguide_id),
    congress_min   = min(congress),
    congress_max   = max(congress),
    n_congresses   = n_distinct(congress)
  )
## # A tibble: 1 × 5
##   n_observations n_legislators congress_min congress_max n_congresses
##            <int>         <int>        <dbl>        <dbl>        <int>
## 1          11549          2056           98          118           21

issue.area.cbs

Same row structure as aggregate.cbs, but with attract and offer scores computed separately within each of 34 CRS policy areas.

issue.area.cbs %>%
  select(congress, chamber, name, party,
         attract_health_weighted, offer_health_weighted,
         attract_defense_weighted, offer_defense_weighted) %>%
  head(6)
## # A tibble: 6 × 8
##   congress chamber name       party attract_health_weigh…¹ offer_health_weighted
##      <dbl> <chr>   <chr>      <chr>                  <dbl>                 <dbl>
## 1       98 HOUSE   GARY ACKE… D                     NA                    0.249 
## 2       98 HOUSE   JOSEPH AD… D                      0.660                0.0291
## 3       98 HOUSE   DANIEL AK… D                     NA                    0.0388
## 4       98 HOUSE   DONALD AL… D                     NA                    0.0665
## 5       98 HOUSE   WILLIAM A… D                     NA                   NA     
## 6       98 HOUSE   GLENN AND… D                     NA                    0.0775
## # ℹ abbreviated name: ¹​attract_health_weighted
## # ℹ 2 more variables: attract_defense_weighted <dbl>,
## #   offer_defense_weighted <dbl>

Member-Level Functions

get_member_scores()

Look up a single member’s scores by Bioguide ID or name substring.

# By Bioguide ID — Lisa Murkowski (R-AK)
get_member_scores("M001153")
## # A tibble: 11 × 18
##    congress chamber bioguide_id name           party attract_aggregate_weighted
##       <dbl> <chr>   <chr>       <chr>          <chr>                      <dbl>
##  1      108 SENATE  M001153     LISA MURKOWSKI R                          0.327
##  2      109 SENATE  M001153     LISA MURKOWSKI R                          0.412
##  3      110 SENATE  M001153     LISA MURKOWSKI R                          0.268
##  4      111 SENATE  M001153     LISA MURKOWSKI R                          0.770
##  5      112 SENATE  M001153     LISA MURKOWSKI R                          0.747
##  6      113 SENATE  M001153     LISA MURKOWSKI R                          0.778
##  7      114 SENATE  M001153     LISA MURKOWSKI R                          0.299
##  8      115 SENATE  M001153     LISA MURKOWSKI R                          0.279
##  9      116 SENATE  M001153     LISA MURKOWSKI R                          0.569
## 10      117 SENATE  M001153     LISA MURKOWSKI R                          0.408
## 11      118 SENATE  M001153     LISA MURKOWSKI R                          0.442
## # ℹ 12 more variables: offer_aggregate_weighted <dbl>,
## #   attract_aggregate_unweighted <dbl>, offer_aggregate_unweighted <dbl>,
## #   state <chr>, district <chr>, thomas_id <chr>, icpsr_id <chr>,
## #   govtrack_id <dbl>, wikipedia <chr>, wikidata <chr>,
## #   total_n_bills_sponsored <int>, prop_bills_with_cosponsor <dbl>
# By name substring — restrict to recent Congresses
get_member_scores("murkowski", congress = 115:118)
## # A tibble: 4 × 18
##   congress chamber bioguide_id name           party attract_aggregate_weighted
##      <dbl> <chr>   <chr>       <chr>          <chr>                      <dbl>
## 1      115 SENATE  M001153     LISA MURKOWSKI R                          0.279
## 2      116 SENATE  M001153     LISA MURKOWSKI R                          0.569
## 3      117 SENATE  M001153     LISA MURKOWSKI R                          0.408
## 4      118 SENATE  M001153     LISA MURKOWSKI R                          0.442
## # ℹ 12 more variables: offer_aggregate_weighted <dbl>,
## #   attract_aggregate_unweighted <dbl>, offer_aggregate_unweighted <dbl>,
## #   state <chr>, district <chr>, thomas_id <chr>, icpsr_id <chr>,
## #   govtrack_id <dbl>, wikipedia <chr>, wikidata <chr>,
## #   total_n_bills_sponsored <int>, prop_bills_with_cosponsor <dbl>
# Restrict to Senate, single Congress
get_member_scores("M001153", congress = 117, chamber = "senate")
## # A tibble: 1 × 18
##   congress chamber bioguide_id name           party attract_aggregate_weighted
##      <dbl> <chr>   <chr>       <chr>          <chr>                      <dbl>
## 1      117 SENATE  M001153     LISA MURKOWSKI R                          0.408
## # ℹ 12 more variables: offer_aggregate_weighted <dbl>,
## #   attract_aggregate_unweighted <dbl>, offer_aggregate_unweighted <dbl>,
## #   state <chr>, district <chr>, thomas_id <chr>, icpsr_id <chr>,
## #   govtrack_id <dbl>, wikipedia <chr>, wikidata <chr>,
## #   total_n_bills_sponsored <int>, prop_bills_with_cosponsor <dbl>
# Include issue-area scores
murkowski_full <- get_member_scores("M001153", congress = 117,
                                    chamber = "senate",
                                    include_issues = TRUE)
murkowski_full %>%
  select(name, congress, chamber,
         attract_aggregate_weighted, offer_aggregate_weighted,
         attract_health_weighted, offer_health_weighted)
## # A tibble: 1 × 7
##   name           congress chamber attract_aggregate_wei…¹ offer_aggregate_weig…²
##   <chr>             <dbl> <chr>                     <dbl>                  <dbl>
## 1 LISA MURKOWSKI      117 SENATE                    0.408                  0.689
## # ℹ abbreviated names: ¹​attract_aggregate_weighted, ²​offer_aggregate_weighted
## # ℹ 2 more variables: attract_health_weighted <dbl>,
## #   offer_health_weighted <dbl>

get_member_trend()

Return a member’s scores as a tidy time series across all Congresses served.

# Full career — both scores — Amy Klobuchar (D-MN)
get_member_trend("K000367")
## # A tibble: 9 × 7
##   congress chamber bioguide_id name          party attract_aggregate_weighted
##      <dbl> <chr>   <chr>       <chr>         <chr>                      <dbl>
## 1      110 SENATE  K000367     AMY KLOBUCHAR D                          0.496
## 2      111 SENATE  K000367     AMY KLOBUCHAR D                          0.450
## 3      112 SENATE  K000367     AMY KLOBUCHAR D                          0.486
## 4      113 SENATE  K000367     AMY KLOBUCHAR D                          0.487
## 5      114 SENATE  K000367     AMY KLOBUCHAR D                          0.548
## 6      115 SENATE  K000367     AMY KLOBUCHAR D                          0.532
## 7      116 SENATE  K000367     AMY KLOBUCHAR D                          0.500
## 8      117 SENATE  K000367     AMY KLOBUCHAR D                          0.485
## 9      118 SENATE  K000367     AMY KLOBUCHAR D                          0.513
## # ℹ 1 more variable: offer_aggregate_weighted <dbl>
# Attract scores only
get_member_trend("K000367", score_type = "attract")
## # A tibble: 9 × 6
##   congress chamber bioguide_id name          party attract_aggregate_weighted
##      <dbl> <chr>   <chr>       <chr>         <chr>                      <dbl>
## 1      110 SENATE  K000367     AMY KLOBUCHAR D                          0.496
## 2      111 SENATE  K000367     AMY KLOBUCHAR D                          0.450
## 3      112 SENATE  K000367     AMY KLOBUCHAR D                          0.486
## 4      113 SENATE  K000367     AMY KLOBUCHAR D                          0.487
## 5      114 SENATE  K000367     AMY KLOBUCHAR D                          0.548
## 6      115 SENATE  K000367     AMY KLOBUCHAR D                          0.532
## 7      116 SENATE  K000367     AMY KLOBUCHAR D                          0.500
## 8      117 SENATE  K000367     AMY KLOBUCHAR D                          0.485
## 9      118 SENATE  K000367     AMY KLOBUCHAR D                          0.513
# Restrict to Senate career
get_member_trend("K000367", chamber = "senate",
                 score_type = "both")
## # A tibble: 9 × 7
##   congress chamber bioguide_id name          party attract_aggregate_weighted
##      <dbl> <chr>   <chr>       <chr>         <chr>                      <dbl>
## 1      110 SENATE  K000367     AMY KLOBUCHAR D                          0.496
## 2      111 SENATE  K000367     AMY KLOBUCHAR D                          0.450
## 3      112 SENATE  K000367     AMY KLOBUCHAR D                          0.486
## 4      113 SENATE  K000367     AMY KLOBUCHAR D                          0.487
## 5      114 SENATE  K000367     AMY KLOBUCHAR D                          0.548
## 6      115 SENATE  K000367     AMY KLOBUCHAR D                          0.532
## 7      116 SENATE  K000367     AMY KLOBUCHAR D                          0.500
## 8      117 SENATE  K000367     AMY KLOBUCHAR D                          0.485
## 9      118 SENATE  K000367     AMY KLOBUCHAR D                          0.513
## # ℹ 1 more variable: offer_aggregate_weighted <dbl>

compare_members()

Side-by-side comparison of two or more members.

# Lisa Murkowski (R) and Amy Klobuchar (D) — 115th through 117th Congress
compare_members(c("M001153", "K000367"), congress = 115:117)
## # A tibble: 6 × 7
##   congress chamber bioguide_id name           party attract_aggregate_weighted
##      <dbl> <chr>   <chr>       <chr>          <chr>                      <dbl>
## 1      115 SENATE  K000367     AMY KLOBUCHAR  D                          0.532
## 2      115 SENATE  M001153     LISA MURKOWSKI R                          0.279
## 3      116 SENATE  K000367     AMY KLOBUCHAR  D                          0.500
## 4      116 SENATE  M001153     LISA MURKOWSKI R                          0.569
## 5      117 SENATE  K000367     AMY KLOBUCHAR  D                          0.485
## 6      117 SENATE  M001153     LISA MURKOWSKI R                          0.408
## # ℹ 1 more variable: offer_aggregate_weighted <dbl>
# Attract scores only, single Congress
compare_members(c("M001153", "K000367"), congress = 117,
                score_type = "attract")
## # A tibble: 2 × 6
##   congress chamber bioguide_id name           party attract_aggregate_weighted
##      <dbl> <chr>   <chr>       <chr>          <chr>                      <dbl>
## 1      117 SENATE  K000367     AMY KLOBUCHAR  D                          0.485
## 2      117 SENATE  M001153     LISA MURKOWSKI R                          0.408
# Offer scores, chamber restricted
compare_members(c("M001153", "K000367"), congress = 117,
                chamber = "senate", score_type = "offer")
## # A tibble: 2 × 6
##   congress chamber bioguide_id name           party offer_aggregate_weighted
##      <dbl> <chr>   <chr>       <chr>          <chr>                    <dbl>
## 1      117 SENATE  K000367     AMY KLOBUCHAR  D                        0.173
## 2      117 SENATE  M001153     LISA MURKOWSKI R                        0.689

Ranking Functions

rank_members()

Leaderboard of members sorted by attract or offer score within a given Congress and chamber.

# Top 10 senators by attract score, 117th Congress
rank_members(117, "senate", score_type = "attract", n = 10)
## # A tibble: 10 × 5
##     rank name          party bioguide_id attract_aggregate_weighted
##    <int> <chr>         <chr> <chr>                            <dbl>
##  1     1 MAGGIE HASSAN D     H001076                          0.808
##  2     2 GARY PETERS   D     P000595                          0.806
##  3     3 ROB PORTMAN   R     P000449                          0.779
##  4     4 JACKLYN ROSEN D     R000608                          0.776
##  5     5 SUSAN COLLINS R     C001035                          0.758
##  6     6 JOHN CORNYN   R     C001056                          0.726
##  7     7 TODD YOUNG    R     Y000064                          0.683
##  8     8 BILL CASSIDY  R     C001075                          0.675
##  9     9 JON TESTER    D     T000464                          0.648
## 10    10 RICHARD BURR  R     B001135                          0.634
# Top 10 House members by offer score
rank_members(117, "house", score_type = "offer", n = 10)
## # A tibble: 10 × 5
##     rank name                     party bioguide_id offer_aggregate_weighted
##    <int> <chr>                    <chr> <chr>                          <dbl>
##  1     1 BRIAN FITZPATRICK        R     F000466                        0.835
##  2     2 JOHN KATKO               R     K000386                        0.690
##  3     3 FRED UPTON               R     U000031                        0.648
##  4     4 JENNIFFER GONZALEZ-COLON R     G000582                        0.645
##  5     5 HENRY CUELLAR            D     C001063                        0.610
##  6     6 JAIME HERRERA BEUTLER    R     H001056                        0.600
##  7     7 PETER MEIJER             R     M001186                        0.565
##  8     8 AUMUA AMATA RADEWAGEN    R     R000600                        0.551
##  9     9 DON BACON                R     B001298                        0.537
## 10    10 DON YOUNG                R     Y000033                        0.535
# Top 5 Republican senators by attract score
rank_members(117, "senate", score_type = "attract",
             party = "R", n = 5)
## # A tibble: 5 × 5
##    rank name          party bioguide_id attract_aggregate_weighted
##   <int> <chr>         <chr> <chr>                            <dbl>
## 1     1 ROB PORTMAN   R     P000449                          0.779
## 2     2 SUSAN COLLINS R     C001035                          0.758
## 3     3 JOHN CORNYN   R     C001056                          0.726
## 4     4 TODD YOUNG    R     Y000064                          0.683
## 5     5 BILL CASSIDY  R     C001075                          0.675
# Top 10 senators by health attract score
rank_members(117, "senate", score_type = "attract",
             issue = "health", n = 10)
## # A tibble: 10 × 5
##     rank name           party bioguide_id attract_health_weighted
##    <int> <chr>          <chr> <chr>                         <dbl>
##  1     1 MAGGIE HASSAN  D     H001076                       0.893
##  2     2 BILL CASSIDY   R     C001075                       0.853
##  3     3 JACKLYN ROSEN  D     R000608                       0.840
##  4     4 ANGUS KING     D     K000383                       0.837
##  5     5 RICHARD BURR   R     B001135                       0.836
##  6     6 SUSAN COLLINS  R     C001035                       0.825
##  7     7 JOHN REED      D     R000122                       0.817
##  8     8 THOMAS CARPER  D     C000174                       0.812
##  9     9 LISA MURKOWSKI R     M001153                       0.804
## 10    10 SHELLEY CAPITO R     C001047                       0.802
# Full ranking, lowest scores first
rank_members(100, "senate", score_type = "attract",
             n = Inf, descending = FALSE) %>%
  head(10)
## # A tibble: 10 × 5
##     rank name             party bioguide_id attract_aggregate_weighted
##    <int> <chr>            <chr> <chr>                            <dbl>
##  1     1 BARBARA MIKULSKI D     M000702                          0.189
##  2     2 WILLIAM BRADLEY  D     B001225                          0.194
##  3     3 RICHARD SHELBY   D     S000320                          0.220
##  4     4 PAUL TRIBLE      R     T000367                          0.220
##  5     5 ROBERT DOLE      R     D000401                          0.222
##  6     6 DANIEL INOUYE    D     I000025                          0.235
##  7     7 JAMES SASSER     D     S000068                          0.235
##  8     8 PAUL SARBANES    D     S000064                          0.244
##  9     9 GORDON HUMPHREY  R     H000951                          0.244
## 10    10 ALAN DIXON       D     D000366                          0.245

rank_members_by_issue()

Focused variant of rank_members() with issue area as the primary argument.

# Top 10 senators by taxation attract score, 117th Congress
rank_members_by_issue("tax", 117, "senate",
                      score_type = "attract")
## # A tibble: 10 × 5
##     rank name           party bioguide_id attract_tax_weighted
##    <int> <chr>          <chr> <chr>                      <dbl>
##  1     1 ROB PORTMAN    R     P000449                    0.766
##  2     2 TODD YOUNG     R     Y000064                    0.766
##  3     3 RICHARD BURR   R     B001135                    0.753
##  4     4 JACKLYN ROSEN  D     R000608                    0.727
##  5     5 BILL CASSIDY   R     C001075                    0.715
##  6     6 MAGGIE HASSAN  D     H001076                    0.698
##  7     7 TIM SCOTT      R     S001184                    0.691
##  8     8 MICHAEL BENNET D     B001267                    0.640
##  9     9 JONI ERNST     R     E000295                    0.621
## 10    10 SUSAN COLLINS  R     C001035                    0.608
# Top 5 House Democrats by immigration offer score
rank_members_by_issue("immig", 117, "house",
                      score_type = "offer",
                      party = "D", n = 5)
## # A tibble: 5 × 5
##    rank name            party bioguide_id offer_immig_weighted
##   <int> <chr>           <chr> <chr>                      <dbl>
## 1     1 JOSH GOTTHEIMER D     G000583                    0.830
## 2     2 JOHN LARSON     D     L000557                    0.767
## 3     3 MIKE DOYLE      D     D000482                    0.733
## 4     4 JARED GOLDEN    D     G000592                    0.733
## 5     5 HENRY CUELLAR   D     C001063                    0.616

State Delegation Functions

get_state_delegation()

Scores for all members from a given state.

# Full Texas delegation, 117th Congress
get_state_delegation("TX", congress = 117)
## # A tibble: 40 × 18
##    congress chamber bioguide_id name           party attract_aggregate_weighted
##       <dbl> <chr>   <chr>       <chr>          <chr>                      <dbl>
##  1      117 HOUSE   G000553     AL GREEN       D                         0.193 
##  2      117 HOUSE   P000048     AUGUST PFLUGER R                         0.300 
##  3      117 HOUSE   V000134     BETH VAN DUYNE R                         0.173 
##  4      117 HOUSE   B001291     BRIAN BABIN    R                         0.335 
##  5      117 HOUSE   R000614     CHIP ROY       R                         0.0976
##  6      117 HOUSE   A000376     COLIN ALLRED   D                         0.335 
##  7      117 HOUSE   C001120     DAN CRENSHAW   R                         0.210 
##  8      117 HOUSE   J000126     EDDIE JOHNSON  D                         0.540 
##  9      117 HOUSE   V000132     FILEMON VELA   D                         0.558 
## 10      117 HOUSE   C001063     HENRY CUELLAR  D                         0.541 
## # ℹ 30 more rows
## # ℹ 12 more variables: offer_aggregate_weighted <dbl>,
## #   attract_aggregate_unweighted <dbl>, offer_aggregate_unweighted <dbl>,
## #   state <chr>, district <chr>, thomas_id <chr>, icpsr_id <chr>,
## #   govtrack_id <dbl>, wikipedia <chr>, wikidata <chr>,
## #   total_n_bills_sponsored <int>, prop_bills_with_cosponsor <dbl>
# Senate only
get_state_delegation("TX", congress = 117,
                     chamber = "senate")
## # A tibble: 2 × 18
##   congress chamber bioguide_id name        party attract_aggregate_weighted
##      <dbl> <chr>   <chr>       <chr>       <chr>                      <dbl>
## 1      117 SENATE  C001056     JOHN CORNYN R                          0.726
## 2      117 SENATE  C001098     TED CRUZ    R                          0.115
## # ℹ 12 more variables: offer_aggregate_weighted <dbl>,
## #   attract_aggregate_unweighted <dbl>, offer_aggregate_unweighted <dbl>,
## #   state <chr>, district <chr>, thomas_id <chr>, icpsr_id <chr>,
## #   govtrack_id <dbl>, wikipedia <chr>, wikidata <chr>,
## #   total_n_bills_sponsored <int>, prop_bills_with_cosponsor <dbl>
# Democrats only
get_state_delegation("TX", congress = 117,
                     party = "D")
## # A tibble: 13 × 18
##    congress chamber bioguide_id name               party attract_aggregate_wei…¹
##       <dbl> <chr>   <chr>       <chr>              <chr>                   <dbl>
##  1      117 HOUSE   G000553     AL GREEN           D                       0.193
##  2      117 HOUSE   A000376     COLIN ALLRED       D                       0.335
##  3      117 HOUSE   J000126     EDDIE JOHNSON      D                       0.540
##  4      117 HOUSE   V000132     FILEMON VELA       D                       0.558
##  5      117 HOUSE   C001063     HENRY CUELLAR      D                       0.541
##  6      117 HOUSE   C001091     JOAQUIN CASTRO     D                       0.311
##  7      117 HOUSE   F000468     LIZZIE FLETCHER    D                       0.483
##  8      117 HOUSE   D000399     LLOYD DOGGETT      D                       0.221
##  9      117 HOUSE   V000131     MARC VEASEY        D                       0.398
## 10      117 HOUSE   J000032     SHEILA JACKSON LEE D                       0.163
## 11      117 HOUSE   G000587     SYLVIA GARCIA      D                       0.281
## 12      117 HOUSE   E000299     VERONICA ESCOBAR   D                       0.270
## 13      117 HOUSE   G000581     VICENTE GONZALEZ   D                       0.442
## # ℹ abbreviated name: ¹​attract_aggregate_weighted
## # ℹ 12 more variables: offer_aggregate_weighted <dbl>,
## #   attract_aggregate_unweighted <dbl>, offer_aggregate_unweighted <dbl>,
## #   state <chr>, district <chr>, thomas_id <chr>, icpsr_id <chr>,
## #   govtrack_id <dbl>, wikipedia <chr>, wikidata <chr>,
## #   total_n_bills_sponsored <int>, prop_bills_with_cosponsor <dbl>
# Summarize to mean scores
get_state_delegation("TX", congress = 117,
                     aggregate = TRUE)
## # A tibble: 1 × 5
##   state n_members n_observations mean_attract mean_offer
##   <chr>     <int>          <int>        <dbl>      <dbl>
## 1 TX           40             40        0.317      0.142

Issue-Area Functions

list_issues()

Enumerate all available CRS policy area labels.

list_issues()
## # A tibble: 35 × 4
##    policy_area_number policy_area                        topic_short topic_label
##                 <int> <chr>                              <chr>       <chr>      
##  1                  1 families                           fam         Families   
##  2                  2 education                          edu         Education  
##  3                  3 commerce                           comm        Commerce   
##  4                  4 labor and employment               labor       Labor and …
##  5                  5 government operations and politics gov         Government…
##  6                  6 native americans                   native      Native Ame…
##  7                  7 animals                            animals     Animals    
##  8                  8 transportation and public works    trans       Transporta…
##  9                  9 emergency management               emerg       Emergency …
## 10                 10 finance and financial sector       finance     Finance an…
## # ℹ 25 more rows

get_issue_scores()

All members’ scores for a single CRS policy area.

# Health scores, 117th Congress
health <- get_issue_scores("health", congress = 117)
head(health)
## # A tibble: 6 × 8
##   congress chamber bioguide_id name             party issue  attract   offer
##      <dbl> <chr>   <chr>       <chr>            <chr> <chr>    <dbl>   <dbl>
## 1      117 HOUSE   A000148     JAKE AUCHINCLOSS D     health  NA     0.00301
## 2      117 HOUSE   A000369     MARK AMODEI      R     health  NA     0.574  
## 3      117 HOUSE   A000370     ALMA ADAMS       D     health   0.188 0.00315
## 4      117 HOUSE   A000371     PETE AGUILAR     D     health  NA     0.00219
## 5      117 HOUSE   A000372     RICK ALLEN       R     health  NA     0.148  
## 6      117 HOUSE   A000375     JODEY ARRINGTON  R     health   0.416 0.340
# Senate Democrats only — also accepts full CRS name
get_issue_scores("Taxation", congress = 117,
                 chamber = "senate", party = "D") %>%
  head(10)
## # A tibble: 10 × 8
##    congress chamber bioguide_id name               party issue attract   offer
##       <dbl> <chr>   <chr>       <chr>              <chr> <chr>   <dbl>   <dbl>
##  1      117 SENATE  B000944     SHERROD BROWN      D     tax     0.357 0.114  
##  2      117 SENATE  B001230     TAMMY BALDWIN      D     tax     0.441 0.123  
##  3      117 SENATE  B001267     MICHAEL BENNET     D     tax     0.640 0.409  
##  4      117 SENATE  B001277     RICHARD BLUMENTHAL D     tax     0.127 0.00928
##  5      117 SENATE  B001288     CORY BOOKER        D     tax     0.283 0.0446 
##  6      117 SENATE  C000127     MARIA CANTWELL     D     tax     0.526 0.124  
##  7      117 SENATE  C000141     BEN CARDIN         D     tax     0.575 0.307  
##  8      117 SENATE  C000174     THOMAS CARPER      D     tax     0.274 0.265  
##  9      117 SENATE  C001070     BOB CASEY          D     tax     0.230 0.168  
## 10      117 SENATE  C001088     CHRISTOPHER COONS  D     tax     0.553 0.147
# Summarize by chamber and party
health %>%
  group_by(chamber, party) %>%
  summarise(
    mean_attract = mean(attract, na.rm = TRUE),
    mean_offer   = mean(offer,   na.rm = TRUE),
    n            = n(),
    .groups      = "drop"
  )
## # A tibble: 4 × 5
##   chamber party mean_attract mean_offer     n
##   <chr>   <chr>        <dbl>      <dbl> <int>
## 1 HOUSE   D            0.405     0.0504   227
## 2 HOUSE   R            0.406     0.276    216
## 3 SENATE  D            0.512     0.150     50
## 4 SENATE  R            0.517     0.319     50

get_issue_trend()

Mean attract and offer scores for a single policy area across all Congresses.

# Immigration bipartisanship over time, Senate, by party
get_issue_trend("immig", chamber = "senate",
                by_party = TRUE)
## # A tibble: 42 × 7
##    congress chamber party issue mean_attract mean_offer n_members
##       <dbl> <chr>   <chr> <chr>        <dbl>      <dbl>     <int>
##  1       98 SENATE  D     immig        0.208      0.199         9
##  2       98 SENATE  R     immig        0.2        0.203         6
##  3       99 SENATE  D     immig        0.507      0.422        13
##  4       99 SENATE  R     immig        0.519      0.426        16
##  5      100 SENATE  D     immig        0.506      0.341        23
##  6      100 SENATE  R     immig        0.694      0.694        14
##  7      101 SENATE  D     immig        0.329      0.330        30
##  8      101 SENATE  R     immig        0.430      0.357        19
##  9      102 SENATE  D     immig        0.445      0.442        17
## 10      102 SENATE  R     immig        0.453      0.336        14
## # ℹ 32 more rows

Congress-Level Summary Functions

get_congress_summary()

Congress-level mean attract and offer scores.

# Senate means, 115th through 118th Congresses
get_congress_summary(chamber = "senate",
                     congress = 115:118)
## # A tibble: 4 × 5
##   congress chamber mean_attract mean_offer n_members
##      <dbl> <chr>          <dbl>      <dbl>     <int>
## 1      115 SENATE         0.444      0.270       105
## 2      116 SENATE         0.440      0.256       102
## 3      117 SENATE         0.406      0.233       100
## 4      118 SENATE         0.430      0.240       103
# Split by party
get_congress_summary(chamber = "senate", congress = 115:118,
                     by_party = TRUE)
## # A tibble: 8 × 6
##   congress chamber party mean_attract mean_offer n_members
##      <dbl> <chr>   <chr>        <dbl>      <dbl>     <int>
## 1      115 SENATE  D            0.390      0.241        50
## 2      115 SENATE  R            0.497      0.298        55
## 3      116 SENATE  D            0.385      0.200        48
## 4      116 SENATE  R            0.488      0.304        54
## 5      117 SENATE  D            0.408      0.183        50
## 6      117 SENATE  R            0.405      0.284        50
## 7      118 SENATE  D            0.440      0.189        54
## 8      118 SENATE  R            0.418      0.297        49
# Health scores by party
get_congress_summary(chamber = "senate", congress = 115:118,
                     by_party = TRUE,
                     issue = "health")
## # A tibble: 8 × 7
##   congress chamber party mean_attract mean_offer n_members issue 
##      <dbl> <chr>   <chr>        <dbl>      <dbl>     <int> <chr> 
## 1      115 SENATE  D            0.487      0.235        50 health
## 2      115 SENATE  R            0.592      0.312        55 health
## 3      116 SENATE  D            0.460      0.178        48 health
## 4      116 SENATE  R            0.566      0.332        54 health
## 5      117 SENATE  D            0.512      0.150        50 health
## 6      117 SENATE  R            0.517      0.319        50 health
## 7      118 SENATE  D            0.510      0.195        54 health
## 8      118 SENATE  R            0.557      0.379        49 health

Visualization Functions

plot_bipartisanship()

Violin plot of issue-area score distributions by party and chamber, with optional member highlight.

# 117th Congress, Senate
plot_bipartisanship(117, chambers = "senate")

# Highlight Lisa Murkowski
plot_bipartisanship(117, chambers = "senate",
                    highlight = "M001153",
                    title = "Senate Bipartisanship by Issue Area — 117th Congress")

# 100th Congress — demonstrating historical coverage
plot_bipartisanship(100, chambers = "senate")

plot_trend()

Time-series line chart of scores across Congresses.

# Lisa Murkowski and Amy Klobuchar — attract scores
plot_trend(c("M001153", "K000367"), score_type = "attract")

# Offer scores
plot_trend(c("M001153", "K000367"), score_type = "offer")

# Party-average attract trend, Senate
plot_trend(c("D", "R"), type = "party", chamber = "senate",
           score_type = "attract")

# Party-average offer trend, House
plot_trend(c("D", "R"), type = "party", chamber = "house",
           score_type = "offer")

plot_member_profile()

Profile card combining a member photo, career summary statistics, and a bar chart of issue-area attract and offer scores by CRS policy area.

# Lisa Murkowski (R-AK) — 117th Congress
plot_member_profile("M001153", congress = 117, chamber = "senate")

# Amy Klobuchar (D-MN) — 117th Congress
plot_member_profile("K000367", congress = 117, chamber = "senate")


Citation

If you use these scores, please cite the paper:

Authors (2026). Congressional bipartisanship scores by member and issue area, 1983–2024. Working paper.

and the R package:

Authors (2026). biparty: Congressional Bipartisanship Scores by Member and Issue Area. R package version 0.1.0. https://github.com/congressional-bipartisanship-scores/biparty


This demonstration was generated using biparty version 0.1.0.