Стандартизация качественных переменных в R для выполнения glm, glm.nb и lm - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу стандартизировать переменные биологического набора данных.Мне нужно запустить glm, glm.nb и lm, используя разные переменные ответа.

Набор данных содержит подсчеты данного вида деревьев по графикам (все графики имеют одинаковый размер) и ряд качественных переменных:тип растительности, тип почвы и наличие / отсутствие крупного рогатого скота.

ДАННЫЕ

library(standardize)
library(AICcmodavg)

set.seed(1234)
# Short version of the dataset missing other response variables
dat <- data.frame(Plot_ID = 1:80,
                  Ct_tree = sample(x = 1:400, replace = T),
                  Veg = sample(x = c("Dry", "Wet", "Mixed"), size = 80, replace = T),
                  Soil = sample(x = c("Clay", "Sandy", "Rocky"), size = 80, replace = T),
                  Cattle = rep(x = c("Yes", "No"), each = 5))

ПРОБЛЕМА

Как и всеобъясняющие переменные являются категориальными, я не уверен, возможно ли создать стандартизированные модели lm со стандартизованными коэффициентами и стандартизированными стандартными ошибками.

Если я попытаюсь стандартизировать через базу R, используя scale () , Я получаю ошибку, потому что объясняющие переменные не являются числовыми.Я пытаюсь использовать стандартизированный пакет R, но я не уверен, что он делает то, что мне нужно.

МОДЕЛИ

m1 <- standardize(formula = Ct_tree ~ 1, data = dat, family = "gaussian", scale = 1)
# Error in standardize(formula = Ct_tree ~ 1, data = dat, family = "gaussian": no variables in formula
m2 <- standardize(formula = Ct_tree ~ Veg, data = dat, family = "gaussian", scale = 1)
m3 <- standardize(formula = Ct_tree ~ Soil, data = dat, family = "gaussian", scale = 1)
m4 <- standardize(formula = Ct_tree ~ Cattle, data = dat, family = "gaussian", scale = 1)
m5 <- standardize(formula = Ct_tree ~ Veg + Soil, data = dat, family = "gaussian", scale = 1)
m6 <- standardize(formula = Ct_tree ~ Veg + Cattle, data = dat, family = "gaussian", scale = 1)
m7 <- standardize(formula = Ct_tree ~ Soil + Cattle, data = dat, family = "gaussian", scale = 1)
m8 <- standardize(formula = Ct_tree ~ Veg + Soil + Cattle, data = dat, family = "gaussian", scale = 1)

# m1_st <- standardize(formula = m1$formula, data = m1$data)
m2_st <- lm(formula = m2$formula, data = m2$data)
# [...] 
m8_st <- lm(formula = m8$formula, data = m8$data)

# Produce a summary table of AICs
models <- list(Veg = m2_st, Soil = m3_st, Cattle = m4_st, VegSoil = m5_st, VegCattle = m6_st, SoilCattle = m7_st, VegSoilCattle = m8_st)
aic_tbl <- aictab(models, second.ord = TRUE, sort = TRUE)

ВОПРОСЫ

1) Правильно ли я внедряю пакет стандартизации?

2) Выполняет ли мой код стандартизацию, которую я выполняю?

3) Когда я вызываю mi $ data , похоже, что переменная ответа (Ct_tree) была стандартизирована.Это то, что должно произойти?Я думал, что стандартизация произойдет с объясняющими переменными, а не с ответом.

4) Как я могу стандартизировать перехват (Ct_tree ~ 1)?Возможно, его не нужно стандартизировать, но мне все еще нужно его в итоговой таблице AIC для сравнения всех моделей.

5) У меня также есть другие переменные ответа, которые отсутствуют / присутствуют(перекодируется как 0 и 1 соответственно).Статистически правильно ли также стандартизировать эти столбцы, используя тот же процесс, что и выше?Пакет стандартизации создает столбец присутствия / отсутствия, идентичный оригиналу.Однако если я перемасштабирую такой столбец с помощью функции scale () из базы R, полученные числа будут положительными и отрицательными с десятичными знаками, и я не смогу применить биномиальное семейство.

6) Если я перекодирую качественные объясняющие переменные как порядковые (например, Почва = 0 для глины, 1 для песчаного, 2 для скалистых), а затем масштабирую их, будет ли это статистически корректно?

1 Ответ

0 голосов
/ 28 декабря 2018

Мой ответ может быть самоуверенным.Кроме того, я биолог, а не математик, поэтому кто-то с лучшим математическим образованием мог бы дать более аргументированный ответ.

Первый вопрос: зачем нам стандартизация?По сути, мы используем его для сравнения величины эффекта разных предикторов.Допустим, мы хотим оценить, как масса растения (M) зависит от концентрации азота в почве (N) и наличия воды (W).Будет два предиктора с разными единицами измерения и различной амплитудой.Очень важно, чтобы оба предиктора были непрерывными.Мы можем оценить коэффициенты регрессии из необработанных данных.Давайте предположим, что конечная биомасса может быть представлена ​​как

M = 0,1 * N + 0,2 * W + ошибка

Итак, какой фактор важнее?Конечно, мы не можем вывести это только из тех коэффициентов.Для сравнения нам необходимо учесть единицы и изменчивость факторов.Поэтому только коэффициенты отчетности могут быть недостаточными для понимания ваших основ.Стандартизация может быть решением для такой ситуации.

Теперь давайте предположим, что мы получили те же коэффициенты регрессии, но предикторы были ранее стандартизированы.В такой ситуации ясно, что масса растения изменяется на 0,1, когда концентрация азота изменяется на 1 единицу стандартного отклонения.То же самое относится и к воде (0,2 единицы массы на 1 единицу SD).Если ваш эксперимент включал широкий диапазон условий содержания воды и азота, вы можете предположить, что вода в два раза важнее азота.Поэтому стандартизация полезна для сравнения эффектов непрерывных предикторов.

В вашем случае предикторы являются категориальными, то есть факторами.И ваш первоначальный вопрос: «Различается ли количество деревьев в разных группах условий?».Здесь ваш результат будет разницей.Например, на глинистой почве в среднем на 50 деревьев больше, чем на песчаной почве.Это довольно четкий результат.Если какое-то условие отвечает за большее изменение числа деревьев, оно имеет более сильный эффект.Поэтому кажется, что стандартизация не требуется.

Тем не менее, вы можете задать дополнительный вопрос: «Разница в 50 деревьев - это большая разница?».Если среднее количество деревьев составляет 10000, добавление 50 деревьев незначительно.Но если на участке в среднем 100 деревьев, изменения действительно большие.Чтобы справиться с такой проблемой, вы можете стандартизировать переменную ответа.Таким образом, вы получите разницу в единицах стандартного отклонения (что-то вроде d Коэна).

В любом случае выбор стандартизации или не стандартизации должен быть вашим решением, основываясь на вашем опыте в этой области.Если стандартизация поможет вам интерпретировать ваши результаты, то сделайте это.Если вы думаете, что разница в единицах стандартного отклонения более показательна и будет более понятной для ваших читателей, сделайте это.Что касается меня, я бы предложил остаться с необработанными значениями, но представить результаты в относительных единицах (%).Например, на глине на 15% больше деревьев, чем на песчаных почвах.Но опять же это должно быть ваше решение.

В заключение:

  1. Вам не требуется стандартизация для категориальных переменных.То же самое относится и к двоичным предикторам.
  2. Вы можете стандартизировать свою переменную ответа, если считаете, что разница в единицах SD более убедительна.Для этого будет достаточно base::scale.
  3. Замена категориальных переменных числами (и обработка их как числа) не очень хорошая идея в вашем случае.

PS извините за плохую грамматику.

...