简体   繁体   中英

Draw a logarithmic curve on graph in R

I have the following set of data and when plotted has a curvilinear relationship

Fish.species.richness   Habitat.Complexity  log.habitat
17  0.6376  -0.1954858
13  0.2335  -0.6317131
30  0.2866  -0.5427238
20  0.3231  -0.4906630
22  0.1073  -0.9694003
25  0.2818  -0.5500590
2   0.2182  -0.6612448
4   0.0189  -1.7246886
19  0.2960  -0.5287083
25  0.5507  -0.2590849
29  0.2689  -0.5704900
21  0.6286  -0.2016602
18  0.1557  -0.8078509
24  0.6851  -0.1642460
30  0.5059  -0.2959353
32  0.4434  -0.3532043
29  0.3585  -0.4455108
32  0.5920  -0.2276783

When I log the x axis and do a linear regression to find the intercept and slope I am able to add a line that fits the data:

summary(lm(Fish.species.richness~log.habitat,data=three))

plot(three$log.habitat,
 three$Fish.species.richness,
 xlab='Log Habitat Complexity',
 ylab='Fish Species Richness')
abline(29.178,13.843)

However when I then do a curvilinear regression and try to plot the curve it doesn't fit the data, where am I going wrong?

mod.log<-lm(Fish.species.richness~log(Habitat.Complexity),data=three)

plot(three$Habitat.Complexity,
 three$Fish.species.richness)
abline(mod.log)

Using ggplot2 :

ggplot(three, aes(Habitat.Complexity, Fish.species.richness))+
  geom_point(shape = 1) + stat_smooth(method = "lm", formula = y ~ log(x))

在此输入图像描述

abline can only draw straight lines, on the form y = a + bx . Other curves can be added using the curve function.

plot(Fish.species.richness ~ Habitat.Complexity, three)
curve(coef(mod.log)[1] + coef(mod.log)[2]*log(x), add=TRUE)

对数曲线拟合

For clarity and flexibility to other model types, you may want to use the predict function to calculate the predicted values along the range of your predictor variable:

mod.log<-lm(Fish.species.richness~log(Habitat.Complexity), data=three)

# predict along predictor variable range
newdat <- data.frame(Habitat.Complexity=seq(min(three$Habitat.Complexity), max(three$Habitat.Complexity),,100))
newdat$Fish.species.richness <- predict(mod.log, newdat, type="response")

# plot
plot(Fish.species.richness ~ Habitat.Complexity, data=three)
lines(Fish.species.richness ~ Habitat.Complexity, data=newdat)

在此输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM