我有代码将线性模型拟合到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)))
答案 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)))
我应该指出,由于年龄和成本之间的关系非常清楚,因此两个斜率仍然具有统计显着性。但相对效果大小在它们之间是非常不同的。