2015-06-12 5 views
1

Я хочу выполнить chisq.test() на каждом уровне категориальной переменной.Как применить Chisq.test на уровнях разных категориальных переменных?

В настоящее время мне удалось сделать это по каждой категориальной переменной, используя код ниже.

# Random generation of values for categorical data 
set.seed(12) 
x <- data.frame(col1 = sample(LETTERS[1:4], 100, replace=TRUE), 
       col2 = sample(LETTERS[3:6], 100, replace=TRUE), 
       col3 = sample(LETTERS[2:5], 100, replace=TRUE), 
       out = sample(c(1,2),100, replace=TRUE)) 

# performing chisq.test 
pval <- as.data.frame(sapply(c(1:3),function(i)chisq.test(x[,i],x[,'out'])$p.value)) 

#output 
    p.value 
1 0.33019256 
2 0.08523487 
3 0.79403367 

Мне интересно сравнить уровни при разных результатах.

# for col1 levels different outcomes 
table(x$col1,x$out) 

#output 
    1 2 
    A 8 12 
    B 18 10 
    C 12 11 
    D 18 11 

Например, чтобы сравнить уровень B в col1 различных результатов в 1,2 out.

Я хотел бы знать, как это можно расширить (или другим умным способом) на каждый уровень категориальной переменной?

# Expected output 
     p.value 

col1.A ***** 
col1.B ***** 
col1.C ***** 
. 
. 
. 
col3.E ***** 

Благодарим за внимание.

+0

Что вы имеете в виду? Как вы предлагаете делать «chisq.test» только на одном уровне фактора? – thelatemail

+0

@thelatemail Я хочу сравнить каждый уровень для разных результатов. Я попытался привести пример, это имеет смысл? – Prradep

+0

@NickK Даже мне было интересно, как подойти к этому, когда один из моих коллег обратился ко мне с вопросом из [этой статьи] (http://onlinelibrary.wiley.com/doi/10.1111/1471-0528.12195/epdf). В таблице 1 они сравнили разные уровни образования с заболеванием. Пожалуйста, исправьте меня, если мое понимание и вопрос, заданный здесь, не связаны. – Prradep

ответ

0

Вот как вы это сделали бы, если бы захотели провести хи-квадрат для заданных вероятностей (с p = rep(0.5, 2)).

Я сломал это вниз, чтобы сделать его легче понять:

getP <- function(lev, x, i) { 
    tab <- table(x$out[x[, i] == lev]) 
    chisq.test(tab)$p.value 
} 
pvalList <- lapply(1:3, function(i) { 
    df <- data.frame(Column = i, Category = levels(x[, i])) 
    df$p.value <- sapply(df$Category, getP, x, i) 
    df 
}) 
pval <- do.call("rbind", pvalList) # Convert to single data frame 

В качестве альтернативы, если то, что вы хотите на самом деле против не A, B против не B и т.д., вы могли бы заменить определение от getP с:

getP <- function(lev, x, i) { 
    tab <- table(x$out, x[, i] == lev) 
    chisq.test(tab)$p.value 
} 
+0

Спасибо, я новичок. Хотя я не понял решения, которое вы предоставили сейчас, надеюсь, что я пойму в ближайшие несколько минут. – Prradep

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

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