R语言如何修复:Contrasts can be applied only to factors with 2 or more levels

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

输出

R语言如何修复:Contrasts can be applied only to factors with 2 or more levels

正如你在上面的代码中看到的,参数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)

输出

R语言如何修复:Contrasts can be applied only to factors with 2 or more levels

如何修复这个错误

注意,我们可以同时使用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)

输出

R语言如何修复:Contrasts can be applied only to factors with 2 or more levels

例子

现在从下面的代码中,我们可以看到参数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)

输出

R语言如何修复:Contrasts can be applied only to factors with 2 or more levels

例子

因此,通过删除参数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)

输出

R语言如何修复:Contrasts can be applied only to factors with 2 or more levels

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程