线性趋势中的负值和 R 中的置信区间

问题描述 投票:0回答:1

首先是使用的代码。

ggplot(correlation, aes(x=area_ha, y=extent_2000_ha)) 
+ geom_point( color="green") + theme_ipsum() 
+ theme(text=element_text(family="Times New Roman", size=14)) 
+ scale_y_continuous(labels=function(n){format(n, scientific = FALSE)})
+ scale_y_continuous(labels=scales::comma)
+ geom_smooth(method=lm, color="red", se=FALSE) 

当我想放置线性趋势和置信区间(附图)时,OY 上出现负值(-200.000)。所有的值都是正值。没有负值。

enter image description here

enter image description here

r ggplot2 rstudio geom
1个回答
0
投票

如果只有回归线严格为正才有意义,那么标准线性回归就不是适合您的数据的模型。线性回归将简单地找到使数据到直线的平方距离最小化的直线。它并不关心这是否意味着该线在您认为不应该的地方变为负值。这是you需要构建到模型中的额外约束,这取决于数据的上下文和物理解释(我们只能从问题中的信息猜测)。

例如,您可以考虑固定截距为 0 的线性回归:

ggplot(correlation, aes(x = area_ha, y = extent_2000_ha)) +
  geom_point( color = "green4", alpha = 0.2) + 
  theme_ipsum() + 
  theme(text=element_text(family="Times New Roman", size=14)) + 
  scale_y_continuous(labels = scales::comma) +
  scale_x_continuous(labels = scales::comma, limits = c(0, 8e5)) +
  geom_smooth(method = "lm", color = "red3", formula = y ~ x + 0,
              fullrange = TRUE, alpha = 0.2) 

enter image description here

或者可能是具有对数链接函数的广义线性模型:

ggplot(correlation, aes(x = area_ha, y = extent_2000_ha)) +
  geom_point( color = "green4", alpha = 0.2) + 
  theme_ipsum() + 
  theme(text=element_text(family="Times New Roman", size=14)) + 
  scale_y_continuous(labels = scales::comma) +
  scale_x_continuous(labels = scales::comma, limits = c(0, 8e5)) +
  geom_smooth(method = "glm", color = "red", method.args = list(family = poisson),
              fullrange = TRUE) 

enter image description here

至于哪种模型最好,这是一个统计问题,而不是一个编程问题。因此,这里是题外话,但可能是CrossValidated的主题。


使用的数据

问题中没有包含数据,因此我从以下代码创建了一个类似的数据集来创建上述示例

library(ggplot2)
library(hrbrthemes)

set.seed(2)
correlation <- data.frame(area_ha = runif(100, 1, 8e5))
correlation$extent_2000_ha <- (correlation$area_ha + 
                                 rnorm(100, 0, correlation$area_ha))^2/9e6
correlation <- correlation[correlation$extent_2000_ha > 1e4,]
correlation <- correlation[correlation$extent_2000_ha < 1e6,]
correlation <- round(correlation)
© www.soinside.com 2019 - 2024. All rights reserved.