data(cars)
median(cars[,1])
## [1] 15
# Load required package
if (!require(jsonlite)) {
  install.packages("jsonlite", repos = "https://cloud.r-project.org")
}
## Loading required package: jsonlite
library(jsonlite)

# Construct URL for CryptoCompare daily historical data
# We request the last 100 data points using limit=100
url <- "https://min-api.cryptocompare.com/data/v2/histoday?fsym=BTC&tsym=USD&limit=100"

# Fetch JSON data from the API
btc_data_raw <- fromJSON(url)

# Extract just the daily price data 
# (the nested list is usually in Data$Data based on observation)
btc_df <- btc_data_raw$Data$Data

# Convert Unix timestamp to a human-readable date column
btc_df$time <- as.POSIXct(btc_df$time, origin = "1970-01-01", tz = "UTC")

# Compute maximum daily closing price
max_close <- max(btc_df$close, na.rm = TRUE)

# Print the result
print(max_close)
## [1] 96945.09

Do Higher Earnings Justify Higher Student Debt?

Research Questions:

Is there a strong relationship between median student debt at graduation and median earnings 10 years after enrollment?

Do private colleges generate higher earnings than public colleges after adjusting for debt?

Which majors produce the highest earnings-to-debt ratio?

Does college selectivity (admission rate) correlate with post-graduation earnings?

Are there regional differences in earnings and debt outcomes?

college_data <- read.csv("CollegeScorecard.csv")
colnames(college_data)
##   [1] "UNITID"                        "OPEID6"                       
##   [3] "INSTNM"                        "CONTROL"                      
##   [5] "MAIN"                          "CIPCODE"                      
##   [7] "CIPDESC"                       "CREDLEV"                      
##   [9] "CREDDESC"                      "IPEDSCOUNT1"                  
##  [11] "IPEDSCOUNT2"                   "DEBT_ALL_STGP_ANY_N"          
##  [13] "DEBT_ALL_STGP_ANY_MEAN"        "DEBT_ALL_STGP_ANY_MDN"        
##  [15] "DEBT_ALL_STGP_EVAL_N"          "DEBT_ALL_STGP_EVAL_MEAN"      
##  [17] "DEBT_ALL_STGP_EVAL_MDN"        "DEBT_ALL_PP_ANY_N"            
##  [19] "DEBT_ALL_PP_ANY_MEAN"          "DEBT_ALL_PP_ANY_MDN"          
##  [21] "DEBT_ALL_PP_EVAL_N"            "DEBT_ALL_PP_EVAL_MEAN"        
##  [23] "DEBT_ALL_PP_EVAL_MDN"          "DEBT_MALE_STGP_ANY_N"         
##  [25] "DEBT_MALE_STGP_ANY_MEAN"       "DEBT_MALE_STGP_ANY_MDN"       
##  [27] "DEBT_MALE_STGP_EVAL_N"         "DEBT_MALE_STGP_EVAL_MEAN"     
##  [29] "DEBT_MALE_STGP_EVAL_MDN"       "DEBT_MALE_PP_ANY_N"           
##  [31] "DEBT_MALE_PP_ANY_MEAN"         "DEBT_MALE_PP_ANY_MDN"         
##  [33] "DEBT_MALE_PP_EVAL_N"           "DEBT_MALE_PP_EVAL_MEAN"       
##  [35] "DEBT_MALE_PP_EVAL_MDN"         "DEBT_NOTMALE_STGP_ANY_N"      
##  [37] "DEBT_NOTMALE_STGP_ANY_MEAN"    "DEBT_NOTMALE_STGP_ANY_MDN"    
##  [39] "DEBT_NOTMALE_STGP_EVAL_N"      "DEBT_NOTMALE_STGP_EVAL_MEAN"  
##  [41] "DEBT_NOTMALE_STGP_EVAL_MDN"    "DEBT_NOTMALE_PP_ANY_N"        
##  [43] "DEBT_NOTMALE_PP_ANY_MEAN"      "DEBT_NOTMALE_PP_ANY_MDN"      
##  [45] "DEBT_NOTMALE_PP_EVAL_N"        "DEBT_NOTMALE_PP_EVAL_MEAN"    
##  [47] "DEBT_NOTMALE_PP_EVAL_MDN"      "DEBT_PELL_STGP_ANY_N"         
##  [49] "DEBT_PELL_STGP_ANY_MEAN"       "DEBT_PELL_STGP_ANY_MDN"       
##  [51] "DEBT_PELL_STGP_EVAL_N"         "DEBT_PELL_STGP_EVAL_MEAN"     
##  [53] "DEBT_PELL_STGP_EVAL_MDN"       "DEBT_PELL_PP_ANY_N"           
##  [55] "DEBT_PELL_PP_ANY_MEAN"         "DEBT_PELL_PP_ANY_MDN"         
##  [57] "DEBT_PELL_PP_EVAL_N"           "DEBT_PELL_PP_EVAL_MEAN"       
##  [59] "DEBT_PELL_PP_EVAL_MDN"         "DEBT_NOPELL_STGP_ANY_N"       
##  [61] "DEBT_NOPELL_STGP_ANY_MEAN"     "DEBT_NOPELL_STGP_ANY_MDN"     
##  [63] "DEBT_NOPELL_STGP_EVAL_N"       "DEBT_NOPELL_STGP_EVAL_MEAN"   
##  [65] "DEBT_NOPELL_STGP_EVAL_MDN"     "DEBT_NOPELL_PP_ANY_N"         
##  [67] "DEBT_NOPELL_PP_ANY_MEAN"       "DEBT_NOPELL_PP_ANY_MDN"       
##  [69] "DEBT_NOPELL_PP_EVAL_N"         "DEBT_NOPELL_PP_EVAL_MEAN"     
##  [71] "DEBT_NOPELL_PP_EVAL_MDN"       "DEBT_ALL_PP_ANY_MDN10YRPAY"   
##  [73] "DEBT_ALL_PP_EVAL_MDN10YRPAY"   "DEBT_ALL_STGP_ANY_MDN10YRPAY" 
##  [75] "DEBT_ALL_STGP_EVAL_MDN10YRPAY" "EARN_COUNT_NWNE_HI_1YR"       
##  [77] "EARN_CNTOVER150_HI_1YR"        "EARN_COUNT_WNE_HI_1YR"        
##  [79] "EARN_MDN_HI_1YR"               "EARN_COUNT_NWNE_HI_2YR"       
##  [81] "EARN_CNTOVER150_HI_2YR"        "EARN_COUNT_WNE_HI_2YR"        
##  [83] "EARN_MDN_HI_2YR"               "BBRR2_FED_COMP_N"             
##  [85] "BBRR2_FED_COMP_DFLT"           "BBRR2_FED_COMP_DLNQ"          
##  [87] "BBRR2_FED_COMP_FBR"            "BBRR2_FED_COMP_DFR"           
##  [89] "BBRR2_FED_COMP_NOPROG"         "BBRR2_FED_COMP_MAKEPROG"      
##  [91] "BBRR2_FED_COMP_PAIDINFULL"     "BBRR2_FED_COMP_DISCHARGE"     
##  [93] "BBRR3_FED_COMP_N"              "BBRR3_FED_COMP_DFLT"          
##  [95] "BBRR3_FED_COMP_DLNQ"           "BBRR3_FED_COMP_FBR"           
##  [97] "BBRR3_FED_COMP_DFR"            "BBRR3_FED_COMP_NOPROG"        
##  [99] "BBRR3_FED_COMP_MAKEPROG"       "BBRR3_FED_COMP_PAIDINFULL"    
## [101] "BBRR3_FED_COMP_DISCHARGE"      "EARN_COUNT_PELL_WNE_1YR"      
## [103] "EARN_PELL_WNE_MDN_1YR"         "EARN_COUNT_NOPELL_WNE_1YR"    
## [105] "EARN_NOPELL_WNE_MDN_1YR"       "EARN_COUNT_MALE_WNE_1YR"      
## [107] "EARN_MALE_WNE_MDN_1YR"         "EARN_COUNT_NOMALE_WNE_1YR"    
## [109] "EARN_NOMALE_WNE_MDN_1YR"       "EARN_COUNT_NE_3YR"            
## [111] "EARN_NE_MDN_3YR"               "EARN_COUNT_WNE_3YR"           
## [113] "EARN_CNTOVER150_3YR"           "EARN_COUNT_PELL_NE_3YR"       
## [115] "EARN_PELL_NE_MDN_3YR"          "EARN_COUNT_NOPELL_NE_3YR"     
## [117] "EARN_NOPELL_NE_MDN_3YR"        "EARN_COUNT_MALE_NE_3YR"       
## [119] "EARN_MALE_NE_MDN_3YR"          "EARN_COUNT_NOMALE_NE_3YR"     
## [121] "EARN_NOMALE_NE_MDN_3YR"        "EARN_COUNT_NWNE_1YR"          
## [123] "EARN_COUNT_WNE_1YR"            "EARN_MDN_1YR"                 
## [125] "EARN_GT_THRESHOLD_1YR"         "EARN_COUNT_HIGH_CRED_1YR"     
## [127] "EARN_IN_STATE_1YR"             "EARN_COUNT_NWNE_4YR"          
## [129] "EARN_COUNT_WNE_4YR"            "EARN_MDN_4YR"                 
## [131] "EARN_GT_THRESHOLD_4YR"         "EARN_COUNT_PELL_WNE_4YR"      
## [133] "EARN_PELL_WNE_MDN_4YR"         "EARN_COUNT_NOPELL_WNE_4YR"    
## [135] "EARN_NOPELL_WNE_MDN_4YR"       "EARN_COUNT_MALE_WNE_4YR"      
## [137] "EARN_MALE_WNE_MDN_4YR"         "EARN_COUNT_NOMALE_WNE_4YR"    
## [139] "EARN_NOMALE_WNE_MDN_4YR"       "EARN_COUNT_HIGH_CRED_4YR"     
## [141] "EARN_IN_STATE_4YR"             "BBRR1_FED_COMP_N"             
## [143] "BBRR1_FED_COMP_DFLT"           "BBRR1_FED_COMP_DLNQ"          
## [145] "BBRR1_FED_COMP_FBR"            "BBRR1_FED_COMP_DFR"           
## [147] "BBRR1_FED_COMP_NOPROG"         "BBRR1_FED_COMP_MAKEPROG"      
## [149] "BBRR1_FED_COMP_PAIDINFULL"     "BBRR1_FED_COMP_DISCHARGE"     
## [151] "BBRR4_FED_COMP_N"              "BBRR4_FED_COMP_DFLT"          
## [153] "BBRR4_FED_COMP_DLNQ"           "BBRR4_FED_COMP_FBR"           
## [155] "BBRR4_FED_COMP_DFR"            "BBRR4_FED_COMP_NOPROG"        
## [157] "BBRR4_FED_COMP_MAKEPROG"       "BBRR4_FED_COMP_PAIDINFULL"    
## [159] "BBRR4_FED_COMP_DISCHARGE"      "DISTANCE"                     
## [161] "EARN_COUNT_NWNE_5YR"           "EARN_COUNT_WNE_5YR"           
## [163] "EARN_MDN_5YR"                  "EARN_GT_THRESHOLD_5YR"        
## [165] "EARN_COUNT_PELL_WNE_5YR"       "EARN_PELL_WNE_MDN_5YR"        
## [167] "EARN_COUNT_NOPELL_WNE_5YR"     "EARN_NOPELL_WNE_MDN_5YR"      
## [169] "EARN_COUNT_MALE_WNE_5YR"       "EARN_MALE_WNE_MDN_5YR"        
## [171] "EARN_COUNT_NOMALE_WNE_5YR"     "EARN_NOMALE_WNE_MDN_5YR"      
## [173] "EARN_COUNT_HIGH_CRED_5YR"      "EARN_IN_STATE_5YR"

####Data Cleaning

college_clean <- college_data[, c("INSTNM",
                                  "CONTROL",
                                  "DEBT_ALL_STGP_ANY_MDN",
                                  "EARN_MDN_5YR")]

# Convert to numeric safely (some values may be suppressed)
college_clean$EARN_MDN_5YR <- as.numeric(
  ifelse(college_clean$EARN_MDN_5YR == "PrivacySuppressed", NA,
         college_clean$EARN_MDN_5YR)
)
## Warning: NAs introduced by coercion
college_clean$DEBT_ALL_STGP_ANY_MDN <- as.numeric(
  ifelse(college_clean$DEBT_ALL_STGP_ANY_MDN == "PrivacySuppressed", NA,
         college_clean$DEBT_ALL_STGP_ANY_MDN)
)
## Warning: NAs introduced by coercion
# Remove rows with missing values
college_clean <- na.omit(college_clean)

# Compute earnings-to-debt ratio
college_clean$earnings_debt_ratio <- 
  college_clean$EARN_MDN_5YR / college_clean$DEBT_ALL_STGP_ANY_MDN

# Inspect
head(college_clean[, c("INSTNM", "EARN_MDN_5YR", "DEBT_ALL_STGP_ANY_MDN", "earnings_debt_ratio")])
##                      INSTNM EARN_MDN_5YR DEBT_ALL_STGP_ANY_MDN
## 17 Alabama A & M University        85218                 31000
## 30 Alabama A & M University        90409                 35000
## 31 Alabama A & M University        82929                 30500
## 40 Alabama A & M University        46627                 33000
## 41 Alabama A & M University        40721                 28271
## 50 Alabama A & M University        41798                 25500
##    earnings_debt_ratio
## 17            2.748968
## 30            2.583114
## 31            2.718984
## 40            1.412939
## 41            1.440381
## 50            1.639137