【问题标题】:linear regression function creating a list instead of a model线性回归函数创建列表而不是模型
【发布时间】:2019-06-15 18:38:18
【问题描述】:

我正在尝试使用 R 拟合 lm 模型。但是,出于某种原因,此代码创建了一个数据列表,而不是通常的回归模型。

我使用的代码是这个 lm(Soc_vote ~ Inclusivity + Gini + Un_den, data = general_inclusivity_sweden )

但与通常的系数不同,变量的标题以这种方式与数据混合在一起:

     (Intercept)  Inclusivity0.631  Inclusivity0.681  Inclusivity0.716    Inclusivity0.9  
           35.00             -4.00             -6.74             -4.30              4.90

有人知道为什么会发生这种情况以及如何解决吗?

【问题讨论】:

  • 那个调用并没有完全给出那个结果。要获得该结果,您可以在看起来像 lm(y ~ Inclusivity, df) 的模型上调用 coef(或等效项),其中 Inclusivity 是字符或因子,因此附加的数字是对比度级别。另请注意,这不是一个列表,它是一个数字向量。
  • 也许你想要summary(lm(Soc_vote ~ Inclusivity + Gini + Un_den, data = general_inclusivity_sweden))

标签: r


【解决方案1】:

您所看到的称为named num(带有名称的数字向量)。您可以执行以下操作:

Model <-  lm(Soc_vote ~ Inclusivity + Gini + Un_den, data = general_inclusivity_sweden) # Assign the model to an object called Model
summary(Model) # Summary table
Model$coefficients # See only the coefficients as a named numeric vector
Model$coefficients[[1]] # See the first coefficient without name

如果您想要所有没有名称的系数(所以只是一个数字向量),请尝试:

unname(coef(Model))

【讨论】:

  • 那不是列表,是数值向量
  • 是的,我刚刚更新了答案。原来它是一个命名的数字向量。谢谢。
【解决方案2】:

如果您可以提供数据样本会很好,但我猜关键问题是Inclusivity 中的数字数据被存储为一个因素。例如,

library(tidyverse)
x <- tibble(incl = as.factor(c(0.631, 0.681, 0.716)), 
                         soc_vote=1:3)
lm(soc_vote ~ incl, x)

Call:
lm(formula = soc_vote ~ incl, data = x)

Coefficients:
(Intercept)    incl0.681    incl0.716  
          1            1            2  

然而,如果您首先将 Inclusivity 列转换为双精度,则会得到

y <- x %>% mutate(incl = as.double(as.character(incl)))
lm(soc_vote ~ incl, y)

Call:
lm(formula = soc_vote ~ incl, data = y)

Coefficients:
(Intercept)         incl  
     -13.74        23.29  

请注意,我需要先转换为字符,否则我只会得到每个因子的序数等价物。

【讨论】:

    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2021-01-11
    相关资源
    最近更新 更多