У меня есть фрейм данных с переменной year
, охватывающей более 100 лет. Первоначально переменная была целым числом, но я подумал, что было бы неплохо преобразовать ее в упорядоченный коэффициент.
> myDf <- data.frame(year = factor(1900:1995, levels = 1900:1995, ordered = TRUE),
z = rnorm(96))
Однако, когда я пытаюсь обучить модель, выдается ошибка.
> myFit <- lm(z ~ year, data = myDf)
Error in ctrfn(levels(x), contrasts = contrasts) :
orthogonal polynomials cannot be represented accurately enough for 95 degrees of freedom
После поиска все, что я мог найти, было следующее из исходного кода contr.poly
.
if (n > 95)
stop(gettextf("orthogonal polynomials cannot be represented accurately enough for %d degrees of freedom",
n - 1), domain = NA)
Итак, я попробовал следующее:
> myDf2 <- data.frame(year = factor(1900:1994, levels = 1900:1994, ordered = TRUE),
z = rnorm(95))
> myFit2 <- lm(z ~ year, data = myDf2)
Ошибка не возвращается.
Делает ли факт, что фактор упорядочен, делаетразница?
> myDf3 <- data.frame(year = factor(1900:1995, levels = 1900:1995, ordered = FALSE),
z = rnorm(96))
> myFit3 <- lm(z ~ year, data = myDf3)
Ошибок нет. Очевидно, именно порядок и вызывает эту ошибку.
Я не понимаю значения отсечки при 95 степенях свободы или как contr.poly
связано с lm
. Или есть связь вообще? Почему порядок имеет значение?
Кроме того, имеет ли порядок фактор столько же уровней, сколько я сделал неразумно? Мой мыслительный процесс состоял в том, что я должен преобразовать year
из целого числа в упорядоченный коэффициент, потому что год не «масштабируется» так же, как другие переменные в моем наборе данных, то есть расстояние. Шкала, возможно, не является правильным термином, но я просто имею в виду, что переменная года имеет ограничения в наборе данных, тогда как расстояние не имеет.