R语言如何修复:Contrasts can be applied only to factors with 2 or more levels
在这篇文章中,我们将讨论如何在R编程语言中修复 “对比只适用于有2个或更多水平的因素 “的错误。
对比法只能应用于有2个或更多层次的因子
这是一个由R编译器产生的常见错误。这个错误的完整形式在下面给出。
在contrasts<-
(*tmp*
, value = contr.funs[1 + isOF[nn]]中的错误。
对比度只能应用于有2个或更多水平的因子
当我们试图在预测变量的帮助下拟合回归模型时,R编译器会产生这样的错误,预测变量是一个字符或因子,并且只包含一个唯一的值。
当这种错误可能发生时
# Create a data frame
dataframe <- data.frame(parameter1=c(8, 1, 13, 24, 9),
parameter2=as.factor(6),
parameter3=c(17, 9, 18, 13, 12),
parameter4=c(12, 21, 32, 4, 19))
# Print the dataframe
dataframe
输出
正如你在上面的代码中看到的,参数2是一个因子,只包含一个唯一的值。如果我们试图拟合一个多元回归模型,其中参数2起到预测变量的作用,那么编译器会产生以下错误。
例子
在这里,R编译器产生了这种错误,因为参数2只包含一个唯一的值,等于6。由于这个预测变量根本不存在任何变化,因此R编译器无法有效地拟合回归模型。
# Create a data frame
dataframe <- data.frame(parameter1=c(8, 1, 13, 24, 9),
parameter2=as.factor(6),
parameter3=c(17, 9, 18, 13, 12),
parameter4=c(12, 21, 32, 4, 19))
# Try to fit a multiple regression model
model <- lm(parameter4 ~ parameter1 + parameter2 +
parameter3, data=dataframe)
输出
如何修复这个错误
注意,我们可以同时使用sapply()和lapply()函数来计算每个预测变量中存在的唯一值的数量。
例子
在这里,使用lapply()函数,我们甚至可以打印各个预测变量中存在的值。
# Create a data frame
dataframe <- data.frame(parameter1=c(8, 1, 13, 24, 9),
parameter2=as.factor(6),
parameter3=c(17, 9, 18, 13, 12),
parameter4=c(12, 21, 32, 4, 19))
# Find the unique values for each variable
sapply(lapply(dataframe, unique), length)
输出
例子
现在从下面的代码中,我们可以看到参数2只包含一个唯一的值。因此,我们可以通过简单地从回归模型中删除参数2来解决这个错误。
# Create a data frame
dataframe <- data.frame(parameter1=c(8, 1, 13, 24, 9),
parameter2=as.factor(6),
parameter3=c(17, 9, 18, 13, 12),
parameter4=c(12, 21, 32, 4, 19))
# Find the unique values for each variable
lapply(dataframe[c('parameter1', 'parameter2',
'parameter3', 'parameter4')],
unique)
输出
例子
因此,通过删除参数2,程序编译成功,没有任何错误。
# Create a data frame
dataframe <- data.frame(parameter1=c(8, 1, 13, 24, 9),
parameter2=as.factor(6),
parameter3=c(17, 9, 18, 13, 12),
parameter4=c(12, 21, 32, 4, 19))
# Fit regression model using all the predictor variables
# except parameter2
model <- lm(parameter4 ~ parameter1 + parameter3, data=dataframe)
# Display model summary
summary(model)
输出