Точка двойного и р-значение

Я пытаюсь получить точечную бизерианскую корреляцию между непрерывной оценкой словаря и синтаксической продуктивностью (дихотомическая: продуктивная против не_продуктивной).

Я пробовал оба пакета ltm

> biserial.cor (lol$voc1_tvl, lol$synt, use = c("complete.obs")) 

и пакет polycor

> polyserial( lol$voc1_tvl, lol$synt, ML = FALSE, control = list(), std.err = FALSE, maxcor=.9999, bins=4)

Проблема в том, что ни один тест не дает мне p-значение

Как я могу выполнить тест точечной бизерологической корреляции и получить соответствующее значение p или, в качестве альтернативы, рассчитать значение p самостоятельно?

2 ответа

Поскольку точечная бизериальная корреляция является лишь частным случаем популярного коэффициента произведения-момента Пизона, вы можете использовать cor.test аппроксимировать (подробнее об этом позже) корреляцию между непрерывным X и дихотомическим Y. Например, с учетом следующих данных:

set.seed(23049)
x <- rnorm(1e3)
y <- sample(0:1, 1e3, replace = TRUE)

Бег cor.test(x, y) даст вам информацию, которую вы хотите.

    Pearson's product-moment correlation

data:  x and y
t = -1.1971, df = 998, p-value = 0.2316
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.09962497  0.02418410
sample estimates:
        cor 
-0.03786575

В качестве показателя сходства между коэффициентами обратите внимание на то, как рассчитывается соотношение -0.03786575 похоже на то, что ltm::biserial.cor дает тебе:

> library(ltm)
> biserial.cor(x, y, level = 2)
[1] -0.03784681

Разница заключается в том, что biserial.cor рассчитывается по совокупности, при этом стандартные отклонения делятся на n, где cor а также cor.test рассчитать стандартные отклонения для образца, разделив на n - 1,

Как отметил Кейдж, вы также можете использовать polyserial() функция, которая в моем примере даст

> polyserial(x, y, std.err = TRUE)

Polyserial Correlation, 2-step est. = -0.04748 (0.03956)
Test of bivariate normality: Chisquare = 1.891, df = 5, p = 0.864

Здесь я считаю, что разница в расчетной корреляции (-0,04748) обусловлена polyserial использование алгоритма оптимизации для аппроксимации расчета (что не нужно, если Y не имеет более двух уровней).

С использованием ggplot2 Набор данных mpg в качестве воспроизводимого примера:

library(ggplot2)
# Use class as dichotomous variable (must subset)
newData = subset(mpg, class == 'midsize' | class == 'compact')

# Now getting p-value
library(ltm)
polyserial(newData$cty,newData$class, std.err = T)

Вы увидите все результаты, которые вы хотите использовать std.err=T в polyserial

Другие вопросы по тегам