当前位置:  开发笔记 > 编程语言 > 正文

将两个回归放在一个图上,它就形成了一个问题

如何解决《将两个回归放在一个图上,它就形成了一个问题》经验,为你挑选了1个好方法。

我试图在同一个情节上绘制两个回归.因此,在第一次回归结束的地方,第二次回归应该继续,并且由于第二次回归线具有不同的斜率,因此产生扭结.

我是ggplot的新手,我收到了错误:"错误:美学必须是长度为1或与dataProblems相同的长度:gdpless15"

这是R文件的链接以及此所需的数据集. 数据集和代码

我基本上对变量gdp做了ols回归.变量gdp被子集化为<15000和> 15000两部分.然后我想绘制<15000的回归线,当它达到> 15000时,它将在同一图上绘制第二次回归的回归线.

我认为使用ggplot2将两个回归图一起绘制最困难.

我试图重现的图表

这是我认为最接近我想要的代码的版本.

library(foreign)
library(ggplot2)

   gdpless15 <- isspmacro$gdp[(isspmacro$gdp < 15000) ] <- subset(isspmacro,gdpless15)
gdpless15 <-gdp < 15000 
gdpmore15 <- gdp > 15000

combinedreg <- ggplot() + 
    geom_point(data=less15, aes(x=gdpless15, y=hap)) + 
    geom_smooth(data=less15, aes(x=gdpless, y=hap), fill="blue",colour="darkblue", size=1) + 
    geom_point(data=more15, aes(x=gdpmore15, y=hap)) + 
    geom_smooth(data=more15, fill="red",colour="red", size=1) 

combinedreg <- ggplot() + 
    geom_point(data=less15, aes(x=gdpless15, y=hap)) +   
    geom_smooth(data=less15, aes(x=gdpless, y=hap), fill="blue",colour="darkblue", size=1) + 
    geom_point(data=more15, aes(x=gdpmore15, y=hap))+ 
    geom_smooth(method=lm) + geom_point(shape=1)



plot(combinedreg)

Alex W.. 5

注意:您最好使用示例或玩具数据集来说明问题,以便它可以重现.

你要做的是被称为破碎回归.您可以使用一个回归而不是两个回归轻松完成此操作.

# example data
library(faraway)
data(savings)

# create your broken stick regression, predict results
lhs <- function(x) ifelse(x < 35,35-x,0)
rhs <- function(x) ifelse(x < 35,0,x-35)
gb <- lm(sr ~ lhs(pop15) + rhs(pop15), savings)
savings$p <- predict(gb, savings)

# plot
library(ggplot2)
ggplot(savings, aes(x= pop15, y= sr) ) + geom_point() +
  geom_line(data= savings, aes(x= pop15, y=p), colour= "blue") +
  # marker of break
  geom_segment(aes(x=35, y= 5, xend= 35, yend= 15), colour= "red", linetype= "dashed")

在此输入图像描述



1> Alex W..:

注意:您最好使用示例或玩具数据集来说明问题,以便它可以重现.

你要做的是被称为破碎回归.您可以使用一个回归而不是两个回归轻松完成此操作.

# example data
library(faraway)
data(savings)

# create your broken stick regression, predict results
lhs <- function(x) ifelse(x < 35,35-x,0)
rhs <- function(x) ifelse(x < 35,0,x-35)
gb <- lm(sr ~ lhs(pop15) + rhs(pop15), savings)
savings$p <- predict(gb, savings)

# plot
library(ggplot2)
ggplot(savings, aes(x= pop15, y= sr) ) + geom_point() +
  geom_line(data= savings, aes(x= pop15, y=p), colour= "blue") +
  # marker of break
  geom_segment(aes(x=35, y= 5, xend= 35, yend= 15), colour= "red", linetype= "dashed")

在此输入图像描述

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有