2016-08-02 8 views
1

У меня есть DF с 3-х столбцов:Подмножество не работает, когда сделано в течение cor.test в R

  • column_1: числовой
  • column_2: числовой
  • column_3: переменный фактор с двумя группами, A и B

Я хочу вычислить корреляционный тест Спирмена между столбцами 1 и 2, но только между группами (поэтому корреляция вычисляется только между наблюдениями столбцов 1 и 2, которые соответствуют группе А, одинаково применимы к группе В). Поэтому я использую следующие строки кода:

cor.test(df$column_1, df$column_2, alternative = ("two.sided"), 
    subset(df, column_3==c("group_A")), 
    data = df, method = c("spearm")) 
cor.test(df$column_1, df$column_2, alternative = ("two.sided"), 
     subset(df, column_3==c("group_B")), 
     data = df, method = c("spearm")) 

Дело в том, я получаю тот же результат в обоих тестах, так что я предполагаю, что функция подмножество не работает, потому что если я ранее подмножество группы, как это :

x <- subset(df, column_3==c("group_A")) 
y <- subset(df, column_3==c("group_B")) 

а затем запустить cor.test по х и у по отдельности, я получаю разные результаты. Кто-нибудь знает, что происходит?

PS: Я получаю следующее предупреждение, но я не думаю, что это имеет отношение к этому вопросу, я спрашиваю о:

Warning message: 
"In cor.test.default(cor_itir$Nart, cor_itir$Medida, alternative = "two.sided", :cannot compute exact p-value with ties" 

ответ

2

Вы немного похудели, используя df$... экстракторы и указав data= и используя subset() в качестве автономной функции. Вы можете получить те же результаты, которые я считаю, используя что-то вроде:

# here's some example data with different correlations between each group 
df <- data.frame(column_1=1:10,column_2=c(1:5,6,4,3,11,9),column_3=rep(c("a","b"),each=5)) 

Тогда просто указать свой forumula, ваш data= и ваш subset= рядный:

cor.test(~ column_1 + column_2, alternative="two.sided", data=df, subset=(column_3=="a")) 

cor.test(~ column_1 + column_2, alternative="two.sided", data=df, subset=(column_3=="b")) 

Или все на одном дыхании, используя by

by(df, df$column_3, FUN = function(x) cor.test(~ column_1 + column_2, data = x)) 
+0

Спасибо, это сработало! О, я был бы признателен, если бы вы поддержали мой ответ, если считаете, что это уместно. – Lfppfs

0

Использование with и subset:

with(subset(df, column_3==c("group_A")), 
    cor.test(column_1, column_2, alternative = ("two.sided"), 
    method = c("spearm"))) 

with(subset(df, column_3==c("group_B")), 
    cor.test(column_1, column_2, alternative = ("two.sided"), 
       method = c("spearm"))) 

Редактирование

Добавление данных

df <- data.frame(column_1=1:10,column_2=c(1:5,6,4,3,11,9),column_3=rep(c("group_A","group_B"),each=5)) 

> with(subset(df, column_3==c("group_A")), 
+  cor.test(column_1, column_2, alternative = ("two.sided"), 
+    method = c("spearman"))) 

    Spearman's rank correlation rho 

data: column_1 and column_2 
S = 4.4409e-15, p-value = 0.01667 
alternative hypothesis: true rho is not equal to 0 
sample estimates: 
rho 
    1 


> with(subset(df, column_3==c("group_B")), 
+  cor.test(column_1, column_2, alternative = ("two.sided"), 
+    method = c("spearman"))) 

    Spearman's rank correlation rho 

data: column_1 and column_2 
S = 10, p-value = 0.45 
alternative hypothesis: true rho is not equal to 0 
sample estimates: 
rho 
0.5 
+0

Спасибо за комментарий, но это не сработало. Я все равно получаю тот же результат. Ответ выше работал, т. – Lfppfs

+0

Позаботьтесь, я проверил свое решение с данными в другом ответе, и он работает !. Лучше этот ответ делает корреляцию 'pearson' не' spearman' – Robert

+0

К сожалению, об этом! Я делаю что-то неправильно здесь, я посмотрю на него, спасибо! – Lfppfs

 Смежные вопросы

  • Нет связанных вопросов^_^