ANOVA для категориальных данных 4 группы в R studio

Я пытаюсь запустить анова-тест для описательных переменных с 4 разными группами, эти 4 группы сгруппированы в зависимости от наличия или отсутствия 2 осложнений.

Мои данные

structure(list(values = c("F", "F", "M", "F", "F", "M", "F", 
"F", "F", "F", "F", "F", "F", "M", "M", "F", "F", "F", "F", "M"
), ind = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Group 1", 
"Group 2 ", "Group 3", "Group 4"), class = "factor")), row.names = c(NA, 
20L), class = "data.frame")

Я попробовал приведенный ниже код, чтобы запустить тест anova.

anovaresult= aov(data_new$values ~ data_new$ind, data=data_new)

И я получаю сообщение об ошибке ниже:


Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  NA/NaN/Inf in 'y'
In addition: Warning message:
In storage.mode(v) <- "double" : NAs introduced by coercion
> 

Большое спасибо Обратите внимание, что мой df создается путем объединения 4 групп функцией stacked()

Ind не имеет вариаций, поэтому нет групп для сравнения. Вам нужно создать переменную с 4 группами.

Elin 10.01.2023 23:59
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Типы ввода HTML: Лучшие практики и советы
Типы ввода HTML: Лучшие практики и советы
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные...
Аутсорсинг разработки PHP для индивидуальных веб-решений
Аутсорсинг разработки PHP для индивидуальных веб-решений
Услуги PHP-разработки могут быть экономически эффективным решением для компаний, которые ищут высококачественные услуги веб-разработки по доступным...
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Слишком много useState? Давайте useReducer!
Слишком много useState? Давайте useReducer!
Современный фронтенд похож на старую добрую веб-разработку, но с одной загвоздкой: страница в браузере так же сложна, как и бэкенд.
Узнайте, как использовать теги &lt;ul&gt; и &lt;li&gt; для создания неупорядоченных списков в HTML
Узнайте, как использовать теги <ul> и <li> для создания неупорядоченных списков в HTML
HTML предоставляет множество тегов для структурирования и организации содержимого веб-страницы. Одним из наиболее часто используемых тегов для...
1
1
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ANOVA используется, когда у вас есть категориальная независимая переменная, и вы хотите проверить различия между средними значениями нормально распределенной непрерывной зависимой переменной. Ваша зависимая переменная является дихотомической (M/F), поэтому ANOVA не подходит.

Допустим, у вас есть категориальные данные, похожие на ваши данные, например:

# Data
set.seed(123)
df <- data.frame(result = sample(0:1, 100, replace = TRUE),
                 group = sample(paste("Group", 1:4), 100, replace = TRUE))

Поскольку данные взяты случайным образом из равномерного распределения, мы не ожидаем никакой разницы между группами. Мы можем проверить это статистически, используя популярный критерий хи-квадрат. В R это реализовано так:

# Parametric Chi Squared
chisq.test(df$result, df$group)

#  Pearson's Chi-squared test
# 
# data:  df$result and df$group
# X-squared = 0.18662, df = 3, p-value = 0.9797

Здесь вы видите, что значение p значительно выше стандартного 0,05, поэтому мы можем сделать вывод, что разницы нет.

Если бы эти данные были непараметрическими (то есть данными в стиле Лайкерта), мы могли бы использовать непараметрический аналог, называемый критерием Крускала-Уоллеса. В R это реализовано так:

kruskal.test(df$result, df$group)
 
#  Kruskal-Wallis rank sum test
# 
# data:  df$result and df$group
# Kruskal-Wallis chi-squared = 0.18475, df = 3, p-value = 0.98

Вы также можете использовать логистическую регрессию, чтобы проверить силу связи, если таковая имеется. В R это может быть реализовано:

mdl <- glm(result ~ group, data = df, family = binomial(link = "logit"))
summary(mdl)

# Call:
# glm(formula = result ~ group, family = binomial(link = "logit"), 
#     data = df)
# 
# Deviance Residuals: 
#    Min      1Q  Median      3Q     Max  
# -1.128  -1.034  -1.034   1.281   1.328  
# 
# Coefficients:
#              Estimate Std. Error z value Pr(>|z|)
# (Intercept)   -0.1178     0.4859  -0.242    0.808
# groupGroup 2  -0.2305     0.6150  -0.375    0.708
# groupGroup 3  -0.2305     0.6150  -0.375    0.708
# groupGroup 4  -0.1234     0.6312  -0.195    0.845
# 
# (Dispersion parameter for binomial family taken to be 1)
# 
#     Null deviance: 136.66  on 99  degrees of freedom
# Residual deviance: 136.48  on 96  degrees of freedom
# AIC: 144.48
# 
# Number of Fisher Scoring iterations: 4

Обратите внимание, что в логистической регрессии вы хотели бы преобразовать эти коэффициенты и стандартные ошибки, чтобы получить отношение шансов (OR). В R вы можете сделать это:

exp(coef(mdl))
# (Intercept) groupGroup 2 groupGroup 3 groupGroup 4 
#   0.8888889    0.7941176    0.7941176    0.8839286 

exp(confint(mdl))

#                 2.5 %   97.5 %
# (Intercept)  0.3337300 2.324904
# groupGroup 2 0.2352175 2.680856
# groupGroup 3 0.2352175 2.680856
# groupGroup 4 0.2537607 3.081575

Как видите, доверительные интервалы ИЛИ содержат нуль (нет разницы) — как и ожидалось.

Это всего лишь несколько примеров того, как реализовать статистические тесты и измерения эффекта в вашем типе данных, но они не являются исчерпывающими. Удачи!

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

Как найти категориальные данные, где одна категория (включая NaN) представляет не менее 80% всех категорий переменных в Python Pandas?
Ggpredict с категориальной логистической регрессией в R
Серия Pandas - как проверить, что каждый элемент является категоричным
Перекодирование категориальной переменной на основе значения другой категориальной переменной в r кадре данных
Как использовать OrdinalEncoder() для установки пользовательского порядка?
Как преобразовать переменные str в отдельные категории в фрейме данных?
R: моделирование совокупности, в которой две категориальные переменные независимы.
Использовать R для создания гистограммы категориальных значений растра? (или создайте таблицу данных со значениями широты/длины)
Как включить столбец для «всего» в гистограмму с накоплением для категориальной переменной в R
Как отобразить на сетке двумерные категориальные данные