課題1

Q1 『予想通りに不合理―行動経済学が明かす「あなたがそれを選ぶわけ」』 『不合理だからうまくいく―行動経済学で見る欲望と衝動の謎』 『ずる―嘘とごまかしの行動経済学』 『やる気の科学―パフォーマンスを最大化する行動心理学』

Q2

米国南東部の自動車保険会社が第4著者の監督のもとで実施したフィールド実験である。顧客は、自分の保険に加入している最大4台の車両について、走行距離計の値を報告することを求められた。また、顧客はランダムに、フォームの最上部または最下部に「提供している情報は真実であることを約束する」という文言への署名を求められた。その結果、「上に署名」条件に割り当てられた顧客は、「最下に署名」条件に割り当てられた顧客よりも、平均して2,400マイル多く走行したと報告した。

Q3

Anomaly 1:数値が不自然にきれいである。保険データであれば申告額や走行距離には端数が含まれるはずだが、数字が丸められており、統計的に不自然な滑らかさが見られた。

Anomaly 2:変数同士の相関が不自然である。自然データであれば誤差やランダム性によって崩れるはずの複数の変数が、極めて高い相関を示していた。

Anomaly 3:偽装乱数特有の分布が観察された。数字の繰り返しを避ける、ばらつきが均等になりすぎるなど、人為的に生成された乱数に典型的なパターンが見られた。

Anomaly 4:同じ被験者が似た値を複数回出している。本来は個別に異なるはずの値が非常に近かったり、小数点以下の挙動が一致していたりするなど、実際の個別データでは起こりにくい現象が確認された。

Q4 私たちがすべきことはデータの公開である。今回の捏造は、データが公開されたことによって発覚した。もし、より多くの研究でデータ公開が進めば、不正はより早期に、かつ容易に検出できるようになると考えられる。

課題2

dat <- read_xlsx("第二回課題/DrivingdataAll with font.xlsx")

Table1

dat %>%
  group_by(condition) %>%
  summarize(
    baseline_mean = mean(baseline_average),
    baseline_sd   = sd(baseline_average),
    update_mean   = mean(update_average),
    update_sd     = sd(update_average)
  ) %>%
  kable()
condition baseline_mean baseline_sd update_mean update_sd
Sign Bottom 75034.50 50265.35 98705.14 51934.76
Sign Top 59692.71 49953.51 85791.10 51701.31

Figure1

dat %>%
  mutate(diff_car1 = update_car1 - baseline_car1) %>%
  ggplot(aes(x = diff_car1)) +
  geom_histogram(fill = "blue", color = "black", bins = 50) +
  coord_cartesian(xlim = c(0, 100000))

Figure2

p1 <- dat %>%
  mutate(diff_car1 = update_car1 - baseline_car1) %>%
  ggplot(aes(x = diff_car1)) + geom_histogram(fill = "blue", color = "black",bins = 50)


p2 <- dat %>%
  mutate(diff_car2 = update_car2 - baseline_car2) %>%
  ggplot(aes(x = diff_car2)) + geom_histogram(fill = "brown", color = "black",bins = 50)


p3 <- dat %>%
  mutate(diff_car3 = update_car3 - baseline_car3) %>%
  ggplot(aes(x = diff_car3)) + geom_histogram(fill = "green", color = "black", bins = 50)


p4 <- dat %>%
  mutate(diff_car4 = update_car4 - baseline_car4) %>%
  ggplot(aes(x = diff_car4)) + geom_histogram(fill = "white", color = "black",bins = 50)


(p1 + p2) / (p3 + p4)
## Warning: Removed 7839 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 12211 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 13161 rows containing non-finite outside the scale range
## (`stat_bin()`).

Figure4

t1 <- c(dat$baseline_car1, dat$baseline_car2, dat$baseline_car3, dat$baseline_car4)
t2 <- c(dat$update_car1,   dat$update_car2,   dat$update_car3,   dat$update_car4)


t1_last <- str_sub(as.character(t1), -1, -1) |> as.numeric()
t2_last <- str_sub(as.character(t2), -1, -1) |> as.numeric()


T1 <- ggplot(data.frame(value = t1_last), aes(x = value)) +
  geom_bar(aes(y = after_stat(prop)), fill = "dimgray") +
  scale_x_continuous(breaks = 0:9) +
  labs(x = "last_digit_Time1", y = "Prop") +
  ylim(0, 0.25)


T2 <- ggplot(data.frame(value = t2_last), aes(x = value)) +
  geom_bar(aes(y = after_stat(prop)), fill = "dimgray") +
  scale_x_continuous(breaks = 0:9) +
  labs(x = "last_digit_Time2", y = "Prop") +
  ylim(0, 0.25)


T1 + T2
## Warning: Removed 33211 rows containing non-finite outside the scale range
## (`stat_count()`).
## Removed 33211 rows containing non-finite outside the scale range
## (`stat_count()`).