【问题标题】:GLM Parse Categorical CoefficientsGLM 解析分类系数
【发布时间】:2017-10-02 23:57:24
【问题描述】:

我正在尝试创建整洁的数据,并且正在尝试将章程值与字段名称分开

#Example: 

data(mtcars)
library(broom)

#Adding some new character variables
mtcars1 <- mtcars
mtcars1$has_leter_yn <- ifelse(grepl("[[:digit:]]"
                                 , rownames(mtcars))==TRUE, "1 Y", "2 N")

mtcars1$first_letter <- substr(rownames(mtcars), 1,1)

mtcars1$cyl_yn <- ifelse(mtcars$cyl > 5, "Y", "N") 

mtcars1$am_yn <- ifelse(mtcars$am > 0.5, "N", "Y") 

mtcars1$hp_yn <- ifelse(mtcars$hp > 200, "POWER", "WEAK") 

#model 
mod <- glm(mpg ~ wt + first_letter + has_leter_yn + cyl_yn +am_yn + hp_yn
       , data =  mtcars1)

#broom tidy function
tidy(mod)

             term    estimate std.error   statistic      p.value
1      (Intercept) 25.46529192  5.155178  4.93974994 0.0001243241
2               wt -2.38861746  1.338905 -1.78400876 0.0922815327
3    first_letterC  4.63900549  3.751079  1.23671244 0.2330073046
4    first_letterD  0.95497914  3.332624  0.28655476 0.7779162451
5    first_letterF  3.78125890  3.337474  1.13297017 0.2729534747
6    first_letterH  4.74971469  3.163074  1.50161363 0.1515430178
7    first_letterL  4.21825272  3.570943  1.18127128 0.2537575961
8    first_letterM  2.81979616  3.149218  0.89539568 0.3830789592
9    first_letterP  3.44802708  3.445036  1.00086826 0.3309248121
10   first_letterT  4.24503396  3.581256  1.18534795 0.2521854417
11   first_letterV  0.90257581  3.474959  0.25973711 0.7981860095
12 has_leter_yn2 N  0.06314099  1.394756  0.04527028 0.9644194087
13         cyl_ynY -4.51802483  1.637415 -2.75924279 0.0134056327
14          am_ynY -1.33513554  1.827695 -0.73050238 0.4750310328
15       hp_ynWEAK  3.72962845  2.042696  1.82583649 0.0854925603

有没有办法将 first_letter 和 C 分开?

我想在数据框中使用估计值、术语和字符以供将来使用。任何帮助,将不胜感激!

【问题讨论】:

  • 什么意思?仅从系数估计名称的first_letterC 中获取“C”?
  • 我想要两列。一个带有 first_letter 和一个带有 C(每个术语以此类推)我不确定描述它的术语。
  • 你的意思是回归的输出中有两列吗?你能展示一下最终的输出应该是什么样子吗?
  • 让我快速构建一些东西。

标签: r glm tidyverse broom


【解决方案1】:

这样的吗?

xy <- tidy(mod)

data.frame(letter = gsub(pattern = "^(*.|first_letter)([A-Z])", replacement = "\\2", x = xy$term),
           prepend = gsub(pattern = "^(*.|first_letter)([A-Z])", replacement = "\\1", x = xy$term),
           oldterm = xy$term)

            letter         prepend         oldterm
1       Intercept)      (ntercept)     (Intercept)
2               wt              wt              wt
3                C    first_letter   first_letterC
4                D    first_letter   first_letterD
5                F    first_letter   first_letterF
6                H    first_letter   first_letterH
7                L    first_letter   first_letterL
8                M    first_letter   first_letterM
9                P    first_letter   first_letterP
10               T    first_letter   first_letterT
11               V    first_letter   first_letterV
12 has_leter_yn2 N has_leter_yn2 N has_leter_yn2 N
13         cyl_ynY         cyl_ynY         cyl_ynY
14          am_ynY          am_ynY          am_ynY
15       hp_ynWEAK       hp_ynWEAK       hp_ynWEAK

【讨论】:

  • 真的很接近!我正在尝试将其用于其他变量,例如 hp_yn 或 has_leter_yn 等。这是一个玩具示例
  • @RyanJohn 所以它应该适用于所有变量 - 将最后一个大写字母(级别)与变量名分开?
  • 有没有一种方法可以分隔属于类别的数字,即:catagorical_var: 01:level, 02:level, 03:level ?
  • @RyanJohn 我认为最好用(可重现的)示例来讨论。编辑您的问题并使其尽可能笼统,因为在特殊情况下事情并不总是可以扩展的。也许你也可以指定你的最终游戏是什么。可能有更简单的方法。
  • 你说得对——我需要一个更好的例子。感谢您的帮助 - 非常感谢!
猜你喜欢
  • 2022-01-16
  • 2011-03-31
  • 2021-07-06
  • 2017-04-22
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 2013-10-01
相关资源
最近更新 更多