это мой первый пост здесь, и я надеюсь, что все в нужном месте. Я использую R для базового статистического анализа в течение некоторого времени, но на самом деле не использовал его для чего-либо сложного с вычислительной точки зрения, и я очень новичок в программировании / обработке данных на стороне R.
У меня есть данные о наличии / отсутствии (бинарные) по 72 видам растений на 323 участках одного водосбора. Фрейм данных состоит из 323 строк, каждая из которых представляет график, с 72 столбцами, каждая из которых представляет вид. Это образец первых 4 столбцов (некоторые номера строк отсутствуют, потому что 323 графика являются подмножеством большего количества заранее назначенных графиков, не все из которых были исследованы):
> head(plots[,1:4])
Agrostis.canina Agrostis.capillaris Alchemilla.alpina Anthoxanthum.odoratum
1 1 0 0 0
3 0 0 0 0
4 0 0 0 0
5 0 0 0 0
6 0 0 0 0
8 0 0 0 0
Я хочу определить, связаны ли какие-либо виды растений в этом водосборе с другими, и если да, то является ли это положительной или отрицательной ассоциацией. Для этого я хочу провести тест независимости хи-квадрат для каждой комбинации видов. Мне нужно создать таблицу сопряженности 2x2 для каждого сравнения видов и видов, запустить тест хи-квадрат для каждой из этих таблиц сопряженности и сохранить результат. В конечном итоге я хотел бы закончить списком или матрицей всех видов по видам тестов, которые показывают, имеет ли эта комбинация видов положительную, отрицательную или никакую значимую связь. Я также хотел бы включить некоторый код, который показывает связь как положительную, только если все ожидаемые значения были больше 5.
Я начал с написания следующей функции:
CHI <- function(sppx, sppy)
{test <- chisq.test(table(sppx, sppy))
result <- c(test$statistic, test$p.value,
sign((table(sppx, sppy) - test$expected)[2,2]))
return(result)
}
Это возвращает следующее:
> CHI(plots$Agrostis.canina, plots$Agrostis.capillaris)
X-squared
1.095869e-27 1.000000e+00 -1.000000e+00
Warning message:
In chisq.test(chitbl) : Chi-squared approximation may be incorrect
Теперь я пытаюсь найти способ применить эту функцию к каждой комбинации видов и видов во фрейме данных. По сути, я хочу, чтобы R взял каждый столбец, применил функцию CHI к этому столбцу и каждому другому столбцу последовательно, и так далее по всем столбцам, вычитая каждый столбец из фрейма данных, как это делается, чтобы одна и та же пара видов не тестировалась дважды . Я пробовал различные методы, пытаясь использовать циклы «for» или «применить» функции, но не смог понять этого. Надеюсь, это достаточно ясно. Любая помощь здесь будет очень признательна. Я попытался найти существующие решения этой конкретной проблемы в Интернете, но не смог найти ничего, что действительно помогло. Если бы кто-нибудь мог связать меня с существующим ответом на этот вопрос, это тоже было бы здорово.