Ver 5:
valence: “some people liked / didn’t like your poem” -> “do you think it is possible that everyone liked / didn’t like your poem?”
utterance: utterance (after reading the note) vs. no utterance (before reading the note)
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] "308XBLVESI45Q1XWLUNG445UBB2BR2.json"
## [1] "3137ONMDKG5C8E02FAVU68X8C0QEGX.json"
## [1] "31QTRG6Q2TDGRWASIUXB7K3GV2WPY3.json"
## [1] "31Z0PCVWUKFV447YC2GVZHKGG7A7TT.json"
## [1] "32AT8R96GL9WNF6F0A4GZ42EMYQSUM.json"
## [1] "32EYX73OY09KM062LL4B9UXI0X2RUU.json"
## [1] "32KTQ2V7RDFV5S57I2D3RZGUHO09M2.json"
## [1] "32N49TQG3GIS0Y9LO0SUAQARE0AAVH.json"
## [1] "32Q90QCQ1SLHA0WL51G940P1JGJEKA.json"
## [1] "32VNZTT0A74L52CN6FDTWQZO1KP4RV.json"
## [1] "336KAV9KYQSKZP9MGWMZB7VNKU7Y2W.json"
## [1] "336YQZE83VEC453VFC0MFJBSVTZ5MR.json"
## [1] "337RC3OW0529WH0PLRHKJ4Q28D3LV6.json"
## [1] "33IZTU6J811O4J0A5FF3JB1IGIZSXA.json"
## [1] "33PPO7FECVFLCZSX93KDL2S3R0UDI6.json"
## [1] "345LHZDEDXSS3YL0AV3FRWU2UK83UQ.json"
## [1] "34T446B1C0E00C535H0WVSAPK7TC04.json"
## [1] "35BLDD71I6XT16HT0S8TRJ10NMDVZ1.json"
## [1] "35GCEFQ6I5O9PXFAGI2N8O9HW05Z3P.json"
## [1] "373ERPL3YO85MNRDLGE14YBGHKFTRR.json"
## [1] "374TNBHA8BV1R8B7I7C07PTQ00OQY5.json"
## [1] "374TNBHA8BV1R8B7I7C07PTQ0YFYQ0.json"
## [1] "37TD41K0AH901LPFEJJG5YG8FZKSCF.json"
## [1] "37UEWGM5HT84D3F4JXURYSSLP1YR1Q.json"
## [1] "37UQDCYH6XVAHWBNHXGA0Z81DS4V7B.json"
## [1] "37W3JXSD6686B57TUGB6ZEBCO12YWE.json"
## [1] "382M9COHEHFVDW1XZFKBANYZL66UEA.json"
## [1] "38YMOXR4MUZ4SLXNOXGEGNRJPQ66WH.json"
## [1] "39ASUFLU6X7NU0VS4KVYUUX3FRIXE6.json"
## [1] "39U1BHVTDLRD3L6BAQD5M080B4JT33.json"
## [1] "3A1PQ49WVHHRO911NSIXKOQF2R01H1.json"
## [1] "3A4TN5196KIBBCBZ3P7H1K966PNCH0.json"
## [1] "3AZHRG4CU4KCNC9KCOPV2P6VEV630P.json"
## [1] "3B1NLC6UGZWG55PSOOB50KWCQ78GP0.json"
## [1] "3CFVK00FWLLOHRLOKJ9C7CA3RKQ6LE.json"
## [1] "3CTOC39K37Q1Q1BT082RXBX7I6R7JY.json"
## [1] "3DI28L7YXAEF4ZAZXRARZLT2ABGE16.json"
## [1] "3FDJT1UU748HEH3SU0N606JO6OH5KZ.json"
## [1] "3FE2ERCCZX84XI6QC7OD5T5EHUZPOY.json"
## [1] "3GD6L00D3SXDGN2CEPYACTYBJDG1MR.json"
## [1] "3GD6L00D3SXDGN2CEPYACTYBJEH1MU.json"
## [1] "3H8DHMCCW9BCIUIL965PYI7GJ6YKD7.json"
## [1] "3HL8HNGX451PZIDQWF9QW9WLKNO9FV.json"
## [1] "3HVVDCPGTESEJO3ZZB6VCU4DK67TY4.json"
## [1] "3I2PTA7R3TU673MQESB9YHEF2KXKQK.json"
## [1] "3I33IC7ZWF2J37BJ0Q8J8LDGH2XA2P.json"
## [1] "3IKZ72A5B4GAOKHKXPSVEAR5PBTNFU.json"
## [1] "3J4Q2Z4UTY3X23G736UCMS8APR7WQT.json"
## [1] "3JZQSN0I3QA4ES0YALF0OQI8O1EGFQ.json"
## [1] "3K5TEWLKGVB76GSJ0OK7ROYAR8PIV3.json"
## [1] "3KGTPGBS6XL3IGPH6VPA8MPAO6WU2U.json"
## [1] "3KRVW3HTZNLDA716R8DU8ULK9EAMSF.json"
## [1] "3KXIR214I4G41IV2RPYSVIRGPS524A.json"
## [1] "3LQ8PUHQFLS2OFXZVZ33CN71JUXIHY.json"
## [1] "3LRLIPTPEQ9EKNF9PWEN8HZAY2NKAP.json"
## [1] "3M1CVSFP6050VQD421YK43BJX8GQAO.json"
## [1] "3M23Y66PO27BL4GE4S6DJYOYJDBS6P.json"
## [1] "3M68NM076H7ZKPG1P368TOJ2XBV6RI.json"
## [1] "3MAOD8E57QARO685XJYHKHRCTI4NX4.json"
## [1] "3O6CYIULED1PUWNOKFEHWT5ZSCPUW8.json"
## [1] "3OONKJ5DKCJ2TO5GT26CA90P0PBBOO.json"
## [1] "3OWEPKL089CX9R2EF6UJQIEORPD7NH.json"
## [1] "3P4MQ7TPPXCIAUG7PX1Q4P0QTRTBBN.json"
## [1] "3PEIJLRY6TTHB0HJPKP4G043MVWXWV.json"
## [1] "3PM8NZGV8YGCR3LXDBQYOBMHYUWXQ8.json"
## [1] "3PWWM24LHSY5KJI43SO5CU7LRFF28X.json"
## [1] "3QILPRALQ5V1957XPBMP4IAJ29L8N7.json"
## [1] "3QL2OFSM96I3L8XA6N2U6462S0ZNCL.json"
## [1] "3QRYMNZ7FYHK7PZLS9XKVE66GMGTNR.json"
## [1] "3QUO65DNQUOHPNEMTTN7FZSDPBTOUV.json"
## [1] "3QXNC7EIPIVY2EY0TXQ5T29HENL90H.json"
## [1] "3R0T90IZ1SCXBGGOJJPZGKX5RORGCK.json"
## [1] "3R0T90IZ1SCXBGGOJJPZGKX5RPUCGL.json"
## [1] "3R2UR8A0IAG96R8HYYYUZ6RHJT9OXM.json"
## [1] "3R6P78PK7KBEXXIZ55KP5UX9FBGTG7.json"
## [1] "3RSDURM96AMCU5L29GH0D84CHXZYE0.json"
## [1] "3S06PH7KSR4ACTWZ1WZ7T3BHAYI1D1.json"
## [1] "3S96KQ6I9M4BLD883FJHZ9UC2JETDB.json"
## [1] "3SEPORI8WNZ99IEVPXHXVWNN2CBZA3.json"
## [1] "3T111IHZ5EQM28IZNA9KDYA4NC3R9E.json"
## [1] "3T111IHZ5EQM28IZNA9KDYA4NDGR9T.json"
## [1] "3TE3O857308B2OX021U53B2QH6KR2D.json"
## [1] "3TMSXRD2X609LZWQIR4XLR02HGJ1W9.json"
## [1] "3TU5ZICBRD1MC2KP53E68C5O7JDQ8F.json"
## [1] "3TU5ZICBRD1MC2KP53E68C5O7LIQ8O.json"
## [1] "3UOUJI6MTDE4JWSEUKA3YCJ61CIXUN.json"
## [1] "3VSOLARPKB9UJ6XXCK8OV07OHYM93R.json"
## [1] "3W2LOLRXLBF6J41QR70937OKY7ERK9.json"
## [1] "3W8CV64QJ2Z9DE4WR5XQZU8Y020H90.json"
## [1] "3X3OR7WPZZ0BL54CDY6ARQ6UXFTL8S.json"
## [1] "3X4MXAO0BGOXE4V7GLJCRIIFLDLWR6.json"
## [1] "3X66WABAJWI9YGK5QQEYNHTBLCYG38.json"
## [1] "3XC1O3LBOSMUJPW0GWH5IM2HBRETLN.json"
## [1] "3XLBSAQ9Z4CRQGGXIU5DL5LX14OZ7V.json"
## [1] "3YJ6NA41JBGQW7FTWUW8XXOSI0APJ0.json"
## [1] "3YOH7BII097YCBI70R5J44DNJCUVK7.json"
## [1] "3YOH7BII097YCBI70R5J44DNJDPKVT.json"
## [1] "3Z4AIRP3C6DOAZ1GSW0JNAE9QI0X19.json"
## [1] "3Z4AIRP3C6DOAZ1GSW0JNAE9QIPX1Y.json"
## [1] "3ZR9AIQJUB9X58SOC2UECUY1STL04M.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")
lmer <- glmer(judgment ~ utt_valence * context + (utt_valence | subid), 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 + (utt_valence | subid)
## Data: d1
##
## AIC BIC logLik deviance df.resid
## 486 514 -236 472 393
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.461 -0.641 0.248 0.613 2.308
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## subid (Intercept) 3.72 1.93
## utt_valencelike 1.52 1.23 -0.82
## Number of obs: 400, groups: subid, 93
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.076 0.511 4.06 4.8e-05 ***
## utt_valencelike -1.526 0.546 -2.80 0.0052 **
## contextutterance -1.150 0.434 -2.65 0.0081 **
## utt_valencelike:contextutterance -0.291 0.577 -0.50 0.6145
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) utt_vl cntxtt
## utt_valnclk -0.867
## contxtttrnc -0.680 0.638
## utt_vlnclk: 0.516 -0.700 -0.754