我一直在尝试找出如何模仿使用R定价软件Emblem开发的分段线性回归模型。我在下面的文章中使用@Roland的答案进行了模拟。
因此要得到斜率,多亏@Roland,我使用了as.numeric((variable 这是怎么回事?为什么“数字”给我正确的答案?我找不到关于它的文档,并且我想了解为什么这样做。
答案 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
之类的骇客骇客,但在公式中无法使用,因为*
在公式中具有特殊含义,因此您必须在其周围使用I
:I((x<9.6)*1)
-我说as.numeric
看起来更干净。