as.numeric在这里如何使用?

时间:2018-07-02 19:36:57

标签: r piecewise

我一直在尝试找出如何模仿使用R定价软件Emblem开发的分段线性回归模型。我在下面的文章中使用@Roland的答案进行了模拟。

https://stats.stackexchange.com/questions/61805/standard-error-of-slopes-in-piecewise-linear-regression-with-known-breakpoints

因此要得到斜率,多亏@Roland,我使用了as.numeric((variable

这是怎么回事?为什么“数字”给我正确的答案?我找不到关于它的文档,并且我想了解为什么这样做。

1 个答案:

答案 0 :(得分:3)

它将布尔(TRUE / FALSE)值转换为数字(1 / 0)。

(布尔值的R-y名称是“逻辑”:is.logical(TRUE)返回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是级别数。因此,如果使用上面的代码,则会在x < 9.6TRUE输出中看到像lm这样的变量名称。

再一次,从技术上讲,as.numeric是一种hack,更透明的方法可能类似于ifelse(x<9.6,1,0)。但是骇客不一定是坏事,因此您可能更喜欢(x<9.6)*1之类的骇客骇客,但在公式中无法使用,因为*在公式中具有特殊含义,因此您必须在其周围使用II((x<9.6)*1)-我说as.numeric看起来更干净。