Jeśli twoja zmienna niezależna (zmienna RHS) jest czynnikiem lub znakiem przyjmującym tylko jedną wartość, wówczas występuje ten typ błędu.
Przykład iris dane R
(model1 <- lm(Sepal.Length ~ Sepal.Width + Species, data=iris))
# Call:
# lm(formula = Sepal.Length ~ Sepal.Width + Species, data = iris)
# Coefficients:
# (Intercept) Sepal.Width Speciesversicolor Speciesvirginica
# 2.2514 0.8036 1.4587 1.9468
Teraz, jeśli dane składa się tylko z jednego gatunku:
(model1 <- lm(Sepal.Length ~ Sepal.Width + Species,
data=iris[iris$Species == "setosa", ]))
# Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
# contrasts can be applied only to factors with 2 or more levels
Jeśli zmienna jest liczbą (Sepal.Width
), lecz równocześnie tylko jedna wartość powiedzieć 3, następnie model działa, ale otrzymasz NA
jako współczynnik tej zmiennej w następujący sposób:
(model2 <-lm(Sepal.Length ~ Sepal.Width + Species,
data=iris[iris$Sepal.Width == 3, ]))
# Call:
# lm(formula = Sepal.Length ~ Sepal.Width + Species,
# data = iris[iris$Sepal.Width == 3, ])
# Coefficients:
# (Intercept) Sepal.Width Speciesversicolor Speciesvirginica
# 4.700 NA 1.250 2.017
Rozwiązanie: Nie ma wystarczającej zmienności w zmiennej zależnej z tylko jedną wartością. Musisz więc usunąć tę zmienną, niezależnie od tego, czy jest to wartość liczbowa, czy znakowa czy zmienna czynnikowa.
Updated jak za komentarze: Ponieważ wiesz, że błąd występuje tylko z/czynnik charakteru, można skupić się tylko na tych, i sprawdzić, czy długość poziomów tych zmiennych czynników jest 1 (DROP) lub większa niż 1 (NODROP).
Aby sprawdzić, czy zmienna jest czynnikiem, czy nie, należy użyć następującego kodu:
(l <- sapply(iris, function(x) is.factor(x)))
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# FALSE FALSE FALSE FALSE TRUE
Następnie można uzyskać ramkę danych zmiennych czynników tylko
m <- iris[, l]
Teraz odnaleźć liczba poziomów zmiennych czynnikowych, jeśli to konieczne, należy zrzucić tę wartość: Uwaga: Jeśli poziomy f Aktor zmienna jest tylko jedna, to jest zmienna, musisz upuścić.
OK dziękuję. Czy istnieje sposób, że mogę to naprawić w R lub jest to oryginalne dane, które należy edytować. Ponadto po przejrzeniu danych wszystkie zmienne przyjmują więcej niż jedną wartość? Czy jest jakiś sposób, aby zobaczyć, które konkretne zmienne mają na myśli? – REnthusiast
Zobacz zaktualizowane rozwiązanie i skup się tylko na zmiennych czynnikowych. – Metrics
Ponadto - jeśli zmienna zawiera "egzotyczne" znaki, pojawi się ten sam błąd. Który, jak sądzę, jest błędem. Moja zmienna CustomerType zawiera jedną wartość, która zawierała "ö", gdy zmieniłem, że błąd zniknął – ErrantBard