2017-08-02 71 views
0

我在R中使用对数x轴绘图的非常宽的x范围内有一些数据。当我使用MS Excel绘制数据并添加线性趋势线时,结果输出我希望看到我的数据集和预期结果(下图)。将回归线添加到对数x尺度

Excel scatterplot

我想实现这个使用R.我可以绘制数据确定,并运行回归模型,但[R似乎并不希望添加回归线/曲线。

这里是我的数据:

data <- 
    data.frame(
    x = c(
     6.37E-05, 
     0.000584271, 
     0.001044085, 
     0.00011272, 
     3.95E-05, 
     6.05E-05, 
     0.000277963, 
     0.001800305, 
     3.70E-05, 
     0.002588335, 
     0.000710123, 
     0.000148309, 
     0.001069184, 
     0.001877917, 
     0.01086776, 
     0.043686462, 
     0.000276426 
    ), 
    y = c(
     -0.3375, 
     -0.35, 
     -0.35, 
     -0.35, 
     -0.3, 
     -0.35, 
     -0.3625, 
     -0.375, 
     -0.3, 
     -0.3625, 
     -0.3, 
     -0.3375, 
     -0.29, 
     -0.34, 
     -0.4, 
     -0.48, 
     -0.3375 
    ) 
) 

而且这里是我一直到目前为止的代码。

attach(data) 
    plot(data$x,data$y,log="x",xlab="independent variable", 
    ylab="dependent variable") 
model<-lm(data$y~data$x) 
abline(model) # THIS STEP DOESN'T WORK 

我有三个疑问:

1)。如何在基本R中的y〜logx图上显示回归线? 2)。我如何重复1)。使用ggplot? 3)。当回归线/曲线开始“倾斜”时,如何找到(log)x值?

谢谢。

+0

回复:3)。回归线不断减少,斜率不变。在任何时候它都不会“开始”下沉。 – Brian

回答

0

你能否让这个例子可以重现? 我认为这可能会工作。

dataframe %>% 
ggplot(aes(x = log(x), y = y) + 
geom_point() + 
geom_smooth(method = "loess") + 
xlab("independent variable") 

这使用dplyr和ggplot2。

+0

我只是在尝试此操作时收到错误消息。 '库(GGPLOT2) 库(dplyr) ATTACH(数据) 数据帧%>% ggplot(AES(X =日志(x)时,Y = Y)+ geom_point()+ geom_smooth(方法=“黄土“)+ xlab(”自变量“)) eval(expr,envir,enclos)中的错误:object'dataframe'not found aes(x = log(x),y​​ = y)+ geom_point (): 对二元运算符的非数字参数 –

+0

尝试将数据集的名称从“dataframe”更改为“data”以匹配数据集名称。 – AaronT86

0
ggplot(data, aes(x, y)) + geom_point() + stat_smooth(method = "lm") 

enter image description here

ggplot(data, aes(x, y)) + geom_point() + stat_smooth(method = "lm") + 
    coord_trans(x = "log10") 

enter image description here

正如你所看到的,有没有点时的回归线 “开始 '探底'。”


更新

你的情节之前如果登录变换你的x值,你结束了这样的数字:

enter image description here

如果你真正感兴趣是变化点分析,你可以适应。

data.fit <- nls(100*y ~ pmin(plat, intx + slx*log(x)), 
        data = data, 
        start = list(plat = -32, intx = -60, slx = -4), 
        control = nls.control(warnOnly = T)) 
summary(data.fit) 
coef(data.fit) 

enter image description here

+0

我看到你的观点:回归线的非曲率,但是当我使用log(x)尺度绘制数据时,我所寻找的是“它开始倾斜”的点。首先使用'data $ Xlog <-log(data $ x)'然后将模型拟合到'y〜Xlog',是否有一种通过绘制log x vs y来拟合曲线的方法? –

+0

从字面上看,没有任何地方可以开始浸泡。由于线的斜率不变,它总是以相同的速率弯曲。如果你使用了'y〜Xlog',你会有一条直线,但点的分布情况与第二个图相同,我猜这不是你想要的。看看上面的情节,你想称之为“开始浸泡”的点在哪里? – Brian

+0

假设我绘制了logX与Y的关系曲线(并且假设logX是x,而不是转换轴的值)并拟合非线性最小二乘或多项式回归模型;曲线会改变斜率;正确??这些数据来自实验,我正在寻找一个x阈值,其中y开始显着不同。在你上面的第二个ggplot上,我猜“dip”开始于0.01 x值左边的刻度线周围;或在那里。在那个例子中,我意识到它实际上并不是一个“曲线”,因为x尺度已被对数转换。 –