В логит-модели есть ли более умный способ определить влияние независимой порядковой переменной, чем использовать фиктивные переменные для каждого уровня?
В логит-модели есть ли более умный способ определить влияние независимой порядковой переменной, чем использовать фиктивные переменные для каждого уровня?
Ответы:
Чтобы добавить к ответу @ dmk38, «любой набор баллов дает действительный тест, при условии, что он составлен без учета результатов эксперимента. Если набор баллов плохой, то это сильно искажает числовую шкалу, которая действительно лежит в основе В соответствии с упорядоченной классификацией, тест не будет чувствительным. Поэтому оценки должны отражать лучшее понимание того, каким образом была построена и использована классификация ». (Cochran, 1954, процитировано Agresti, 2002, pp. 88-89). Другими словами, обработка упорядоченного фактора как численно оцениваемой переменной является просто проблемой моделирования. Если это имеет смысл, это будет влиять только на то, как вы интерпретируете результат, и не существует определенного практического правила о том, как выбрать наилучшее представление для порядковой переменной.
Рассмотрим следующий пример употребления алкоголя у матери и наличия или отсутствия врожденных пороков развития (Agresti, Анализ данных по категориям , таблица 3.7 с.89):
0 <1 1-2 3-5 6+
Absent 17066 14464 788 126 37
Present 48 38 5 1 1
В этом конкретном случае мы можем смоделировать результат, используя логистическую регрессию или простую таблицу ассоциаций. Давайте сделаем это в R:
tab3.7 <- matrix(c(17066,48,14464,38,788,5,126,1,37,1), nr=2,
dimnames=list(c("Absent","Present"),
c("0","<1","1-2","3-5","6+")))
library(vcd)
assocstats(tab3.7)
Обычная статистика (12,08, p = 0,016751) или LR (6,20, p = 0,184562) (с 4 df) не учитывает упорядоченные уровни потребления алкоголя.
Обрабатывая обе переменные как порядковые с одинаково распределенными баллами (это не влияет на двоичные переменные, такие как порок развития, и мы выбираем базовую линию как 0 = отсутствует), мы могли бы проверить линейно-линейную связь. Давайте сначала построим разобранную версию этой таблицы непредвиденных обстоятельств:
library(reshape)
tab3.7.df <- untable(data.frame(malform=gl(2,1,10,labels=0:1),
alcohol=gl(5,2,10,labels=colnames(tab3.7))),
c(tab3.7))
# xtabs(~malform+alcohol, tab3.7.df) # check
Затем мы можем проверить линейную связь, используя
library(coin)
#lbl_test(as.table(tab3.7))
lbl_test(malform ~ alcohol, data=tab3.7.df)
что дает с . Обратите внимание, что эта статистика является просто корреляцией между двумя сериями оценок (которые Агрести назвал ), которая легко вычисляется как
cor(sapply(tab3.7.df, as.numeric))[1,2]^2*(32574-1)
Как видно, не так много доказательств четкой связи между этими двумя переменными. Как и в случае с Agresti, если мы решим перекодировать уровни алкоголя как {0,0.5,1.5,4,7}, то есть использовать средние значения для гипотетической непрерывной шкалы с последним показателем, являющимся несколько чисто произвольным, то мы заключим В большей степени влияние алкоголя у матери на развитие врожденных пороков развития:
lbl_test(malform ~ alcohol, data=tab3.7.df,
scores=list(alcohol=c(0,0.5,1.5,4,7)))
дает тестовую статистику 6,57 со связанным значением р 0,01037.
Есть альтернативные схемы кодирования, в том числе midranks (в этом случае, мы падаем назад к Спирмену вместо Пирсона ) , что обсуждается на Agresti, но я надеюсь , что вы поймать общую идею здесь: Лучше всего , чтобы выбрать результаты , которые фактически отражают разумные меры расстояния между смежными категориями вашей порядковой переменной и равного расстояния часто являются хорошим компромиссом (при отсутствии теоретического обоснования).
Используя подход GLM, мы будем действовать следующим образом. Но сначала проверьте, как Алкоголь закодирован в R:
class(tab3.7.df$alcohol)
Это простой неупорядоченный фактор ( "factor"
), следовательно, номинальный предиктор. Теперь, вот три модели, в которых мы рассматриваем Алкоголь как номинальный, порядковый или непрерывный предиктор.
summary(mod1 <- glm(malform ~ alcohol, data=tab3.7.df,
family=binomial))
summary(mod2 <- glm(malform ~ ordered(alcohol), data=tab3.7.df,
family=binomial))
summary(mod3 <- glm(malform ~ as.numeric(alcohol), data=tab3.7.df,
family=binomial))
В последнем случае подразумевается шкала равных интервалов, а интерпретируется как @ dmk38: она отражает влияние увеличения содержания алкоголя на единицу на результат через ссылку logit, то есть увеличение вероятности наблюдения за уродством (по сравнению с отсутствием уродства, то есть отношения шансов) составляет . Тест Вальда не является значимым на обычном уровне 5%. В этом случае матрица проектирования включает в себя только 2 столбца: первый - это постоянный столбец из 1 для пересечения, второй - числовое значение (от 1 до 5) для предиктора, как в простой линейной регрессии. В целом, эта модель проверяет линейное влияние алкоголя на результат (по логит-шкале).
Однако в двух других случаях ( mod1
и mod2
) мы получаем разные выходные данные, потому что матрица проектирования, используемая для моделирования предиктора, отличается, что можно проверить с помощью:
model.matrix(mod1)
model.matrix(mod2)
Мы можем видеть, что соответствующая матрица проектирования mod1
включает в себя фиктивные переменные для уровней алкоголя (0 всегда является базовой линией) после термина перехвата в первом столбце, тогда как в случае у нас есть четыре столбца эффектов с контрастным кодированием (после столбца 1 для перехвата). Коэффициент для категории «3-5» оценивается в 1,03736 , а в 0,01633 - ниже . Обратите внимание, что AIC и другие основанные на вероятности меры остаются, однако, идентичными между этими двумя моделями.mod2
mod1
mod2
Вы можете попытаться присвоить новые оценки Алкоголю и посмотреть, как это повлияет на прогнозируемую вероятность порока развития.
совершенно нормально использовать категориальный предиктор в регрессионной модели логита (или OLS), если уровни являются порядковыми. Но если у вас есть причина считать каждый уровень дискретным (или если ваша категориальная переменная является номинальной, а не порядковой), то в качестве альтернативы фиктивному кодированию вы также можете использовать ортогональное контрастное кодирование. Для очень полной и доступной дискуссии см. Judd, CM, McClelland, GH & Ryan, CS. Анализ данных: подход сравнения моделей, Edn. Второй. (Рутледж / Тейлор и Фрэнсис, Нью-Йорк, Нью-Йорк; 2008), или просто Google "контрастное кодирование"