as.numeric 这里是怎么用的?
How is as.numeric used here?
我一直在尝试弄清楚如何使用 R 来模拟在定价软件 Emblem 中开发的分段线性回归模型。我使用下面 post 中的@Roland 的回答做到了这一点。
因此,为了获得斜率,感谢@Roland,我使用 as.numeric((variable < X)) 来获得预测变量中第二段的斜率。
这是怎么回事?为什么 "as.numeric" 给我正确答案?我找不到关于它的文档,我想了解为什么会这样。
它将布尔值 (TRUE
/ FALSE
) 转换为数值 (1
/ 0
)。
(布尔值的 R-y 名称是 "logical":is.logical(TRUE)
returns TRUE
。)
x < 10 # TRUE if x is less than 10, FALSE if x is 10 or more
as.numeric(x<10) # 1 if x is less than 10, 0 if x is 10 or more
话虽如此,您实际上并不需要 as.numeric
。你可以做的是:
# will also work:
mod2 <- lm(y~I((x<9.6)*x)+(x<9.6)+I((x>=9.6)*x)+(x>=9.6)-1)
此版本将直接使用布尔值——这些值被隐式转换为因子,因子在 lm
中的作用是将其转换为 k-1
二分变量,其中 k
是级别数。这就是为什么,如果你使用上面的代码,你会在 lm
输出中看到像 x < 9.6TRUE
这样的变量名称。
再一次,从技术上讲,as.numeric
是一种 hack,更透明的方法可能是 ifelse(x<9.6,1,0)
。但是 hack 不一定是坏事,所以你可能更喜欢更 hackier hack,比如 (x<9.6)*1
但这在公式中不起作用,因为 *
在公式中有特殊含义,所以你必须在它周围使用 I
:I((x<9.6)*1)
- 我会说 as.numeric
看起来更干净。
我一直在尝试弄清楚如何使用 R 来模拟在定价软件 Emblem 中开发的分段线性回归模型。我使用下面 post 中的@Roland 的回答做到了这一点。
因此,为了获得斜率,感谢@Roland,我使用 as.numeric((variable < X)) 来获得预测变量中第二段的斜率。
这是怎么回事?为什么 "as.numeric" 给我正确答案?我找不到关于它的文档,我想了解为什么会这样。
它将布尔值 (TRUE
/ FALSE
) 转换为数值 (1
/ 0
)。
(布尔值的 R-y 名称是 "logical":is.logical(TRUE)
returns TRUE
。)
x < 10 # TRUE if x is less than 10, FALSE if x is 10 or more
as.numeric(x<10) # 1 if x is less than 10, 0 if x is 10 or more
话虽如此,您实际上并不需要 as.numeric
。你可以做的是:
# will also work:
mod2 <- lm(y~I((x<9.6)*x)+(x<9.6)+I((x>=9.6)*x)+(x>=9.6)-1)
此版本将直接使用布尔值——这些值被隐式转换为因子,因子在 lm
中的作用是将其转换为 k-1
二分变量,其中 k
是级别数。这就是为什么,如果你使用上面的代码,你会在 lm
输出中看到像 x < 9.6TRUE
这样的变量名称。
再一次,从技术上讲,as.numeric
是一种 hack,更透明的方法可能是 ifelse(x<9.6,1,0)
。但是 hack 不一定是坏事,所以你可能更喜欢更 hackier hack,比如 (x<9.6)*1
但这在公式中不起作用,因为 *
在公式中有特殊含义,所以你必须在它周围使用 I
:I((x<9.6)*1)
- 我会说 as.numeric
看起来更干净。