如何在 R 中修复:对比只能应用于具有 2 个或更多级别的因子。
在本文中,我们将讨论如何修复 R 编程语言中的“对比只能应用于具有 2 个或更多级别的因子”错误。
对比只能应用于具有 2 个或更多水平的因子:
这是 R 编译器产生的常见错误。此错误的完整形式如下:
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
当我们尝试在预测变量的帮助下拟合回归模型时,R 编译器会产生这样的错误,该预测变量是字符或因子并且仅包含一个唯一值。
何时可能发生此错误:
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
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)
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))
# Find the unique values for each variable
sapply(lapply(dataframe, unique), length)
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))
# Find the unique values for each variable
lapply(dataframe[c('parameter1', 'parameter2',
'parameter3', 'parameter4')],
unique)
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))
# Fit regression model using all the predictor variables
# except parameter2
model <- lm(parameter4 ~ parameter1 + parameter3, data=dataframe)
# Display model summary
summary(model)
输出:
正如您在上面的代码中看到的,parameter2 是一个仅包含唯一值的因子。如果我们尝试拟合其中 parameter2 用作预测变量的多元回归模型,则编译器会产生以下错误:
例子:
在这里,R 编译器会产生这种错误,因为 parameter2 仅包含一个等于 6 的唯一值。由于此预测变量根本不存在任何变化,因此 R 编译器无法有效地拟合回归模型。
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()函数,我们甚至可以打印各个预测变量中存在的值。
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))
# Find the unique values for each variable
sapply(lapply(dataframe, unique), length)
输出:
例子:
现在从下面的代码中,我们可以看到 parameter2 只包含一个唯一值。因此,我们可以通过简单地从回归模型中删除参数 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))
# Find the unique values for each variable
lapply(dataframe[c('parameter1', 'parameter2',
'parameter3', 'parameter4')],
unique)
输出:
例子:
因此,通过删除参数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))
# Fit regression model using all the predictor variables
# except parameter2
model <- lm(parameter4 ~ parameter1 + parameter3, data=dataframe)
# Display model summary
summary(model)
输出: