繁体   English   中英

如何使用 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,但似乎没有任何效果:(

您可能colnames(data)了变量名,请检查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是小写的,而不是我第一次尝试的大写。

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

我同意@akrun 的建议,而是使用lm(mpg ~ disp, data=data) ,因为命名法(对我来说)似乎更具可读性,但正如您所发现的那样,在这种情况下它会引发不同的错误。

我们可以指定没有data$的公式。 如果列名有空格,使用反引号将列名包裹起来

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

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

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

model.frame.default(formula = iris$epal.Length ~ iris$Species, : 变量 'iris$epal.Length' 的无效类型 (NULL) 中的错误

并使用正确的语法

lm(Sepal.Length ~ Species, iris)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM