Вот график QQ для моего образца (обратите внимание на логарифмическую ось Y); :
Как указывает whuber, это указывает на то, что базовое распределение перекошено влево (правый хвост короче).
Используя shapiro.test
(на лог-преобразованных данных) в R, я получаю тестовую статистику и p-значение , что означает, что мы формально отвергаем нулевую гипотезу на уровне достоверности 95%.
Мой вопрос: достаточно ли это на практике для дальнейшего анализа, предполагающего (лог) нормальность? В частности, я хотел бы рассчитать доверительные интервалы для средних значений схожих выборок, используя приближенный метод Кокса и Лэнда (описанный в статье: Zou, GY, Cindy Yan Huo and Taleban, J. (2009). Простые доверительные интервалы для Логнормальные средства и их отличия от экологических приложений. Environmetrics 20, 172–180):
ci <- function (x) {
y <- log(x)
n <- length(y)
s2 <- var(y)
m <- mean(y) + s2 / 2
z <- qnorm(1 - 0.05 / 2) # 95%
#z <- qnorm(1 - 0.10 / 2) # 90%
d <- z * sqrt(s2 / n + s2 * s2 / (2 * (n - 1)))
return(c(exp(m - d), exp(m + d)))
}
Я заметил, что доверительные интервалы, как правило, сосредоточены вокруг точки, которая немного выше среднего значения фактической выборки. Например:
> mean(x)
[1] 82.3076
> y <- log(x)
> exp(mean(y) + var(y) / 2)
[1] 91.22831
Я думаю, что эти два значения должны быть одинаковыми при .
источник
Ответы:
Эти данные имеют короткий хвост по сравнению с логнормальным распределением, мало чем отличающимся от гамма-распределения:
Тем не менее, поскольку данные являются сильно правой перекос, мы можем ожидать , что наибольшие значения играют важную роль в оценке среднего значения и его доверительный интервал. Поэтому следует ожидать, что логнормальная (LN) оценка будет склонна переоценивать среднее значение и два доверительных интервала .
Давайте проверим и, для сравнения, используем обычные оценки: то есть среднее значение выборки и его доверительный интервал в нормальной теории. Обратите внимание, что обычные оценщики полагаются только на приблизительную нормальность среднего значения выборки , а не данных, и - при таком большом наборе данных - можно ожидать, что они будут работать хорошо. Для этого нам понадобится небольшая модификация
ci
функции:Вот параллельная функция для нормальных оценок:
Применительно к этому смоделированному набору данных, выходы
ci.u
Теперь ясно, что логнормальные процедуры имеют тенденцию переоценивать среднее значение и пределы достоверности, тогда как обычные процедуры делают хорошую работу. Мы можем оценить покрытия процедур доверительного интервала:
Этот расчет говорит:
Нижний предел LN не сможет охватить истинное среднее значение примерно в 22,3% времени (вместо запланированных 2,5%).
Обычный нижний предел не сможет охватить истинное среднее значение около 2,3% времени, что близко к предполагаемому 2,5%.
Верхний предел LN всегда будет превышать истинное среднее значение (вместо того, чтобы опускаться ниже 2,5% времени, как предполагалось). Это делает двусторонний 100% - (22,3% + 0%) = 77,7% доверительный интервал вместо 95% доверительного интервала.
Обычный верхний предел не сможет охватить истинное среднее значение в 100 - 96,5 = 3,5% времени. Это немного больше, чем предполагаемое значение 2,5%. Таким образом, обычные пределы включают двусторонний доверительный интервал 100% - (2,3% + 3,5%) = 94,2% вместо 95% доверительного интервала.
Сокращение номинального покрытия с 95% до 77,7% для логнормального интервала ужасно. Снижение до 94,2% для обычного интервала совсем не плохо и может быть объяснено влиянием асимметрии (необработанных данных, а не их логарифмов).
Мы должны сделать вывод, что дальнейший анализ среднего значения не должен предполагать логнормальность.
Быть осторожен! Некоторые процедуры (такие как пределы прогнозирования) будут более чувствительными к асимметрии, чем эти доверительные пределы для среднего значения, поэтому, возможно, придется учитывать их искаженное распределение. Однако маловероятно, что логнормальные процедуры будут хорошо работать с этими данными практически для любого предполагаемого анализа.
источник
abline()
вместоqqline()
(который производит другую строку) в первом примере?trial()
функция не использует свои аргументы.trial
:trial <- function(y) { x <- sample(y, length(y), TRUE); cbind(ci(x), ci.u(x)) }
. Затем выполните только одну командуsim <- sapply(1:5000, function(i) trial(x))
. Возможно, вы захотите изучить гистограммы шести рядовsim
впоследствии.