[問題] 用*apply或dplyr::do批次跑ANOVA

作者: helixc (@_2;)   2015-11-17 16:23:55
[問題類型]:
程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
[軟體熟悉度]:
會GOOGLE然後依樣畫葫蘆寫分析程式
[問題敘述]:
手上有一筆資料,基本上要看在四個不同樣區(site)當中,物種種類(SpeciesType)
如何影響某個值(n),資料如:http://pastebin.com/qyLga5Za ,要跑ANOVA和TukeyHSD。
要用工人智慧自己寫一樣的程式碼四次目前是做得到的,但總想找到更聰明的方法。
理想上想要寫個程式一次把重要的統計欄位(如F-value, P-value...etc)整理出來。
看了各種資料,知道在R當中各種*apply是向量化處裡資料重要的指令,
我想做的工作理論上可以用*apply實現。
但目前只對基礎的apply比較熟悉,sapply/lapply今天摸一摸才比較懂,
而tapply/mapply還還沒有機會用過。
在股狗的過程當中也發現dplyr::do也可以做類似的工作,也查到了Wush978的簡略介紹,
但用一用還是有點卡住...是因為dplyr::do只能處裡data.frame的關係嗎?
*apply或dplyr::do的參考資料都是這個網頁 http://goo.gl/WYJXtC
[程式範例]:
1.用*apply的傳統方法,可以把aov塞進去。網頁用的是sapply,我改成lapply。
可以跑ANOVA還有TukeyHSD沒有問題
models <- lapply(unique((data$site)),
function(ste)
{aov(n~SpeciesType,data=data,subset=(site==ste))})
lapply(models,summary) # to summarize all the models
lapply(models,TukeyHSD)
2. 改用dplyr::do來寫,用lm的方法來寫沒問題,但缺點是不能直接套用TukeyHSD
data<-data %>% group_by(site)
models <-data %>% do(mdls= lm(n~SpeciesType, data=.))
models %>% rowwise %>% do(data.frame(anova(.$mdls)))
3. 改用dplyr::do來寫,用aov,但怎麼寫都會吐錯誤訊息...
data<-data %>% group_by(site)
models <-data %>% do(mdls=aov(n~SpeciesType, data=.))
models %>% rowwise %>% do(data.frame(summary(.$mdls)))
錯誤訊息:
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors =
stringsAsFactors) : cannot coerce class "c("summary.aov", "listof")" to
a data.frame
[環境敘述]:
R version 3.2.1 (2015-06-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=Chinese (Traditional)_Taiwan.950 LC_CTYPE=Chinese
(Traditional)_Taiwan.950
[3] LC_MONETARY=Chinese (Traditional)_Taiwan.950 LC_NUMERIC=C
[5] LC_TIME=Chinese (Traditional)_Taiwan.950
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] tidyr_0.2.0 readxl_0.1.0 ggplot2_1.0.1 dplyr_0.4.2 plyr_1.8.3
loaded via a namespace (and not attached):
[1] Rcpp_0.11.6 knitr_1.10.5 magrittr_1.5 MASS_7.3-41
munsell_0.4.2
[6] colorspace_1.2-6 R6_2.0.1 stringr_1.0.0 tools_3.2.1
parallel_3.2.1
[11] grid_3.2.1 gtable_0.1.2 DBI_0.3.1 htmltools_0.2.6
yaml_2.1.13
[16] lazyeval_0.1.10 assertthat_0.1 digest_0.6.8 reshape2_1.4.1
rmarkdown_0.7
[21] labeling_0.3 stringi_0.5-2 scales_0.2.5 proto_0.3-10
[關鍵字]:
*apply, dplyr::do
作者: Edster (Edster)   2015-11-17 21:31:00
你先寫好對一個物種的分析再來吧. 這樣對你比較好
作者: helixc (@_2;)   2015-11-17 23:07:00
我要做的分析有做出來啊,物種本身在這個分析不重要要看的只有某個值(n)在不同SpeciesType的狀況而已…

Links booklink

Contact Us: admin [ a t ] ucptt.com