2015-05-05 2 views
0

У меня есть индекс индекса загрязнения (PI), собранный с 5 сайтов (BS, PL, GB, EM и CB). Теперь я хочу запустить тест ANOVA для сравнения сайтов с использованием EM в качестве эталонного сайта.Как сравнить образцы с некоторыми базовыми данными?

Как это сделать, используя r?

Вот некоторые из моих данных:

Site PI 
BS 0.229056825 
BS 0.217159476 
BS 0.229508197 
BS 0.127530364 
BS 0.112942122 
PL 0.198957428 
PL 0.196986402 
PL 0.126753976 
PL 0.092816275 
PL 0.143828265 
GB 0.26883746 
GB 0.156452227 
GB 0.206349206 
GB 0.214451538 
GB 0.216014235 
EM 0.192636423 
EM 0.164269912 
EM 0.181659896 
EM 0.161620295 
EM 0.145764576 
CB 0.38490566 
CB 0.111111111 
CB 0.092592593 
CB 0.40625 
CB 0.68852459 
+0

Смотрите, если это помогает: http://stackoverflow.com/questions/3872070/how-to-force-r-to-use-a-specified-factor-level-as-reference-in-a -regression – LJW

+0

Можете ли вы также сказать, что вы пробовали и где вы застреваете? – LJW

+0

Большое спасибо за ваш ответ. На самом деле я хочу получить уровень значимости (p - значение) для каждого из 4 сайтов (BS, PL, GB и CB) по сравнению с сайтом EM (reference). –

ответ

0

ANOVA с помощью линейной регрессии является простым способом и anova() в пакете статистики принимает лх объекта.

Предполагая, что ваши данные находятся в фрейме данных, который называется df, следующее показывает способ.

Он перебирает сайты, за исключением ссылочного сайта (EM), и выполняет тест ANOVA, а затем устанавливает линейную регрессию. Список сайтов и результаты anova возвращаются контуром (сравнение).

В выводе на консоль первым элементом является сравниваемый сайт (BS), а второй элемент - результат ANOVA.

# reference PI 
ref <- df[df$Site=="EM", 2] 

# site names except for EM, used to filter df 
sites <- unique(df$Site)[unique(df$Site) != "EM"] 

comparison <- lapply(sites, function(x) { 
    # ANOVA for comparion 
    fit <- lm(ref ~ df[df$Site==x, 2]) 
    list(x, anova(fit)) 
}) 
comparison[[1]] 

#[[1]] 
#[1] BS 
#Levels: BS CB EM GB PL 

#[[2]] 
#Analysis of Variance Table 

#Response: ref 
#Df  Sum Sq Mean Sq F value Pr(>F) 
#df[df$Site == x, 2] 1 0.00093945 0.00093945 7.1162 0.07584 . 
#Residuals   3 0.00039605 0.00013202     
#--- 
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1