# Статистика — краткий справочник > Неочевидное поведение, подводные камни и непростые значения по умолчанию функций R. > Только то, чего Claude ещё не знает. --- ## chisq.test - `correct = TRUE` (по умолчанию) применяет поправку Йейтса на непрерывность **только для таблиц 2x2**. - `simulate.p.value = TRUE`: метод Монте-Карло с `B = 2000` повторениями (минимальное p ~ 0.0005). Моделирование предполагает **фиксированные маргинальные суммы** (выборка в стиле Фишера, а не предположение хи-квадрат). - Для проверки согласия: передавайте вектор, не матрицу. Сумма `p` должна равняться 1 (или задайте `rescale.p = TRUE`). - Возвращаемый объект включает `$expected`, `$residuals` (Пирсона) и `$stdres` (стандартизированные). --- ## wilcox.test - `exact = TRUE` по умолчанию для малых выборок без связанных рангов. При связанных рангах используется нормальная аппроксимация. - `correct = TRUE` применяет поправку на непрерывность к нормальной аппроксимации. - `conf.int = TRUE` вычисляет оценку Ходжеса — Лемана и доверительный интервал (не только p-значение). - Парный тест: `paired = TRUE` использует критерий знаковых рангов (Уилкоксона), а не суммы рангов (Манна — Уитни). --- ## fisher.test - Для таблиц больше 2x2 использует моделирование (`simulate.p.value = TRUE`) или сетевой алгоритм. - `workspace` управляет памятью для сетевого алгоритма; увеличивайте, если возникают ошибки на больших таблицах. - Аргумент `or` проверяет конкретное отношение шансов (по умолчанию 1) — только для таблиц 2x2. --- ## ks.test - Двухвыборочный тест или одновыборочный тест против эталонного распределения. - **Не** справляется хорошо с совпадающими значениями — выдаёт предупреждение и использует асимптотическую аппроксимацию. - Для составных гипотез (параметры оцениваются по данным) p-значения **консервативны** (слишком велики). Используйте `dgof` или `ks.test` с `exact = NULL` для дискретных распределений. --- ## p.adjust - Методы: `"holm"` (по умолчанию), `"BH"` (FDR Бенджамини — Хохберга), `"bonferroni"`, `"BY"`, `"hochberg"`, `"hommel"`, `"fdr"` (псевдоним BH), `"none"`. - Аргумент `n`: общее число гипотез (может быть больше `length(p)`, если некоторые p-значения исключены). - Обрабатывает `NA`: скорректированные p-значения равны `NA` там, где входное значение — `NA`. --- ## pairwise.t.test / pairwise.wilcox.test - `p.adjust.method` по умолчанию равен `"holm"`. Измените на `"BH"` для контроля FDR. - `pool.sd = TRUE` (по умолчанию для t-теста): использует объединённое стандартное отклонение по всем группам (предполагает равные дисперсии). - Возвращает матрицу p-значений, а не статистик теста. --- ## shapiro.test - Размер выборки должен быть от 3 до 5000. - Проверяет нормальность; низкое p-значение = свидетельство против нормальности. --- ## kmeans - Рекомендуется `nstart > 1` (например, `nstart = 25`): запускает алгоритм из нескольких случайных начальных состояний и возвращает лучшее. - По умолчанию `iter.max = 10` — может быть слишком мало для сходимости. Увеличивайте для больших/сложных данных. - Алгоритм по умолчанию — "Hartigan-Wong" (обычно лучший). Очень близкие точки могут вызвать несходимость (предупреждение с `ifault = 4`). - Нумерация кластеров произвольна; порядок может различаться между платформами. - Всегда возвращает k кластеров, когда задано k (кроме Lloyd-Forgy, который может вернуть меньше). --- ## hclust - `method = "ward.D2"` корректно реализует критерий Уорда (с использованием квадратов расстояний). Более старый `"ward.D"` не возводил расстояния в квадрат (сохранён для обратной совместимости). - Вход должен быть объектом `dist`. Используйте `as.dist()` для преобразования симметричной матрицы. - `hang = -1` в `plot()` выравнивает все подписи внизу. --- ## dist - `method = "euclidean"` (по умолчанию). Другие варианты: `"manhattan"`, `"maximum"`, `"canberra"`, `"binary"`, `"minkowski"`. - Возвращает объект `dist` (только нижний треугольник). Для полной матрицы используйте `as.matrix()`. - `"canberra"`: члены с нулевыми числителем и знаменателем **исключаются** из суммы (не трактуются как 0/0). - Значения `Inf`: евклидово расстояние с участием `Inf` равно `Inf`. Несколько `Inf` в одном наблюдении дают `NaN` для некоторых методов. --- ## prcomp в сравнении с princomp - `prcomp` использует **SVD** (численно более совершенный подход); `princomp` использует `eigen` для ковариации (менее устойчивый, масштабирование N-1 в сравнении с N). - `scale. = TRUE` в `prcomp` стандартизирует переменные; важно, если масштабы переменных сильно различаются. - Стандартные отклонения `princomp` отличаются от `prcomp` множителем `sqrt((n-1)/n)`. - Обе возвращают `$rotation` (нагрузки) и `$x` (значения компонент); знаки компонент могут различаться между запусками. --- ## density - Ширина окна по умолчанию: `bw = "nrd0"` (эмпирическое правило Сильвермана). Для мультимодальных данных рассмотрите `"SJ"` или `"bcv"`. - `adjust`: множитель ширины окна. `adjust = 0.5` уменьшает ширину вдвое (меньше сглаживания). - Ядро по умолчанию: `"gaussian"`. Диапазон плотности выходит за диапазон данных (управляется `cut`, по умолчанию 3 ширины окна). - `n = 512`: число точек вычисления. Увеличивайте для более гладкого графика. - `from`/`to`: явно ограничивают диапазон вычисления. --- ## quantile - **Девять** вариантов `type` (1–9). По умолчанию `type = 7` (стандарт R, линейная интерполяция). Тип 1 = обратная функция эмпирической CDF (по умолчанию в SAS). Типы 4–9 непрерывны; 1–3 разрывны. - `na.rm = FALSE` по умолчанию — возвращает NA при наличии любых NA. - `names = TRUE` по умолчанию, добавляет "0%", "25%" и т. д. в качестве имён. --- ## Распределения (общие подводные камни) Все функции распределений следуют шаблону `d/p/q/r`. Общие неочевидные моменты: - **Аргумент `n` в функциях `r*()`**: если `length(n) > 1`, в качестве количества используется `length(n)`, а не само `n`. Поэтому `rnorm(c(1,2,3))` генерирует 3 значения, а не 1+2+3. - `log = TRUE` / `log.p = TRUE`: вычисления в логарифмической шкале для численной устойчивости в хвостах. - `lower.tail = FALSE` непосредственно даёт функцию выживания P(X > x) (в хвостах точнее, чем 1 - pnorm()). - **Гамма-распределение**: параметризуется через `shape` и `rate` (= 1/scale). По умолчанию `rate = 1`. Одновременное указание `rate` и `scale` — ошибка. - **Бета-распределение**: `shape1` (альфа), `shape2` (бета) — параметризации через `mean`/`sd` нет. - **Пуассон `dpois`**: `x` может быть нецелым (для нецелых значений возвращает 0 с предупреждением, если `log = FALSE`). - **Вейбулл**: `shape` и `scale` (без `rate`). Параметризация R: `f(x) = (shape/scale)(x/scale)^(shape-1) exp(-(x/scale)^shape)`. - **Логнормальное распределение**: `meanlog` и `sdlog` — среднее/стандартное отклонение **логарифма**, а не самого распределения. --- ## cor.test - Метод по умолчанию: `"pearson"`. Также `"kendall"` и `"spearman"`. - Возвращает `$estimate`, `$p.value`, `$conf.int` (доверительный интервал только для Пирсона). - Интерфейс формул: `cor.test(~ x + y, data = df)` — обратите внимание на `~` без левой части. --- ## ecdf - Возвращает **функцию** (ступенчатую). Вызывайте её для новых значений: `Fn <- ecdf(x); Fn(3.5)`. - `plot(ecdf(x))` строит график эмпирической CDF. - Возвращаемая функция непрерывна справа и имеет левые пределы (cadlag). --- ## weighted.mean - Обрабатывает `NA` в весах: наблюдение исключается, если вес равен `NA`. - Сумма весов не обязана равняться 1; они нормализуются внутри функции.