作者celestialgod (攸蓝)
看板R_Language
标题Re: 有没有可以快速呈现多重比较的MACRO?
时间Fri Aug 1 00:09:00 2014
不好意思,我之前忘记回您信了
我不知道是否有直接的方法做
我是直接写一个function去做的
我知道您是初学者,但是很抱歉的
我所能做的就是奉上我的R code
您如果有任何问题可以再问我,谢谢
code:
# 资料生成
k = 4
n = 3:(k+2) * 100
set.seed(100)
mu = sample(seq(-3, 3, length = 100) * 1.5, k)
sigma = sample(seq(0.5, 10, length = 100), k)
y = unlist(lapply(1:k, function(i) rnorm(n[i], mu[i], sigma[i])))
group = unlist(lapply(1:k, function(i) rep(i, n[i])))
dat = data.frame(y, group)
# 以anova scheffe test为例
# 有很多变数的话,主要是更动scheffe.test第二个element
# 以及aov的公式input,要用paste做。
# 可以用names(dat)做input,前面再加个回圈就好。
library(agricolae)
anova_result = aov(y ~ group, dat)
sheffe_test_result = scheffe.test(anova_result,
"group",group=FALSE,console=FALSE)
order_v = order(sheffe_test_result$means[,1])
comparison_result = sheffe_test_result$comparison
sig_level = 0.05
comparison_pairs = rownames(comparison_result)
sign_v = sapply(1:(k-1), function(j){
pair = order_v[j:(j+1)]
location = which(grepl(pair[1], comparison_pairs)
& grepl(pair[2], comparison_pairs))
if(comparison_result$pvalue[location] < sig_level)
return(">")
else
return("=")
})
output_v = paste(order_v[1:2], collapse = paste("", sign_v[1], ""))
if(length(sign_v) > 1){
for(i in 2:(k-1))
output_v = paste(output_v, sign_v[i], order_v[i+1])
}
output_v
# "4 > 2 = 1 > 3"
※ 引述《wanson (望生)》之铭言:
: 在统计板有人提到可以像用R 将快速整理出多重比较
: 如
: 1 > 2 =3 之类的
: 我寄信给那位网友,想跟他请教
: 但没有下文
: 我没有使用过R
: 但想学习看看
: 不知道板上的板友是否也会这个快速整理的方法
: 不知道是否方便教导一下
: 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.164.192.51
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/R_Language/M.1406822943.A.914.html
※ 编辑: celestialgod (218.164.192.51), 08/01/2014 00:11:35
1F:推 wanson:谢谢 08/01 02:58