2017年2月14日 星期二

讓你不忘東忘西的方法

不知道大家有沒有那種要做某件事情(例如要去寄東西、要去買什麼等等),記了半天結果睡覺前才想到忘了做的情況呢?這篇文章提供了一個辦法,就是和某個一定會見到東西做連結,當作是一個記憶點的 cue。

賓州大學和哈佛合作了一個簡單的實驗,就是派助理在某個禮拜二去劍橋(哈佛所在的那個劍橋)的某間咖啡廳門口發 coupon,上面寫說兩天後也就是禮拜四,拿個那個 coupon 去店裡消費就可以少 $1。他們發了五百張 coupon,其中有一半(250張)只寫付帳時記得拿給收銀員,另一半寫禮拜四那天會有一個外星人坐在收銀員旁邊,還放了一個外星人的圖片在 coupon 傳單上面。結果兩天後,有 24% 拿到外星人傳單的人記得用 coupon,沒有外星人的只有 17% 的人記得。在這個實驗裡,外星人被用來和 coupon 做連結,是一個記憶的 cue,你不用特別去記,但是看到他就會記得要用 coupon。

不過即使這個記憶方法有效,但仍有許多人不覺得自己需要這樣做。例如他們其中一個實驗,是看參與者願不願花 $0.03 在一個記憶的 cue (大象符號)上面來提醒他們去賺 $0.60。在這個實驗裡,參與者會做一份約費時 15 分鐘的線上問卷,每答對一題可得 $0.03,然後在前面幾題中,會有一頁出現大象圖片,說如果你在第 11 頁的題目選 E 就可以得到 $0.60,然後問你願不願意花 $0.03 得到一個記憶 cue,記憶的 cue 就是會在第 11 頁出現大象符號提醒你選 E,但是只有 53% 的人願意花 $0.03 去得到那個 cue,結果就是願意花 $0.03 的人最後得到 $0.60 的比例比不願意花 $0.03 的高很多。

這感覺是個不錯的方法,印象中之前有試過,就是告訴自己如果看見什麼就要記得幹嘛,然後把那個東西隨身帶著(例如掛在包包上),每次拿包包或打開包包看見那個東西就會提醒自己要幹嘛。不過說實在的,現在手機功能這麼多,我通常都會記在 Google Calendar,設個時間,時間一到就會跳出來提醒,如果當下沒時間做,就把提醒往後移到一個有空的時間,科技無敵啊哈哈~~ XD



Article:

Todd Rogers & Katy Milkman, A New Way to Remember: The Power of Quirky Memory Jogs. Scientific American (2017)


Paper:

T Rogers & KL Milkman, Reminders Through Association. Psychological Science (2017)











2017年2月10日 星期五

加拿大的大麻管制

今天去聽了中心一個演講,是關於大麻管制的,跟科學沒太大關係,但其實科學和政治也脫離不了關係,因為講者是新聞中這位 UBC Psychiatry 的教授 Kerry Jung。

- 溫哥華(BC)使用的人口佔了全加拿大的一半(49%),而且大麻產量更是佔了全加拿大的 79%。(溫哥華人是有多需要用大麻來止痛 🙄)

- 大麻店在聯邦法(federal law)底下還是不合法的,所以市政人員會跟開店的說 "It's on your own risk",因為警察可以隨時翻掉你的店。

- 溫哥華目前是想參考華盛頓州(西雅圖)和 Colorado (Denver) 的規定來改善目前的規定。華盛頓州的規定比 Colorado 的規定嚴一點。

- 溫哥華的規定是大麻店只能開在商業區,而且不能在學校(有青少年出沒的地點) 300m 內開店,兩間店距離也要超過 300m,不能和 liquor store 共存,同樣至少要隔 300m。(說是原本要 200m,但是 school board 說兩百公尺學生走得到不行,其他人又覺得五百公尺太遠,300m 算是折衷,因為這個距離學生就會覺得遠。但是我覺得 300m 是遠在哪?走路不用五分鐘吧,我十五分鐘就可以走一公里了,至少要距離一公里吧,大家是有多懶?)

- 大麻店如果開在不合規定的地方,或是被附近社區抗議,就會被通知關店,但是會給六個月緩衝期,這期間可以繼續開店,講者說因為溫哥華的這種(管制)做法沒多倫多強硬,所以大麻店被搶的情況不像多倫多那麼嚴重。

- 目前試圖把大麻店分成兩類,一種是 compassion club,裡面有諮詢、馬殺雞和施藥等等的服務,開店年費是 CAD$1000,如果只是 retailer,開店年費是 $10,000,目前是希望推 compassion club (並且可以和研究合作),而不是 retailer,所以費用差很多。不過賣大麻(retailer)的利潤很高,年收入可達 $6M,所以一年繳一萬年費對他們來說是小意思。

- 賣大麻的覺得他們跟其他商業比,抽的稅比較多的話就是不公平,不然就是說,為什麼不能比照 alcohol。

- 加拿大目前的情況是買賣大麻是 cash only,到時候要抽稅的話也是一個需要解決的問題。還有就是抽稅的話要抽多少?如果太高導致價格太高,大家還是會往黑市買,無法有效杜絕 black market。

- 有人提議把大麻列入 pharmacy,但是藥劑師會覺得很怪,覺得自己在賣大麻,據說有個提案是不然放在藥妝店(Shopper's Drug Mart, London Drug)裡賣。(但我覺得這樣說不定比較好,因為比較好控管,現在情況是很多店都被警告違反 bylaw 了還是照開。)

- 另外就是 recreational use 合法化的問題,要不要和 medical use 分開,但講者好像不以為然,說他認為很難區分 medical use or recreational use。



News:

The Globe and Mail / Vancouver slowly but surely shutting down rogue pot shops









2017年2月5日 星期日

R | 畫圖 ggplot2

用 ggplot2 畫圖,裡面有各種圖,請參考這裡:Geoms
這邊存筆記,細節教學請參考這裡:Introduction to R - Part 2

library(ggplot2)
data(mpg)

ggplot 是 ggplot2 中的 function,記得在跑之前要放 library(ggplot2),先跑過這個再跑圖。


點圖:geom_point()

ggplot(mpg, aes(x = displ, y = cty)) + geom_point()

p <- ggplot(mpg, aes(displ, cty)) + geom_point() ## default 是 x, y,所以可以省略。
p

class(p) ## class() 告訴你這個 object 屬於什麼

ggsave("plot1.pdf") ## 把圖存成 pdf file

ggplot(mpg, aes(hwy, cty, colour = class)) + ## 加入顏色,依 class 分色。
  geom_point()

# 分兩層時,+ 要放在一行的最後才能跑。

ggplot(mpg, aes(displ, class, color =  drv)) +
  geom_point()

ggplot(mpg, aes(x = hwy, y = cty, colour = cyl)) +
  geom_point()
## 指定 cyl 的顏色,如果沒指定顏色,會自動用色階。

ggplot(mpg, aes(x = hwy, y = cty, colour = factor(cyl))) + geom_point()
## 指定 cyl 裡的各個數字(分類)用不同顏色。

和上面不同的是如果沒有加 factor,會用連續數字畫色階,例如圖旁的標示會出現 4-7 的色階。如果用 factor,cyl 裡面有的數字(分類)才會出現,例如 cyl 裡面只有 4, 5, 7, 8,圖旁邊的 figure legend 就只會出現這四個點和四種顏色。

ggplot(mpg, aes(displ, cty)) +
  geom_point(color='blue')
## 如果要指定顏色的話,要放在 geom_point() 裡面,而不是放在 aes() 裡面。

ggplot(mpg, aes(x = hwy, y = cty, shape = factor(year))) + ## 用點的樣式來區分
  geom_point()

ggplot(mpg, aes(hwy, cty, size =  displ)) +
  geom_point(color='blue') ## 用點的大小來區分

ggplot(mpg, aes(x = hwy, y = cty, colour = factor(cyl),
  shape=factor(year), size=displ)) + ## 可以合併所有的參數在一張圖裡
  geom_point()


Histogram: geom_histogram()

ggplot(mpg, aes(cty)) +
  geom_histogram(bins=10) ## number of bins. (overridden by binwidth; defaults to 30)

ggplot(mpg, aes(x=cty)) +
 geom_histogram(binwidth = 1, color='blue')
## The width of the bins. The default is to use bins bins that cover the range of the data.

ggplot(mpg, aes(x=cty)) +
 geom_histogram(aes(y=..ncount..))
## ncount: count, scaled to maximum of 1 (Y-axis 範圍變成 0 到 1。)


頻率圖 frequency polygons:geom_freqpoly()

ggplot(mpg, aes(x=cty)) + geom_freqpoly(bins = 10, color='blue')

ggplot(diamonds, aes(x=price, colour=cut)) + geom_freqpoly(bins = 10)

(ps. histogram & freqpoly 細節語法可以參考這裡:histograms & frequency polygons)


Bar graph: geom_bar()

ggplot(mpg, aes(x=cty, color=cyl)) + geom_bar(bins = 10)


Box plot: geom_boxplot()

ggplot(mpg, aes(factor(cyl), cty)) + geom_boxplot()

ggplot(mpg, aes(factor(cyl), cty)) +
  geom_boxplot(coef = NULL)  ## length of the whiskers as multiple of IQR (defaults to 1.5)

ggplot(mpg, aes(x=reorder(drv, cty, median), y=cty)) +
  geom_boxplot() ## Y-axis 數值由左到右排列成由小到大

ggplot(mpg, aes(factor(drv, levels=c('f', 'r', '4')), cty)) + ## 指定 X-axis 排序
  geom_boxplot()  

(ps. box plot 細節語法可以參考這裡:box plot)


Smoothers

A “smoother” is a line overlaid on the plot that can help bring out the dominant pattern by leaving out some of the variability (“wigglyness”) in the data.

加一條曲線圖(regression line),預設有 confidence intervals 的灰色陰影。

ggplot(mpg, aes(displ, hwy)) +
  geom_point() +
  geom_smooth() ## regression line

ggplot(mpg, aes(x=displ, y=hwy)) +
  geom_point() +
  geom_smooth(se=FALSE, method = "lm")
#把陰影去掉:se=FALSE
# lm: least-squares linear regression

ggplot(mpg, aes(displ, hwy, shape=factor(cyl))) +
  geom_point() +
  geom_smooth(method="lm")

p1 <- ggplot(mpg, aes(displ, hwy)) +
  geom_point(aes(colour=factor(cyl))) +
  geom_smooth(aes(y = cty), se=FALSE) ## regression line

p2 <- ggplot(mpg, aes(displ, hwy))
 #把第一層 aes() 設成一個獨立 layer,這樣就不用每次重複打。
p2 +
 geom_point(aes(colour=factor(cyl))) +
 geom_smooth(method="lm") ## least-sequres linear regression

p2 +
 geom_point(aes(colour=factor(cyl))) +
 geom_smooth(aes(colour=factor(cyl)), method="lm")
 # 把 aes() 設在 smoother 裡就會每個 factor 都有一個 regression line。

# 跟 p2 相比

p3 <- ggplot(mpg, aes(displ, hwy, color=factor(cyl))) # 把 aes() 設在第一層會有同樣的效果
p3 +
 geom_point() +
 geom_smooth(method="lm")


Grouping

p2 <- ggplot(mpg, aes(displ, hwy))
p2 +
 geom_point() +
 geom_smooth(aes(group=factor(cyl)), method="lm", se=FALSE)


ggplot(mpg, aes(x=displ, y=hwy)) +
  geom_point() +
  geom_smooth(se=FALSE, method = "lm", formula = y~poly(x,2))








R | 常用基本語言

RStudio 視窗中,R Script 是寫程式的地方(下圖左上),Console 是跑程式的地方(左下),可以在 R Script 的地方寫好按右上的 "Run",結果會在 Console 視窗裡出現,簡單的程式可以直接寫在 Console 裡面跑。Environment (右上)會顯示所有的 variables。

Ps1. 如何新增 R Script:File >  New File > R Script
Ps2. 如何安裝 RStudio,參考此頁:Setup instructions
Ps3. 此為筆記,其他細節請參考此頁:Introduction to R - Part 1


(點這裡看放大圖片)

R 裡面可以設定 variable or object,用 <- 設定,可以是數字或是文字。
在 R 語言裡面 ## 可用作註釋,等於 C++ 裡面的 //。(以下黃色背景為跑 R Script 後在 Console 出現的結果)

Ex: variable x1, x2, y
x1 <- 3     ## x1 = 3
x1
[1] 3

x2 <- 1 + 2     ## 計算 1 + 2
x2
[1] 3

y <- "Hello"     ## object 也可以設成文字
y
[1] "Hello"

以上三個可以寫在 R script 裡,然後按 "Run",或是在 Console 裡面打 x1, x2, y 跑出來,也可以直接全部打在 Console 的地方。在 Console 打 x1 和 x2 都會出現 [1] 3,打 y 會出現 [1] "Hello"。

R 裡面有很多內建檔案可以拿來練習,例如 mtcars。
在 Console 打入下面的語言可以查詢,會顯示在左上角的視窗。

library()
查看有什麼可用的 packages

data()
查有哪些檔案資料可用


Functions in R

rm()
remove, 用來移除 variables
Ex: rm(x1)

ls()
list, 列出所有的 variables

data()
叫出 R 裡面的 data, 可以是內建的檔案。
Ex: data(mtcars)
(ps. mtcars 為 R 裡面內建的檔案資料。)

View()
觀看叫出的 data,會顯示在 script 的那個視窗裡。
Ex: View(mtcars)

str()
觀看檔案資料的細節
Ex: str(mtcars)

summary()
觀看檔案資料的總節
Ex: summary(mtcars)

dim()
dimension, # of row and column.
Ex: dim(mtcars)
[1] 32 11
(ps. row = 32, column = 11)

nrow()
# of rows
Ex: nrow(mtcars)
[1] 32

ncol()
# of columns
Ex: ncol(mtcars)
[1] 11

head()
列出檔案資料中的前幾項
#head(x, #)
x = object or dataframe
n = number, # of elements
Ex: head(mtcars, 10)
## 列出 mtcars 的前十個 variables 的資料

查詢檔案資料的某個 variable:dataframeName$VariableName
Ex: dataframe = mtcars, variable = mpg
z <- mtcars$mpg     ##指定一個 variable 的名稱
z
##會叫出 mtcars 檔案裡的 mpg

median(dataframe$variable)
檔案的某個 variable 的中間值
Ex: dataframe = mtcars, variable = mpg
median(mtcars$mpg)
## mtcars 檔案裡 mpg 的 median

max(dataframe$variable)
檔案資料裡某個 variable 的最大值
Ex: max(mtcars$mpg)

min(dataframe$variable)
檔案資料裡某個 variable 的最大值

mean()
檔案的 mean value
Ex: mean(mtcars$mpg)
## 算出 mtcars 裡的 mpg 的 mean value

sd()
算出 standard deviation
Ex: sd(mtcars$mpg)

sapply(dataframe, function)
算出檔案裡的所有 variables 的指定數據,例如 mean。
Ex: dataframe = mtcars, function = mean
sapply(mtcars, mean)
## 算出 mtcars 裡面所有 variables 的 mean value

quantile(x, probs = )
在檔案資料中,分佈圖(distribution)中某些比例的數值。
x = data values, or dataframe$variable
Ex: quantile(mtcars$mpg, prob = 0.5)
## value at 50th (50%) percentile

quantile(x, probs = c())
在檔案資料中,分佈圖(distribution)中某些比例的數值。
x = data values, or dataframe$variable
probs = (0, 0.25, 0.75)
## value at 0-th (0%), 25-th (25%) and 75-th (75%) percentile
Ex: quantile(mtcars, probs=c(0, 0.25, 0.75))

Note the value of the “probs” argument: c(0, .5, 1). This is itself a three-element vector.
Ex: c(0, 0.5, 1)
[1] 0.0 0.5 1.0


table(dataframe$variable)
把檔案資料裡的某個 variable 資料列成 table
Ex: table(mtcars$cyl)
4 6 8
11 7 14
## cyl 資料中,4 有 11 個,6 有七個,8 有 14 個。

xtabs(~variable, data=dataframe)
指定某個檔案資料的某個 variable 做成 cross-table,跟 table() 很像,但是會列出 variable 的名稱。
Ex: xtabs(~cyl, data=mtcars)
cyl
468
11714
##出現的表格會和 table(mtcars$cyl)的一樣,但是會多 cyl 在表格上方。

xtabs(~variable1+variable2, data=mtcars)
variable1 代表 Y 軸或(對 X 軸的) response,variable2 代表 X 軸。
Ex: xtabs(~cyl+am, data=mtcars)

am
cyl 0 1
4 3 8
6 4 3
8 12 2
## cyl 的 4 當中(共 11 個),有三個的 am 是 0,八個是 1。


Read/Write files

read.csv()
讀 csv 裡的檔案
Ex: library(readr)
Exp01 <- read_csv("~/Desktop/R program/GluA1/Exp01.csv")
View(Exp01)
## 或是直接 import from csv file

write.csv()
把 R 裡面的檔案資料轉成 csv file
Ex: write.csv(cars, "cars.csv")
## 把 R 裡面內建的 cars 檔案資料轉成 cars.csv,轉成 csv 的檔案會出現在右下角視窗的 "Files" tab 裡面。

write.table()
把 R 裡面的檔案轉成 csv file,但是全部都放在同一格,需要加分格和欄位名稱。
Ex2: write.table(cars, "cars2.csv", sep=",", row.names=TRUE, col.names=TRUE)
## 會跟 write.csv() 寫出來的一樣,但是第一欄的第一格不是空白,第二欄的名稱會跑到第一欄的第一格。

Ex2: write.table(cars, "cars3.csv", sep=",", row.names=TRUE, col.names=NA)
## 會跟 write.csv() 寫出來的一樣,第一欄的第一格是空白。
By default there is no column name for a column of row names. Use col.names = NA if you want to add a blank column name, which is the convention used for CSV files to be read by spreadsheets.


Console 裡常用的功能(下圖左下)


(點這裡看放大圖片)

?
查詢功能或檔案
Ex: ?rm()
##查詢 rm() 是什麼功能,解釋會出現在 Help 的視窗(右下)。

help()
Ex: help("dim")
##查詢 dim() 是什麼功能,解釋會出現在 Help 的視窗(右下)。

If the name has special characters, we need to put it in quotes:
help("+")
?"+"








2017年2月3日 星期五

Info | Data & R program

資料處理和 R program 的教學 (by UBC ECOSCOPE)

目前先放連結,之後會另外寫上課筆記。

如何安裝 R program,請參考此頁:Setup Instructions


Introduction to R Workshop Series

Part 1: R Studio, build-in data & data functions(筆記:R | 常用基本語言
Part 2: ggplot
Part 3: data frame, data manipulation


Working with data (link)

Part 1: data frame, data manipulation (same as Intro to R, Part 3)
Part 2: more data manipulation
Part 3: tidy data


Statistical Models Workshop Series (link)

Part 1: Analysis of Variance (ANOVA) in R
Part 2: Linear Regression and Linear Mixed Effects Models
Part 3: Generalized Linear Models

















2017年2月2日 星期四

2017年1月29日 星期日

女孩從六歲開始就覺得男生比較聰明

現今職場上,男女主管的比例還是有差,是性別歧視造成的嗎?還是因為在某些環境,女性本來就比較少?為什麼有些職業男性較多,女生較少呢?或者是反之。這裡先問一個問題,如果有人跟你說,「我們公司有一個人超聰明、超厲害的」,你直覺會認為這位超聰明的是男性,還是女性呢?

如果是男性,為什麼會有「聰明 = 男性」或是「厲害 = 男性」的..... 我們說它是刻板印象(sterotype)好了,為什麼會出現這種刻板印象呢?這和職場中男女性比例有關嗎?這個刊在 Science 的研究想知道這種刻板印象是從什麼時候開始的,是否會影響男女性未來在職場中的選擇或發展,還有和職場中的男女比例不平等是否有關。

他們先找來 96 位五到七歲的小孩,每個歲數各 32 位,男女生各一半,大多來自中產階級的家庭。他們給了小孩們三個 tasks。

1. 他們跟小孩說一個故事,一個關於很聰明的人的故事,然後給小孩們看四位成年人,兩男兩女,讓他們猜故事中那位聰明的主角是四位成年人中的哪位。

2. 讓小孩看好幾對成年人,同性(男男或女女)或異性(男女)皆有,然後讓小孩猜各組裡面聰明的是哪位。

3. 讓小孩完成三個題目,各題中有物件(榔頭)或特徵(聰明),小孩要猜物件或特徵屬於男性或女性的。

結果發現,小孩對聰明的性別刻板印象在五歲到七歲間有劇烈變化。五歲的男生和女生把聰明(brilliance)和自己同性別相連結(own-gender brilliance)的比例是差不多的,例如第一個 task 中,男生認為「聰明主角是男的」和女生認為「聰明主角是女的」的比例是差不多的。但是,六歲和七歲的女孩把聰明和女生連結的比例卻大大減少了,也就是說女生的 "own-gender brilliance" 認知比男孩低。

之後,他們擴大採樣人數,找來 144 位小孩,每個年紀各 48 位,男女各半,得到同樣的結果,女孩把聰明和自己相同性別連結在一起的比例從六歲開始就減少了。為什麼會這樣呢?和學校的表現有關嗎?於是他們問了小孩們類似 task 1,用來測驗刻板印象的問題:四個小孩中(兩男兩女),猜猜哪個學校成績比較好。結果不管哪個年紀的女孩,都會猜女生的成績比較好,表示對他們來講成績好和聰明是兩件事,她們的「男生 = 聰明」的刻板印象不是由成績而得來的。

於是,他們又測驗這種刻板印象是否會影響小孩的興趣。他們找來 64 位六歲和七歲的小孩,男女各半,然後介紹他們兩種遊戲,告訴他們一種是給聰明的人玩的,一種是給努力的人玩的。之後問小孩們對兩種遊戲的感想,例如「你喜不喜歡這個遊戲」。結果發現,女孩對聰明遊戲的興趣比男孩少,但是對努力遊戲的興趣則不然。因為之前的測試顯示五歲小孩還沒有「男生比較聰明」的刻板印象,所以他們也比較了五歲和六歲的小孩(五和六歲個 48 位,男女各半,共 96 位),發現五歲男女孩對遊戲感興趣的比例是差不多的,但六歲的女孩對遊戲的興趣比同齡的男孩低。這兩個遊戲測試的結果,對應了前三個測試的結果,小孩在五歲的時候還沒有 "brilliance = males" 的刻板印象,但是六歲開始就有了,女孩的 "own-gender brilliance" 比男孩低,但是男孩的在五到七歲之間都沒變,而這也直接或間接影響了女生對自己未來的想像。

看完時想說為什麼小孩六歲開始就有這種刻板印象,後來想想其實性別的刻板印象無所不在啊。從衣服開始有「男生 = 深色」和「女生 = 粉色」的刻板印象,有的玩具還會分男女(就算沒有,有些玩具的包裝就它給你印個男孩在上面),是說為什麼顏色和玩具有性別之分?如果從小就只丟芭比娃娃之類的給女生,而不是給她玩具車或遙控飛機之類的,她就比較難把女性和這些相關職業連結起來吧?

比較有趣的點是文中說男孩和女孩入小一的平均年紀分別為 6.87 和 6.72 歲,表示說男生比較聰明的刻板印象是進入學校後才開始的,所以學校有哪些事會讓女孩開始有這種刻板印象啊? (我自己是小三以前的事都不記得了 orz)此篇提出的一個可能是女生比較謙虛,因為被教導要謙虛("Modesty norms dictate that a woman should not boast about her own smarts, whereas we asked children to judge whether other people were smart."),但是呢,它又說這個年紀的小孩是自信心爆表的年紀,所以應該不是這個原因。XD(是說我還滿好奇在亞洲的情況是怎樣,女孩的 own-gender brilliance 比例應該更低,而且更早就開始有吧。)

而現在的職場上,男女比例有比較平衡嗎?男女性別的職業觀有比較進化嗎?也許該跳回最開始的問題,先問問自己,對於性別的刻板印象還在嗎?



Article:

Emma Hiolski, Young girls are less likely to believe their gender is brilliant as they age. Science (2017)


Paper:

L Bian et al, Gender stereotypes about intellectual ability emerge early and influence children’s interests. Science (2017)