顯示具有 衛生統計學-R 標籤的文章。 顯示所有文章
顯示具有 衛生統計學-R 標籤的文章。 顯示所有文章

2018年6月9日 星期六

大數據與R統計分享 (Sharing Big Data and R statistical Language)

    自從我研究統計, 尤是"衛生統計學"後(2005年開始吧!) 統計學近10多年有著很大的改變... 其中之一就是出現了"大數據"的概念.
    我記得研究生時, 教我統計學的老師, 仍是說: 抽樣... 由樣本統計量推向參數... 然而, 大數據因為大得可怕, 動輒就是數個GB, TB 甚至是PB的儲存量, 數據資料也來自廣大人群, 又何需要抽樣... 當然, 它的代表性及數據背後的意義與價值, 又是另一回事吧!
    所以一值都想學習大數據的處理與分析.
    自己也一直有些擔憂: 自己的沒有強的數學背景, 對統計或數學的理解不容易; 沒有很好的電腦編程基礎呵...

    近日從網絡上看到一本"被"掃瞄的相關書籍: 大數據分析: R基礎與應用. 便下載回來學習.
    該書不厚, 約有150多頁,內有些R語言編程及圖表說明, 所以我讀的較快 (約花了1個月吧!)
    它主要分開4部分:
1.大數據的基礎知識;
2.R統計語言的基礎知識與使用技巧;
3.一些較高級的統計內容與數據挖掘(Data Mining);
4.大數據分析的基本分析方法...
    總的來說, 前3部分還是寫的不錯, 言駭意簡. 但第4部分就寫得不好, 因為很多數學推導的內容, 而R實踐部分就"簡略"了很多; 讓我有感"接不下去"的感覺(或許是我這方面的知識膚淺呢!).
所以它適合有統計學基礎的讀者呵...

    好! 繼續努力~

2018年3月11日 星期日

一份學習R統計軟件的好讀物(A very good reading material of R statisitcal package))

    近日, 內地有位人士, 將學習R統計軟件比較好的讀物~<R語言實戰>, 閱讀後制成筆記形式. 並分享到某個內地有名的網站內.
    當然我第一時間把它下載回來, 並花了春節假期約10天的時間, 一口氣地讀完了! 很好呵~ 內容很齊全, 不但容易閱讀, 亦可很容易地理解它的思路.
    這位"人士"強調了: 該筆記資料不能作商業用途, 僅能作學習之用. 是值得尊敬的呢...
    現把它分享, 網址如下:


分享網址: https://pan.baidu.com/s/1iy3lDHfUWp8iJ3XcdNOcAQ

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進行卡方檢驗, 結果是


        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)

    昨晚一位好朋友微信問在RxC(即多行x多列)的表格進行卡方檢驗後, 知道差異有統計學意義, 應如何進行事後的兩兩比較分析呢~

    我知她僅能使用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)

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 freedom
AIC: 964.86

Number of Fisher Scoring iterations: 4
 
    它將brand變項自動啞變量了! 再看看如何出我們很重視的OR值, 結果與SPSS的結果無異呢...
     
> log.or<-logistic.display(log.fit)
> 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.
系數的估計方法有:
  1. 嶺跡圖
  2. 方差膨脹因子法
  3. 控制殘差平方和法
library(MASS) #嶺回歸法在MASS的統計包內---lm.ridge命令
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的列表對應
plot(lm.r1)
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 
這才與書上的結果一致...