Ver 7:

some people liked / didn’t like -> likely that everyone liked/didn’t like? possible: yes vs no (binomial) 3 conds: utterance, no utterance, smudge

rm(list = ls())
library(jsonlite)
library(ggplot2)
library(tidyr)
library(binom)
source("/Users/ericang/Documents/Research/Politeness/experiment/2_code/data_analysis/helper/useful.R")

raw.data.path <- "/Users/ericang/Documents/Research/Politeness/experiment/2_code/production-results/"

## LOOP TO READ IN FILES
all.data <- data.frame()
files <- dir(raw.data.path,pattern="*.json")

for (file.name in files) {
  print(file.name)
  
  ## these are the two functions that are most meaningful
  json_file <- readLines(paste(raw.data.path,file.name,sep=""))
  json_file_str = paste(json_file, collapse = "")
  json_file_str = gsub(",}", "}", json_file_str)
  jso = jsonlite::fromJSON(json_file_str)
  jso1 <- data.frame(jso)
  jso1$subid <- substring(file.name, 1, 6)
  
  ## now here's where data get bound together
  all.data <- rbind(all.data, jso1)
}
## [1] "30H4UDGLT2IGXFLEZR90DPGANOIPM8.json"
## [1] "30OG32W0SUBII6HO2E8PWS66E7JNEE.json"
## [1] "30OG32W0SUBII6HO2E8PWS66E8SENG.json"
## [1] "30OG32W0SUBII6HO2E8PWS66E8TENH.json"
## [1] "32EYX73OY09KM062LL4B9UXJ1SGUR4.json"
## [1] "33CID57104TPK8Y61HBE09YKIN0L3Q.json"
## [1] "33CID57104TPK8Y61HBE09YKIO13LB.json"
## [1] "33CKWXB73JKGKYGNL3FCS1A9MXO11F.json"
## [1] "33IZTU6J811O4J0A5FF3JB1JHDBSXF.json"
## [1] "345LHZDEDXSS3YL0AV3FRWU3VFXU3Z.json"
## [1] "34QN5IT0TZRYO9FQO5KRT6E7VBG80V.json"
## [1] "352YTHGROVD8G8YKAA1ZIMXJF69H4M.json"
## [1] "35DR22AR5DKKK2FVF0E2B3T7PW43XO.json"
## [1] "36AHBNMV1RC72Z72DL6G7QMSIFFYDF.json"
## [1] "36NEMU28XFD6HOIFBDNV5JO6GLUWMJ.json"
## [1] "36V4Q8R5ZK01XRMTZ4OPDU6KSK4MQW.json"
## [1] "36WLNQG78ZAGHXSRZO3G5X6CXI7EBI.json"
## [1] "37C0GNLMHF35JFXW72BOOZ2ZJ5C6DD.json"
## [1] "37WLF8U1WPQDXL36ZJXBSCXP3E8K63.json"
## [1] "386CSBG1OZMZ8O11COH8OY9Y2KZ6QG.json"
## [1] "386CSBG1OZMZ8O11COH8OY9Y2LRQ6U.json"
## [1] "386PBUZZXFX05M0V4231GGF9ELQLJ8.json"
## [1] "38SKSKU7R1X4ABGPMKI14F09157ILX.json"
## [1] "39ASUFLU6X7NU0VS4KVYUUX4GL0EXW.json"
## [1] "39GXDJN2OTEEHAG6R28GEZ4XP8Y8VU.json"
## [1] "39JEC7537U1GTD6J8EOLGL0GFZIVCM.json"
## [1] "39KFRKBFINVY6WYR3UKWIKYRMT6YOW.json"
## [1] "39O5D9O87TSWH440O4IFXQ8XOETC38.json"
## [1] "3A0EX8ZRN8OEN29IZPFAC0YSFURBY9.json"
## [1] "3A0EX8ZRN8OEN29IZPFAC0YSFUZBYH.json"
## [1] "3AAPLD8UCCHSXTDAPB27QU9BV67HT1.json"
## [1] "3AQF3RZ558I2HZBSY86ECZ5KVIG6FC.json"
## [1] "3B1NLC6UGZWG55PSOOB50KWDR2SPGM.json"
## [1] "3B4YI393V9WG82EBB59GK3KR2XPSSL.json"
## [1] "3C2NJ6JBKAHQNQ589UDOURXHH4D2NB.json"
## [1] "3C6FJU71TQTTJ1IOZGW5HQQG4FOUYZ.json"
## [1] "3E47SOBEYQWB77MJ97P21WAM7WTCIB.json"
## [1] "3EFE17QCRC5RIT0V0BXHGPDPTM0SHS.json"
## [1] "3EICBYG644W72I6PRPA2DXPMKBICJN.json"
## [1] "3EJJQNKU9R5FHE0ILMXCQF8T7K6RHS.json"
## [1] "3EJJQNKU9R5FHE0ILMXCQF8T7K7HRJ.json"
## [1] "3F6HPJW4JD0GAKEM1V4BQAA8AGR2WC.json"
## [1] "3FTF2T8WLRIRA4ZLM4JQ0XIMGME9WO.json"
## [1] "3FTOP5WARFON8QB9F9HIIWNLBNC0JB.json"
## [1] "3FUI0JHJPXY8448HVB7E4N43I1W33H.json"
## [1] "3G2UL9A02DEP26WMGP82O7S3XVY67B.json"
## [1] "3HVVDCPGTESEJO3ZZB6VCU4EL1QTYG.json"
## [1] "3HYA4D452RJEZYSRB6UBMMO8FDEF24.json"
## [1] "3I33IC7ZWF2J37BJ0Q8J8LDHIXE2AR.json"
## [1] "3I33IC7ZWF2J37BJ0Q8J8LDHIY62AL.json"
## [1] "3IAEQB9FMEK3DUC2YKOSMT1C78XDWF.json"
## [1] "3IGI0VL647K4UXUDWSBL140KI96ON0.json"
## [1] "3IOEN3P9S7JBRKHKR9RTNX1QU8X166.json"
## [1] "3IRIK4HM3AKVENRI76GD4TKHY5VC6E.json"
## [1] "3IUZPWIU1O7BR0ICQ1AFQ6W2RGPWK4.json"
## [1] "3J88R45B2GYRRRKIDYB9O6W8USWPXM.json"
## [1] "3J88R45B2GYRRRKIDYB9O6W8UT6PXY.json"
## [1] "3JBT3HLQF82GWMKXEGZULRCJ2SSZPR.json"
## [1] "3JC6VJ2SABJB24U6I9AH6SGT27SA5N.json"
## [1] "3LYA37P8IQNJ3XK1VAEJ3SJHHFUKBZ.json"
## [1] "3M0NZ3JDP1YC3C2EU1QGNL72BSYZ5C.json"
## [1] "3M23Y66PO27BL4GE4S6DJYOZK8A6SV.json"
## [1] "3M23Y66PO27BL4GE4S6DJYOZK8WS63.json"
## [1] "3M68NM076H7ZKPG1P368TOJ3Y676RN.json"
## [1] "3M68NM076H7ZKPG1P368TOJ3Y6Y6RE.json"
## [1] "3MAOD8E57QARO685XJYHKHRDUD8XNB.json"
## [1] "3MB8LZR5BFTVG66DMN3DHVFMT9ZKLD.json"
## [1] "3MHW492WW0DT2ZIAL3IZJH5S9CJVMZ.json"
## [1] "3NJM2BJS4W63OT9NM2FMATBYTAOPC0.json"
## [1] "3NS0A6KXC48AJ9RYBX97RIYR11XZGF.json"
## [1] "3NXNZ5RS1AXCKPYKEWBE8HJ5NW779O.json"
## [1] "3OHYZ19UGC5XAE0ONO6GFYGKJ2AOAJ.json"
## [1] "3ON104KXQKWQDYT959NZJP76UUAW4P.json"
## [1] "3OSWBBLG1EXI2UHS8PKEOCFJG9LXD8.json"
## [1] "3P59JYT76LKOI3AS6QZ03Q396MX2TA.json"
## [1] "3QBD8R3Z21JI8PK7ENWP2VUKRT34OF.json"
## [1] "3R5F3LQFV2KYBM8WZGMFWR7TSN3OZ6.json"
## [1] "3R6BYFZZP7CF0EVOZVF4CCI4SMMXF4.json"
## [1] "3R6P78PK7KBEXXIZ55KP5UXAG5ITG0.json"
## [1] "3RYC5T2D73T7UVY64Z5HZOAKTBORP5.json"
## [1] "3S4AW7T80BIA24HA1VGXAEQQWNW4LU.json"
## [1] "3SKEMFQBZ3501ZMUSYU9CQTG9ARK8K.json"
## [1] "3SLE99ER0NDESSJNVBHTQ77ULOSZBL.json"
## [1] "3SUWZRL0MYDABLBW3XM8UHKKJHV6EO.json"
## [1] "3TESA3PJ31AACCO17BH8WLMFIJ7MM9.json"
## [1] "3TUI152ZZBN412046I5RT2IHU9KQ13.json"
## [1] "3VE8AYVF8MXPLDUGRN3CWD1B1DM8FG.json"
## [1] "3VJ40NV2QIN2PAZXTOXXA36C7RSTO6.json"
## [1] "3WQQ9FUS6AUZ8WI0MLHGDNAQMFPB8W.json"
## [1] "3X1FV8S5JXRTAPMOA0K46CLVDRBGVI.json"
## [1] "3X31TUMD7XMTA5KREDXVCGJNK4O1LI.json"
## [1] "3X3OR7WPZZ0BL54CDY6ARQ6VY9F8LS.json"
## [1] "3XLBSAQ9Z4CRQGGXIU5DL5LY2YH7ZN.json"
## [1] "3Y54SXRO1LLX2FJUPA9699Y1PDITUL.json"
## [1] "3YDGXNSEOZUFNXXR767T594KCO048D.json"
## [1] "3YJ6NA41JBGQW7FTWUW8XXOTJU2JPD.json"
## [1] "3ZOTGHDK5IB1AAMI4OS70YAQ580OSY.json"
## [1] "3ZSY5X72NXBP9VM5PZS2AO5UJ7MROK.json"
## [1] "3ZWFC4W1UU7V3I9CQW9CNUWGR6XFRO.json"
## [1] "3ZY8KE4ISJ3KNEG2DWPG0QPXJDPQVQ.json"

Filter out participants and clean up.

d <- all.data %>%
  select(subid, answer.scale, answer.judgment) %>%
  rename(judgment = answer.judgment) %>%
  filter(answer.scale != "training1" & answer.scale != "training2") %>%
  separate(answer.scale, into = c("utterance", "inference", "context"), sep = "_") 

d$inference <- as.factor(d$inference)
d$context <- as.factor(d$context)

d1 <- d %>%
  mutate(bound = factor(substring(inference, 1, 3),
                           levels = c("and", "but"),
                           labels = c("lower", "upper")),
         scale = factor(as.numeric(grepl("some", utterance)), 
                        levels = c(0, 1), 
                        labels = c("ad-hoc","scalar")),
         utt_valence = factor(as.numeric(grepl("love", utterance, 
                                               ignore.case=TRUE)), 
                            levels = c(0, 1), 
                            labels = c("didnt_like", "like")),
         condition = str_c(utt_valence, "-", inference, "-", context))
ms <- d1 %>%
  group_by(utt_valence, context) %>%
  mutate(n.total = n()) %>%
  group_by(utt_valence, context, judgment) %>%
  summarize(n = n(),
            n.total = n.total[1],
            mean = n / n.total,
            cih = binom.bayes(n, n.total)$lower,
            cil = binom.bayes(n, n.total)$upper)

qplot(utt_valence, mean, ymax=cih, ymin=cil, 
      fill = context, 
      stat="identity", position=position_dodge(width=.9),
      geom=c("bar","linerange"),
      data=subset(ms, judgment == "yes")) + 
  xlab("Valence") +
  ylab("Proportion of judgments 'possible that all'") + 
  ylim(c(0,1)) + 
  geom_hline(yintercept=.5, lty=2) +
  ggtitle("Utterance x Valence")

plot of chunk unnamed-chunk-3

lmer <- glmer(judgment ~ utt_valence * context + (1 | subid) + (utt_valence | context), data=d1, family=binomial)
summary(lmer)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: judgment ~ utt_valence * context + (1 | subid) + (utt_valence |  
##     context)
##    Data: d1
## 
##      AIC      BIC   logLik deviance df.resid 
##    689.1    733.1   -334.5    669.1      590 
## 
## Scaled residuals: 
##    Min     1Q Median     3Q    Max 
## -3.257 -0.672  0.337  0.554  2.915 
## 
## Random effects:
##  Groups  Name            Variance Std.Dev. Corr
##  subid   (Intercept)     1.68e+00 1.297290     
##  context (Intercept)     2.99e-08 0.000173     
##          utt_valencelike 1.97e-08 0.000140 0.51
## Number of obs: 600, groups:  subid, 90; context, 3
## 
## Fixed effects:
##                               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                      1.843      0.326    5.65  1.6e-08 ***
## utt_valencelike                 -0.492      0.377   -1.30  0.19284    
## contextsmudge                   -1.258      0.369   -3.41  0.00065 ***
## contextutt                      -1.530      0.370   -4.14  3.5e-05 ***
## utt_valencelike:contextsmudge    1.994      0.541    3.69  0.00022 ***
## utt_valencelike:contextutt      -0.209      0.501   -0.42  0.67679    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##                   (Intr) utt_vl cntxts cntxtt utt_vlnclk:cntxts
## utt_valnclk       -0.645                                       
## contextsmdg       -0.690  0.565                                
## contextutt        -0.700  0.566  0.600                         
## utt_vlnclk:cntxts  0.488 -0.706 -0.693 -0.422                  
## utt_vlnclk:cntxtt  0.462 -0.749 -0.414 -0.702  0.519