问题描述
我有一个带有时间数据的数据框dt.Data
(该数据框的值每天都在变化),我正在用ggplot()
绘制相关散布图和回归线。 R代码如下所示:
set.seed(123)
## Create data frame: ##
df.Data <- data.frame(date = seq(as.Date('2018-01-01'),by = '1 day',length.out = 1100),DE = rnorm(1100,2,1),AT = rnorm(1100,5,2))
corPearson <- cor.test(x = df.Data$DE,y = df.Data$AT,method = "pearson")
df.Data$year <- format(as.Date(df.Data$date),'%Y')
p <- ggplot(data = df.Data,aes(x = DE,y = AT,group = 1)
) +
geom_point(aes(color = year)) +
geom_smooth(method = "lm",se = FALSE,color = "#007d3c") +
theme_classic() +
theme(legend.position = "none") +
theme(panel.background = element_blank()) +
scale_colour_brewer(palette = 'Greens') +
xlab(product1) +
ylab(product2) +
ggtitle("Correlation Scatter Plot (Pearson)") +
theme(plot.title = element_text(hjust = 0.5,face = "bold"))
# Correlation plot converting from ggplot to plotly: #
CorrelationPlot <- plotly::ggplotly(p,tooltip = "text")
回归线绘制为:geom_smooth(method = "lm",color = "#007d3c")
。
情节如下:
我现在的问题是: 如何以 f(x)= kx + d 的形式获得回归线的函数?我已经在stackoverflow中见过几次这个问题,但是没有答案是完整或有用的。有人可以帮我吗?
编辑: 如果我使用这个
reg <- lm(df.Data$AT ~ df.Data$DE)
summary(reg)
d=5.07667
(红色)和k=-0.03306
(蓝色)在哪里?这个对吗?
如何提取两个值并构造如下函数:f(x)=kx+d=-0.3303x+5.07667
??
我需要这个f(x)
作为RShiny应用程序中valueBox()
的输出。
解决方法
您可以使用lm()
函数:
reg <- lm (df.Data$AT ~ df.Data$DE)
summary (reg)
总结时,您可以看到截距,即您的d和斜率(即您的k)。 让我知道这是否有帮助:)
,对于新的预测,您可以使用预测功能。
提示: 对于新数据的预测,您必须在Forecast函数中为data.frame提供一个与公式中的列名称相同的data.frame参数。但是,如果您通过以下方式拟合模型:
reg <- lm (df.Data$AT ~ df.Data$DE)
您将不得不创建一个新的data.frame,其列名称为'df.Data $ DE',这很烦人。
使用lm函数中的“数据”参数更方便:
reg <- lm(AT ~ DE,data = df.Data)
predict(reg,newdata = data.frame(DE = 2.0))
提示: 如果您仅对模型的系数感兴趣,还可以使用“ coef”方法:
reg <- lm(AT ~ DE,data = df.Data)
coef(reg)