create-all-icc.R 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. # This code can be reproduced without access to the underlying datasets, unlike regenerate_data.R
  2. # It relies on packages, functions, & variables that are called in SM.Rmd
  3. # You may need to "get" the data -- so if you get
  4. #Error in file(file, "rt") : cannot open the connection
  5. # then do datalad get FILE on terminal to get the relevant files
  6. # Create main ICC including all corpora & all measurements
  7. df.icc.mixed.cols = c("data_set","age_bin", "metric", "iqr",
  8. "age_b","age_se","age_t", # beta, standard error, T
  9. "icc_adjusted", "icc_conditional",
  10. "icc_child_id", "icc_corpus",
  11. "child_id_var","corpus_var","residual_var",
  12. "child_id_sd","corpus_sd","residual_sd",
  13. "r2_cond", "r2_marg",
  14. "nobs","nchi", "ncor",
  15. "formula","sw")
  16. df.icc.mixed = data.frame(matrix(ncol=length(df.icc.mixed.cols),nrow=0, dimnames=list(NULL, df.icc.mixed.cols)),
  17. stringsAsFactors = FALSE)
  18. for (data_set in data_sets){ # data_set = "aclew"
  19. # Load data
  20. mydat <- read.csv(paste0('../data_output/', data_set,'_metrics_scaled.csv'))
  21. metrics <- colnames(mydat)[!is.element(colnames(mydat), no.scale.columns)]
  22. for(metric in metrics)
  23. { # metric = "voc_chi_ph"
  24. icc.row <- new_fit_models(mydat, data_set, metric, NA, TRUE)
  25. df.icc.mixed[nrow(df.icc.mixed) + 1,] <- icc.row
  26. }
  27. }
  28. write.csv(df.icc.mixed,"../output/df.icc.mixed.csv",row.names=F)
  29. print("done with overall ana, tackling within corpus version")
  30. # repeat for the version within each corpus
  31. df.icc.corpus.cols = c("data_set","corpus","metric", "iqr",
  32. "age_b","age_se","age_t",
  33. "icc_adjusted", "icc_conditional",
  34. "icc_child_id", "icc_corpus",
  35. "child_id_var","corpus_var","residual_var",
  36. "child_id_sd","corpus_sd","residual_sd","r2_cond", "r2_marg",
  37. "nobs","nchi", "ncor",
  38. "formula","sw")
  39. df.icc.corpus = data.frame(matrix(ncol=length(df.icc.corpus.cols),nrow=0, dimnames=list(NULL, df.icc.corpus.cols)),
  40. stringsAsFactors=FALSE)
  41. for (data_set in data_sets){ # data_set = "aclew"
  42. # Load data
  43. mydat <- read.csv(paste0('../data_output/', data_set,'_metrics_scaled.csv'))
  44. for(corpus in corpora){
  45. mycordat <- mydat[mydat$experiment == corpus, ]
  46. metrics <- colnames(mycordat)[!is.element(colnames(mycordat), no.scale.columns)] #this should be defined here bc it varies by data_set
  47. for(metric in metrics) { # metric = "avg_voc_dur_mal"
  48. icc.row <- new_fit_models(mycordat, data_set, metric, corpus, FALSE)
  49. df.icc.corpus[nrow(df.icc.corpus) + 1,] <- icc.row
  50. }
  51. }
  52. }
  53. write.csv(df.icc.corpus,"../output/df.icc.corpus.csv",row.names=F)
  54. print("done with within corpus ana, tackling within age group version")
  55. #We do this one separately because we want to standardize metrics within each age group
  56. # repeat within age group bins
  57. df.icc.age.cols = c("data_set","age_bin","metric", "iqr",
  58. "age_b","age_se","age_t",
  59. "icc_adjusted", "icc_conditional",
  60. "icc_child_id", "icc_corpus",
  61. "child_id_var","corpus_var","residual_var",
  62. "child_id_sd","corpus_sd","residual_sd","r2_cond", "r2_marg",
  63. "nobs","nchi", "ncor",
  64. "formula","sw")
  65. df.icc.age = data.frame(matrix(ncol=length(df.icc.age.cols),nrow=0, dimnames=list(NULL, df.icc.age.cols)),
  66. stringsAsFactors=FALSE)
  67. for (data_set in data_sets){ # data_set = "aclew"
  68. # Load data and calculate age cuts
  69. mydat <- read.csv(paste0('../data_output/', data_set,'_metrics.csv')) # /!\ Do not use scaled version -> we'll scale by age later
  70. mydat$age_bin <- cut(mydat$age,c(0:6*6))
  71. metrics = colnames(mydat)[!is.element(colnames(mydat), no.scale.columns)]
  72. for(thisage in levels(mydat$age_bin))
  73. { #thisage= "(0,6]"
  74. thiscordata <- mydat[mydat$age_bin == thisage,]
  75. for(metric in metrics)
  76. { # metric = "avg_voc_dur_mal"
  77. pre_scaled_metric <- (thiscordata[, metric] - mean(thiscordata[, metric], na.rm=T))/sd(thiscordata[, metric], na.rm=T)
  78. thiscordata[abs(pre_scaled_metric)>2.5 & !is.na(pre_scaled_metric), metric] <- NA
  79. thiscordata[, metric] <- (thiscordata[, metric] - mean(thiscordata[, metric], na.rm=T))/sd(thiscordata[, metric], na.rm=T)
  80. if(dim(thiscordata)[1] > 30 & length(levels(factor(thiscordata$experiment))) > 1)
  81. {
  82. icc.row <- new_fit_models(thiscordata, data_set, metric, thisage, TRUE)
  83. }else{
  84. icc.row <- c(data_set,thisage,metric,iqr,
  85. NA,NA,NA,
  86. NA,NA,
  87. NA,NA,
  88. NA,NA,NA,
  89. NA,NA,NA,
  90. NA,NA,NA,
  91. "not_enough_data",NA)
  92. }
  93. df.icc.age[nrow(df.icc.age) + 1,] <- icc.row
  94. }
  95. }
  96. }
  97. write.csv(df.icc.age,"../output/df.icc.age.csv",row.names=F)