📜  如何在 R 中修复:对比只能应用于具有 2 个或更多级别的因子。

📅  最后修改于: 2022-05-13 01:55:17.010000             🧑  作者: Mango

如何在 R 中修复:对比只能应用于具有 2 个或更多级别的因子。

在本文中,我们将讨论如何修复 R 编程语言中的“对比只能应用于具有 2 个或更多级别的因子”错误。

对比只能应用于具有 2 个或更多水平的因子:

这是 R 编译器产生的常见错误。此错误的完整形式如下:

当我们尝试在预测变量的帮助下拟合回归模型时,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)

输出: