Я по электронной почте автору пакета -из меня были те же вопросы) и на основе его разъяснения, я предлагаю свои ответы:
Во-первых, простой вопрос: высокие значения р (традиционно> 0,05) дают вы больше уверены, что распределение является двумерным нормальным. Более низкие p-значения указывают на ненормальное распределение, НО, если размер выборки достаточно велик, оценка максимального правдоподобия (опция ML=TRUE
), ненормальность не имеет значения; в любом случае корреляция по-прежнему является надежной.
Теперь, тем труднее вопрос: вычислить р-значения, вам необходимо:
- Выполнить polyserial с std.err = TRUE вариант, чтобы иметь доступ к более подробной информации.
- Из полученного полисериального объекта обращайтесь к элементу
var[1, 1]
. var
- это ковариационная матрица оценок параметров, а sqrt(var[1, 1])
- стандартная ошибка (которая отображается в круглых скобках на выходе после результата rho).
- Из стандартной ошибки вы можете рассчитать p-значение на основе приведенного ниже кода R.
Вот код, чтобы проиллюстрировать это воспроизводимую R-код, основанный на примере кода в polyserial документации:
library(mvtnorm)
library(polycor)
set.seed(12345)
data <- rmvnorm(1000, c(0, 0), matrix(c(1, .5, .5, 1), 2, 2))
x <- data[,1]
y <- data[,2]
y <- cut(y, c(-Inf, -1, .5, 1.5, Inf))
# 2-step estimate
poly_2step <- polyserial(x, y, std.err=TRUE)
poly_2step
##
## Polyserial Correlation, 2-step est. = 0.5085 (0.02413)
## Test of bivariate normality: Chisquare = 8.604, df = 11, p = 0.6584
std.err_2step <- sqrt(poly_2step$var[1, 1])
std.err_2step
## [1] 0.02413489
p_value_2step <- 2 * pnorm(-abs(poly_2step$rho/std.err_2step))
p_value_2step
## [1] 1.529176e-98
# ML estimate
poly_ML <- polyserial(x, y, ML=TRUE, std.err=TRUE)
poly_ML
##
## Polyserial Correlation, ML est. = 0.5083 (0.02466)
## Test of bivariate normality: Chisquare = 8.548, df = 11, p = 0.6635
##
## 1 2 3
## Threshold -0.98560 0.4812 1.50700
## Std.Err. 0.04408 0.0379 0.05847
std.err_ML <- sqrt(poly_ML$var[1, 1])
std.err_ML
## [1] 0.02465517
p_value_ML <- 2 * pnorm(-abs(poly_ML$rho/std.err_ML))
p_value_ML
##
## 1.927146e-94
И ответить на важный вопрос, который вы не спросить: вы бы хотите всегда использовать версию максимального правдоподобия (ML=TRUE
), потому что она более точная, за исключением случаев, когда у вас действительно медленный компьютер, и в этом случае приемлемый двухэтапный подход по умолчанию.
Спасибо! Не могли бы вы показать примерный случай. Как я могу получить z-статистику и pvalues от polS? – discipulus
Вы должны сначала найти SO и google, как сделать статистику из оценки и дисперсии оценки (или sd).Если вы не можете сделать это из поиска или чтения, это книга вступительных статей, тогда вы должны опубликовать новый вопрос, который показывает, что вы прочитали как эту информацию, так и страницу справочной справки. –