自從我研究統計, 尤是"衛生統計學"後(2005年開始吧!) 統計學近10多年有著很大的改變... 其中之一就是出現了"大數據"的概念.
我記得研究生時, 教我統計學的老師, 仍是說: 抽樣... 由樣本統計量推向參數... 然而, 大數據因為大得可怕, 動輒就是數個GB, TB 甚至是PB的儲存量, 數據資料也來自廣大人群, 又何需要抽樣... 當然, 它的代表性及數據背後的意義與價值, 又是另一回事吧!
所以一值都想學習大數據的處理與分析.
自己也一直有些擔憂: 自己的沒有強的數學背景, 對統計或數學的理解不容易; 沒有很好的電腦編程基礎呵...
近日從網絡上看到一本"被"掃瞄的相關書籍: 大數據分析: R基礎與應用. 便下載回來學習.
該書不厚, 約有150多頁,內有些R語言編程及圖表說明, 所以我讀的較快 (約花了1個月吧!)
它主要分開4部分:
1.大數據的基礎知識;
2.R統計語言的基礎知識與使用技巧;
3.一些較高級的統計內容與數據挖掘(Data Mining);
4.大數據分析的基本分析方法...
總的來說, 前3部分還是寫的不錯, 言駭意簡. 但第4部分就寫得不好, 因為很多數學推導的內容, 而R實踐部分就"簡略"了很多; 讓我有感"接不下去"的感覺(或許是我這方面的知識膚淺呢!).
所以它適合有統計學基礎的讀者呵...
好! 繼續努力~
I wanna... to share some Epidemiological and Statistical things with you... ha-ha... (in Chinese-Big5)
2018年6月9日 星期六
2018年3月11日 星期日
一份學習R統計軟件的好讀物(A very good reading material of R statisitcal package))
2017年10月30日 星期一
計數資料的檢驗 (Testing of categorical data)
承接上一個內容, 以前我在讀研的時候老師只是說: 當分組資料和變量都是計數資料(categorical data)時, 如2x2表或RxC表, 就是用卡方檢驗, 直至讀博時都是這樣~ 但最近了解到, 這樣的情況還可用G test來解決, 而且據知它的理論與算法比卡方檢驗還更好!?(因為G test的算法比較簡單, 所以校正就較方便快捷; 理論上就較具優勢!~) 當然, 算G.test, 以我知暫時仍是R統計軟件才有.
如上次的例子,
有效 無效
靜脈注射 25 7
肌肉注射 22 10
口 服 藥 15 17
在R進行卡方檢驗, 結果是
參考內容:
1. http://www.stat.wisc.edu/~st571-1/gtest.R
2. http://www.biostathandbook.com/gtestind.html
如上次的例子,
有效 無效
靜脈注射 25 7
肌肉注射 22 10
口 服 藥 15 17
在R進行卡方檢驗, 結果是
Pearson's
Chi-squared test
data:
dat
X-squared = 7.1954, df = 2, p-value =
0.02739
而在R進行G test, 須先下載它的程式 (幸好已有人寫好, 並放在網上!), 只要把程式貼到R軟件並運行即可... 其結果是:
G-Test for Contingency Tables
Data:
有效 無效
靜脈注射 25 7
肌肉注射 22 10
口服藥 15 17
The test statistic is 7.19124 .
There are
2 degrees of freedom.
The p-value is 0.02744362 .
參考內容:
1. http://www.stat.wisc.edu/~st571-1/gtest.R
2. http://www.biostathandbook.com/gtestind.html
2017年10月21日 星期六
卡方檢驗後的兩兩比較分析 (Post Hoc analysis after Chi-square test is significant)
我知她僅能使用SPSS統計軟件, 就告知她: 在SPSS進行卡方檢驗事後的兩兩比較分析, 一般只能拆表, 而且要修正每個檢驗的p值(即Bonferroni校正呵...)
她又問到如何可以不用這樣"痛苦"? 我告訴她可以用R統計軟件吧... 但無奈她不懂R...
如有一數據集, 內容如下:
有效 無效
靜脈注射 25 7
肌肉注射 22 10
口 服 藥 15 17
在SPSS的處理如youtube的視頻那樣, 哇... 真的"痛苦"! 在R軟件呢?
#第1部份:處理數據
dat<-matrix(c(25,22,15,7,10,17),nrow=3,ncol=2)
rownames(dat)<-c("靜脈注射","肌肉注射","口服藥")
colnames(dat)<-c("有效","無效")
#第2部份:矩陣-組間兩兩比較, 注意用Bonferroni法校正p,即0.05/3=0.017
chi<-chisq.test(dat)#總結果x2=7.1954,p=0.02739
chi1<-chisq.test(dat[c(1,2),])#靜脈注射與肌肉注射比較,結果x2=0.3204,p=0.5714
chi2<-chisq.test(dat[c(1,3),])#靜脈注射與口服藥比較,結果x2=5.4,p=0.02014
chi3<-chisq.test(dat[c(2,3),])#肌肉注射與口服藥比較,結果x2=2.3063,p=0.1288
#第3部份:快捷方法
#install.packages("fifer")先安裝這統計套件
library("fifer")#載入套件
chi.result<-chisq.post.hoc(dat,test="chisq.test",control=c("bonferroni"))
##結果
## comparison raw.p adj.p
##1 靜脈注射 vs. 肌肉注射 0.5714 1.0000
##2 靜脈注射 vs. 口服藥 0.0201 0.0604
##3 肌肉注射 vs. 口服藥 0.1288 0.3865
其實第2部份與第3部份任選1個即可... 而且紅色字內容只是註釋, 實際操作時沒有必要寫!
結果與視頻的有不同, 是因R的chisp.test預設了作"連續校正的"(correct=TRUE). 如果改為correct=FALSE, 結果就完全一樣啦...
2017年5月20日 星期六
在R軟件內進行回歸分析及啞變量化 (Performing regression and dummy in R)
回歸分析是統計學的一個很重要內容, 因為它可以尋找原因... 但回歸分析的種類很多, 這可以它的依變項(Dependent variable)及它的功能來分類吧!
在R統計軟件, 進行回歸分析可以很方便地完成, 例如主要的回歸分析:
1.Linear Regression: lm(), glm(family=gaussian)
2.Logistic Regression: glm(family=binomial)
3.泊松回歸: glm(family=poission)
4.多元無序回歸: nnet::multinom()
5.多元有序回歸: MASS::polr()
只要確定了函數, 公式, 就可以完成對應的回歸了!
另外, 回歸分析的一個重點步驟, 就是進行啞變量(Dummy)了, 其實在數據庫內, 將變項的類型設定好, 如計數資料設為int, 分類資料設為factor, 在進行主要的回歸分析時, R會自動進行啞變量的處理, 如:
一個數據庫有4個變項(num, brand, female, age), 在初初讀入時全部都設定為int(數值型), 設定brand及female兩變項為factor(分類型)後, 以female為依變項進行Logistic Regression, 即可得:
> log.fit<-glm(female~brand+age,family = binomial,data = example_logistic_regression)
> summary(log.fit)
-1.5523 -1.3217 0.8738 0.9375 1.1586
(Intercept) 1.08843 1.17784 0.924 0.35544
brand3 0.46076 0.22489 2.049 0.04048 *
brand2 0.55677 0.19261 2.891 0.00384 **
age -0.02747 0.03712 -0.740 0.45928
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
AIC: 964.86
它將brand變項自動啞變量了! 再看看如何出我們很重視的OR值, 結果與SPSS的結果無異呢...
> log.or<-logistic.display(log.fit)
在R統計軟件, 進行回歸分析可以很方便地完成, 例如主要的回歸分析:
1.Linear Regression: lm(), glm(family=gaussian)
2.Logistic Regression: glm(family=binomial)
3.泊松回歸: glm(family=poission)
4.多元無序回歸: nnet::multinom()
5.多元有序回歸: MASS::polr()
只要確定了函數, 公式, 就可以完成對應的回歸了!
另外, 回歸分析的一個重點步驟, 就是進行啞變量(Dummy)了, 其實在數據庫內, 將變項的類型設定好, 如計數資料設為int, 分類資料設為factor, 在進行主要的回歸分析時, R會自動進行啞變量的處理, 如:
一個數據庫有4個變項(num, brand, female, age), 在初初讀入時全部都設定為int(數值型), 設定brand及female兩變項為factor(分類型)後, 以female為依變項進行Logistic Regression, 即可得:
> log.fit<-glm(female~brand+age,family = binomial,data = example_logistic_regression)
> summary(log.fit)
Call:
glm(formula = female
~ brand + age, family = binomial, data = example_logistic_regression)
Deviance Residuals:
Min
1Q Median 3Q
Max -1.5523 -1.3217 0.8738 0.9375 1.1586
Coefficients:
Estimate Std. Error z value
Pr(>|z|) (Intercept) 1.08843 1.17784 0.924 0.35544
brand3 0.46076 0.22489 2.049 0.04048 *
brand2 0.55677 0.19261 2.891 0.00384 **
age -0.02747 0.03712 -0.740 0.45928
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 965.47 on 734
degrees of freedom
Residual deviance:
956.86 on 731 degrees of freedomAIC: 964.86
Number of Fisher
Scoring iterations: 4
> log.or
Logistic regression predicting female : 1 vs 0
crude OR(95%CI) adj. OR(95%CI)
brand: ref.=1
3 1.47 (0.99,2.16) 1.59 (1.02,2.46)
2 1.68 (1.17,2.42) 1.75 (1.2,2.55)
age (cont. var.) 1.01 (0.94,1.07) 0.97 (0.9,1.05)
P(Wald's test) P(LR-test)
brand: ref.=1 0.014
3 0.04
2 0.004
age (cont. var.) 0.459 0.459
Log-likelihood = -478.4285
No. of observations = 735
AIC value = 964.8569
當然據我所知, R軟件在有些回歸分析中不能自動啞變量的, 就可參考些文章了!
2016年12月10日 星期六
一本結合流行病學與R統計軟件的書(A book which is combined with Epidemiology and R statistical soft wares)
《應用R軟件和Epicalc程序包分析流行病學數據》(中文版)
記得在很久以前(大約在2010年), 我在留校讀博時, 已在南醫大的圖書館見過這本書! 當時它是放在"新書推薦"類似的書架上. 但沒有借閱, 只是隨手地翻閱過.
直到近3年開始研究R統計軟件, 知道R是可以結合很多的功能統計包, 應用到不同的領域, 包括流行病學時, 才醒起有過這樣的一本書.
當然, 可以在網上訂購的, 但在互聯網絡上有很多其它R的讀物, 便拖著拖著. 而且書已很多, 再買書, 又未必看得完, 內心感到自責. 所以間歇地都會試在互聯網絡上找找, 有沒有人將這本書的"掃瞄版"放上.
大約在10月中旬, 又試著在互聯網上找這本書, 結果在"百度雲"找到呢~ 便把它下載回來, 並一口氣地讀完...中文版全書約250多版, 基本分為三個部份:
第一部份: 介紹R統計軟件的安裝及基礎應用;
第二部份: 流行病學常用到的數據分析方法, 如: RR, OR等值的計算, 分層分析, 各類的回歸分析等...
第三部份: 主要是數據的整理及表達.
它不單介紹常用的流行病學及統計學基本知識. 而且每章內容都以一個例子, 結合其數據操作開始. 流行病學的內容都較齊全.
但亦有不足之處: 就是中文版是翻譯自英文版的原始版, 所以內容有些舊. 而且翻譯的內容並不很通順, 有些內容更是不易明白(可能是我的中文水平差勁吧!?)
總的來說, 若是流行病與衛生統計學的專業人員或學生, 想研習R及流行病學及統計學, 這本書是值得一讀的. 且若英語能力較好的, 建議可讀讀英文的 (免費可在互聯網絡下載)呢~~~
2016年8月14日 星期日
再來兩篇有關R統計軟件的閱讀材料 (Two reading materials of R statistical package more!)
用R軟件的好處很多, 已說多了! 但也有其限制呢~ 如處理數據的滙入、整理時, 就不如表格式+下拉菜單式的統計軟件方便, 如SPSS, STATA等...其實在很久之前, 已想找有關這些方面的R文章, 來補習一下處理數據的滙入、整理等知識與技能, 但部份的書較著重在統計學方面的論述. 最近在偉大的互聯網上找到了...
兩份的閱讀材料是免費的, 分為兩部份:
第一部份:
是供初學者閱讀的, 主要的內容是安裝R、簡易的統計函數功能、基礎的R繪圖及編程. 由於我算是有一定的基礎, 所以這部份較容易; 另外, 較有用的是它列出了其他有用的資源...第二部份:
是供有基礎的讀者的, 內容有數據文件的整理技巧(包括用了dplyr), 高級的製圖擴展包ggplot2的使用, 及在R內繪制統計地圖等... 對於我及統計地圖而言, 目前只能用簡易的方法, 所以其內裏的方法較高深呵...能取閱讀材料的地址:
初學者 ---http://core0.staticworld.net/assets/2015/02/17/r4beginners.pdf
有基礎的讀者---http://core0.staticworld.net/assets/media-resource/106345/r_advbeginner_v5.pdf
2016年8月11日 星期四
簡簡單單地在R統計軟件劃圖 (Simple Drawing graphs in R statistical software)
我想主要原因有兩個:
1.
統計學指標較精確, 其次是統計表;
2.
統計學指標在科研文章內的佔位較小, 而統計圖就佔位較大; 並且刊印時為保效果, 常用特別的排版技術呢~
但是, 一幅好的統計圖, 可勝過千言萬語!
而很多統計軟件, 也是以其繪製的統計圖優美作買點… 誠言, SAS的圖是較差的、SPSS一般、STATA較好! (只為個人感觀). 而R呢! 它本身的繪圖與SAS差不多, 但隨著ggplot2等擴展包, 現在的繪圖效果已不錯呢.
當然, 付出的是需要學習ggplot2! (若不要求太高, 也能較易應付的)
近來讀到這篇文章, 僅使用R基本的繪圖功能, 也能繪出不錯的統計圖呢!
另外, 在R軟件內, 也找到1份不錯的ggplot2擴展包總結表, 好實用!
參考文獻:
http://www.joyce-robbins.com/wp-content/uploads/2016/04/effectivegraphsmro1.pdf
https://www.rstudio.com/wp-content/uploads/2015/12/ggplot2-cheatsheet-2.0.pdf
2016年6月28日 星期二
在R內實踐嶺回歸 (Doing Ridge regression in R Statistical software)
如上次的百分位數回歸的一節所說, 作線性回歸的基本要求是LINE, 其中I(數據獨立性)和N(數據呈正態分佈)是較難符合要求的...不符合N時, 可試用百分位數回歸方法解決; 而不符合I時, 可試用嶺(岭)回歸方法!
為方便驗證是操作的正確性, 現引用高惠璇老師在《實用統計方法與SAS系統》P100-103例子作為對照! 好! 現在開始...
有這樣的一個數據:
#在R軟件內輸入並合成數據集d452, x1:國內生產總值, x2:儲存量, x3:總消費量, y:進口總額
x1<-c(149.3,161.2,171.5,175.5,180.8,190.7,202.1,212.4,226.1,231.9,239.0)
x2<-c(4.2,4.1,3.1,3.1,1.1,2.2,2.1,5.6,5.0,5.1,0.7)
x3<-c(108.1,114.8,123.2,126.9,132.1,137.7,146.0,154.1,162.3,164.3,167.6)
y<-c(15.9,16.4,19.0,19.1,18.8,20.4,22.7,26.5,28.1,27.6,26.3)
d452<-data.frame(x1,x2,x3,y)
lm.1<-lm(y~.,data = d452) #試作普通的線性回歸分析
summary(lm.1)
#結果
Call: lm(formula = y ~ ., data = d452)
Residuals:
Min 1Q Median 3Q Max
-0.52367 -0.38953 0.05424 0.22644 0.78313
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -10.12799 1.21216 -8.355 6.9e-05 ***
x1 -0.05140 0.07028 -0.731 0.488344
x2 0.58695 0.09462 6.203 0.000444 ***
x3 0.28685 0.10221 2.807 0.026277 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.4889 on 7 degrees of freedom
Multiple R-squared: 0.9919, Adjusted R-squared: 0.9884
F-statistic: 285.6 on 3 and 7 DF, p-value: 1.112e-07
x1為負值,與現實世界不符合...
library(car)
vif.1<-vif(lm.1)
vif.1
#結果
x1 x2 x3
185.997470 1.018909 186.110015
x1及x3的VIF大於10,有多重共線性
cor.1<-cor.test(x1,x3)
cor.1
#結果
Pearson's product-moment correlation
data: x1 and x3
t = 40.448, df = 9, p-value = 1.718e-11
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.9890918 0.9993142
sample estimates:
cor
0.9972607
x1與x3的相關系數達0.997(p<0.01),有強烈的相關性
#在這種情況下,線性回歸的結果受多重共線性影響,方差會變得很大(因合力問題)!
為使方差變小,得加入一個系數(lambda).但這個系數的最小取值得依賴於方程中的β和σ2.
系數的估計方法有:
嶺跡圖方差膨脹因子法控制殘差平方和法
lm.r1<-lm.ridge(y~.,data = d452,lambda = seq(0,0.5,0.01)) #lambda系數可用seq序列, 讓函數自已試
#結果
x1 x2 x3
0.00 -10.127988 -0.051396160 0.5869490 0.2868487
0.01 -9.861266 -0.020071030 0.5920564 0.2411973
0.02 -9.696169 -0.001390176 0.5948969 0.2139345
...
0.50 -8.466721 0.064243563 0.5832040 0.1140136
![]() |
| 嶺跡圖, 與lm.ridge的列表對應 |
select(lm.r1)
#結果
modified HKB estimator is 0.006855363
modified L-W estimator is 0.01283802
smallest value of GCV at 0.01
被選出最小的lambda系數是0.01
lm.r2<-lm.ridge(y~.,data = d452,lambda = 0.01)
lm.r2
#結果
x1 x2 x3
-9.86126637 -0.02007103 0.59205639 0.24119727
若以lambda系數為0.01再代入計算,則得嶺回歸方程為上.
lm.r3<-lm.ridge(y~.,data = d452,lambda = 0.02)lm.r3#結果
x1 x2 x3
-9.696168972 -0.001390176 0.594896865 0.213934536
若以該書的0.02代入嶺回歸公式,得上述結果!與書的結果不符合...
lm.r4<-lm.ridge(y~.,data = d452,lambda = 0.22)
lm.r4
#結果
x1 x2 x3
-8.92769761 0.05734309 0.59541713 0.12663337
這才與書上的結果一致...
訂閱:
文章 (Atom)






