統計分析

Excel: 計算單字出現次數

有時候我貪圖省事,就會拿 Excel 來作 interview 的 coding,其實codes不多的話,拿excel作coding 真的滿快、滿方便的。

通常我會把一句話或短的段落放在一個excel 的 cell,然後直接作 coding,像是abca。

問題就來了:如果我要知道全部有幾個 a、幾個b,該怎麼作呢?

非常簡單,在另外一個cell,用以下的公式:

=LEN(A2)-LEN(SUBSTITUTE(A2,"a",""))

A2 就是要計算的 cell。所以我會把所有的 cells 分別算次數,然後再加總。

這樣作如果熟練的話,其實滿快的。唯一的缺點就是如果你cell裡面句子長的話,你又直接作coding,會沒辦法知道你的codes對應哪一個部分。

Excel: 計算單字出現次數 Read More »

Stata: 加總同性質的資料(Aggregate similar Observations) ~2

以前寫過一篇:Stata: 加總同性質的資料(Aggregate similar Observations),裡面用的方法是collapse,這種情況用於:一個人有多筆資料 (用術語說,就是資料格式是長格式),你想要加總同性質資料,將每個人的資料變成一筆。

這種方法雖好,但如果你想要維持資料是長格式 (一個人有多筆資料),那collapse就不符合你的需求。

假設資料格式如下圖所示。sid代表student id,did代表文件 id,words代表每個文件的字數。

stata-aggregate-1

如果用 collpase 指令:

collapse (mean) words, by(sid)

結果會如下圖所示。原本一個學生有多筆sid,跑完collapse之後,每個學生只剩一筆資料了。

stata-aggregate-2

但這有可能不是你要的,你可能還想維持長格式,那該怎麼辦呢?重新載入資料,我們從頭來過。

如果想知道每個學生平均words,那可以利用egen指令:

bys sid: egen avgwords = mean(words)

結果如下圖所示:

stata-aggregate-3

兩種方法都可以,但結果稍有不同。要選用哪種,就看你要作哪種分析。

Stata: 加總同性質的資料(Aggregate similar Observations) ~2 Read More »

合併多csv或excel檔案為一個sheet

有時候要作統計分析前,有很多準備工作得作。如何把資料放到stata或其它統計軟體,就是一門學問。

最理想的狀況是:你只有一個excel或csv檔,你就可以輕易地匯入統計軟體。但常常人算不如天算,有時候你的資料是同樣格式,但你有幾十個甚至幾百個檔案。如果你直接匯入stata,那你每一個檔案得:1) 先匯入 2) 存成stata 格式 3) 清空資料,再匯入下一筆 4) 最後合併。

這太麻煩了。所以想辦法在excel或csv的時候,把多個檔案合併成一個,會省你很多時間。

上網半天,找了個還算省事的方法,步驟先說明如下:

1) 用軟體,將數個csv或excel檔,合併到一個spreadsheet裡。

2) 有必要時,重複上一步驟,最終還是得到一個檔。

3) 清理一下這個檔的表頭 (如果第一行是title而不是資料數值)。

4) 匯入 stata。

最關鍵的就是:如何合併?

上網半天,找到一個人家寫好的程式:http://jeeshenlee.wordpress.com/2010/09/23/jmc-excel-join-merge-combine-multiple-excel-sheets-or-excel-workbooks/

合併多csv或excel檔案為一個sheet Read More »

Stata: 時間變數處理

其實不管是資料庫或是統計資料,只要碰到時間變數,就要小心處理,免得因為coding錯誤造成資料不正確或格式不一致。

產生時間變數

在轉換成時間變數之前,變數通常是用兩種方式儲存的:一種是字串,一種是數字。字串就如同是:1 Jan 1960,變數就如同是:17869這樣的數字。這兩種格式都可以轉換成時間變數。

字串

如果是像1 Jan 1960 的string variable,你要轉換的方式是:

gen 新變數 = date(舊變數, "DMY”)

完成之後,你會發現新的變數的值是數字,像是0, 1046這樣的值。這是因為這個值是與1 Jan 1960 相比較所得的值,正值代表在這個時間之後幾天,負值代表在這個時間之前幾天。這種格式在許多資料庫都很普遍,毋需驚訝,只要再一步驟轉換即可。

數字

如果你的日期是與1 Jan 1960 所比較的值,只需要再一步,就可以轉換成可讀的格式了。轉換的語法如下:

簡單版:

format 新變數 %d

複雜版:

format %tdnn/dd/CCYY 新變數 <br />

至於要選哪一種,就看你看哪一種順眼了。

日期比較

一旦轉換到日期格式,就可以進行比較了。如果你要看兩個日期之間差幾天,就只要把兩個日期相減就行了。

日期加減

日期加減也是一樣,直接在原本的日期加減天數,這還是日期格式。

日期與特定日期加減

如果你想要你的日期與特定的日期加減,如1 Jan 2000,那這稍稍麻煩一點。

gen 新變數 = (mdy(1,1,2000) - 舊變數)

上面的語法就可以得知你的舊變數與1 Jan 2000相差幾天。如果你的舊變數是生日,你可以除以365.25來得知在當天幾歲。

參考資源

Using dates in Stata http://www.ats.ucla.edu/stat/stata/modules/dates.htm

Stata: 時間變數處理 Read More »

什麼是存活分析? (What is survival analysis?) 之二

接下來的問題是:有了這些資料,該怎麼分析呢?

你可能會想兩種方式:1) multiple regression; 2) logistic regression

Multiple regression

如果考慮用multiple regression,那最大的問題就是right censored,這些人婚姻狀況仍在持續進行中,是因為不繼續搜集資料了,才無法追蹤他們的婚姻狀況。對於這些人,你應該怎麼處理?不論是直接刪除這些資料,或是將這些人的值設為全體的平均值,都不是合理的處理方式。

另外,如果一個人有多段婚姻,multiple regression也不能正確估算每個人的背景對婚姻的影響。

Logistic regression

如果考慮用logistic regression,那所看的問題就不是長度,而是婚姻是否持續。但這樣作並沒有考慮到時間的長度,只能考慮如下的問題:黑人的離婚率是否比白人高?但就算不分析,你也可以想到:離婚率與婚姻長度可能有關係。如果你只看離婚率,而不看婚姻長度,對於「黑人的婚姻是否比白人婚姻持續更久」這樣的問題,估算就會有誤。

所以看到這裡,大概就知道存活分析(survival analysis)的使用時機。使用時機是:你多次觀察受試者,觀察受試者是否在某一個狀態 (比如:婚姻持續中或離婚;生存或死亡;通過英文檢定考試或未通過)。所以你的dependent variable,可以說是時間的長度,也可以說是狀態是否改變。

存活分析就是讓你更準確估計:某些因素(如:種族、社經地位)是否影響到某一狀態 (婚姻的長度) 的長度與發生機率。注意:你的資料必須是一個人觀察了多次,才適合使用這種方法。

什麼是存活分析? (What is survival analysis?) 之二 Read More »

Scroll to Top