具有不同截距的线性模型的斜率:如何标准化/标准化斜率以进行比较?

时间:2016-10-02 13:28:41

标签: r linear-regression

我有代码将线性模型拟合到R中的数据。我的自变量是AGE,我的因变量是Costs。我很感兴趣,一般来说,成本会随着AGE的增加而增加。但是对于某些部分,我的截距是10,而对于其他部分,我的截距是1000,因此货币单位的增加没有帮助,因为截距为10,斜率为1个货币单位,每年1个单位的斜率可能很多每年都可以忽略不计。任何人都可以帮忙解决这个问题,在用lm计算它们之后标准化R中的斜率来比较它们吗?

示例

data.ex <- data.frame(Age = c(c(1:10), c(1:10)),
                  Costs = c(11,12,13,14,15,12,17,18,19,20, 1001,1002,1003,1004,999,1006,1007,1008,1009,1010),
                  Type = c(rep("A", 10), rep("B", 10)))
pt <- ggplot(data = data.ex, aes(x=Age, y = Costs))+
geom_smooth(method="lm")+
facet_wrap(facets = "Type", nrow = 2)
plot(pt)
print(with(data.ex[data.ex$Type == "A", ], lm(Costs ~ Age)))
print(with(data.ex[data.ex$Type == "B", ], lm(Costs ~ Age)))   

2 个答案:

答案 0 :(得分:1)

你可以尝试使用不同比例的y轴...但实际上我真的不明白你的问题。

Age = c(1:10)
Costs = c(11,12,13,14,15,12,17,18,19,20) 
plot(Age, Costs, type="l", col="blue", lwd=2)

Costs = c(1001,1002,1003,1004,999,1006,1007,1008,1009,1010)
plot(Age, Costs, type="l", col="blue", lwd=2)

答案 1 :(得分:1)

正如其他人所指出的那样,在scales = 'free'中设置facet_wrap会使两条线在图中更明显。

对于你的另一个问题,你的措辞有点不清楚,但听起来像你说的那样,&#34;如果基线费用从10美元开始,那么每年1美元的增加是巨大的,而在基线成本为1,000美元,1美元/年并不重要。我如何表现出这种差异?&#34;

一种方法是根据拦截规范化每个组:

library(dplyr)

# calculate intercepts for each group and extract them:
intercept.ex <- group_by(data.ex, Type) %>% 
  do(data.frame(intercept = coef(lm(Costs ~ Age, data = .))[1]))

# normalize the values in each group against their intercepts
data.ex <- merge(data.ex, intercept.ex) %>% 
  mutate(Costs = Costs / intercept)

# Age slope = 0.1002
print(with(data.ex[data.ex$Type == "A", ], lm(Costs ~ Age)))

# Age slope = 0.001037
print(with(data.ex[data.ex$Type == "B", ], lm(Costs ~ Age))) 

我应该指出,由于年龄和成本之间的关系非常清楚,因此两个斜率仍然具有统计显着性。但相对效果大小在它们之间是非常不同的。