如何使用 lm() 修复此无效类型错误?

How can I fix this invalid type error using lm()?

Error in model.frame.default(formula = data$conservationstatus ~ data$latitude,  : 
  invalid type (NULL) for variable 'data$conservationstatus

我有一个数据集(在读取 CSV 文件后称为数据),它包含“保护状态”和“纬度”列。我正在尝试使用

对这两个执行线性回归
lm(data$ConservationStatus ~ data$Latitude, data = data)

但是,我一直收到上述错误。好像是因为我的专栏里面有两个字。我试过 data$Conservation Status、data$'Conservation Status'、data$Conservation.Status,但似乎没有任何效果 :(

我们可以不用data$指定公式。如果列名有空格,用反引号把列名包起来

model <- lm(`Conservation Status` ~ Latitude, data = data)

可以用一个简单的例子复现

data(iris)
lm(iris$epal.Length ~ iris$Species, iris)

Error in model.frame.default(formula = iris$epal.Length ~ iris$Species, : invalid type (NULL) for variable 'iris$epal.Length'

并使用正确的语法

lm(Sepal.Length ~ Species, iris)

#Call:
#lm(formula = Sepal.Length ~ Species, data = iris)

#Coefficients:
#      (Intercept)  Speciesversicolor   Speciesvirginica  
#            5.006              0.930              1.582  

您可能 mis-spelling 一个变量名,检查 colnames(data) 看它是如何拼写的。

例如,

lm(mtcars$MPG ~ mtcars$disp)
# Error in model.frame.default(formula = mtcars$MPG ~ mtcars$disp, drop.unused.levels = TRUE) : 
#   invalid type (NULL) for variable 'mtcars$MPG'

lm(mtcars$mpg ~ mtcars$disp)
# Call:
# lm(formula = mtcars$mpg ~ mtcars$disp)
# Coefficients:
# (Intercept)  mtcars$disp  
#    29.59985     -0.04122  

注意到 mpg 是 lower-case,不是我第一次尝试的大写。

colnames(mtcars)
#  [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"

我同意@akrun 的建议,而不是使用 lm(mpg ~ disp, data=data),因为命名法(对我来说)似乎更易读,但在那种情况下它会抛出不同的错误,如您所见。