Я пытаюсь запустить анова-тест для описательных переменных с 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()
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
Как видите, доверительные интервалы ИЛИ содержат нуль (нет разницы) — как и ожидалось.
Это всего лишь несколько примеров того, как реализовать статистические тесты и измерения эффекта в вашем типе данных, но они не являются исчерпывающими. Удачи!
Ind не имеет вариаций, поэтому нет групп для сравнения. Вам нужно создать переменную с 4 группами.