需要帮助使用 log() 函数对数据建模
Need help modeling data with a log() function
我有一些数据 Excel 非常适合对数趋势。我想将相同的数据传递给 R,让它告诉我系数和截距。数据应该以什么形式存在?我应该调用什么函数来计算系数?最终,我想这样做数千次,这样我就可以预测未来。
传递 Excel 这些值生成此趋势线函数:y = -0.099ln(x) + 0.7521
数据:
y <- c(0.7521, 0.683478429, 0.643337383, 0.614856858, 0.592765647, 0.574715813,
0.559454895, 0.546235287, 0.534574767, 0.524144076, 0.514708368)
就上下文而言,数据点表示在给定日期保留的我们用户群的百分比。
该问题省略了 x
的值,但向后计算似乎您使用的是 1、2、3,...所以请尝试以下操作:
x <- 1:11
y <- c(0.7521, 0.683478429, 0.643337383, 0.614856858, 0.592765647,
0.574715813, 0.559454895, 0.546235287, 0.534574767, 0.524144076,
0.514708368)
fm <- lm(y ~ log(x))
给予:
> coef(fm)
(Intercept) log(x)
0.7521 -0.0990
和
plot(y ~ x, log = "x")
lines(fitted(fm) ~ x, col = "red")
您可以通过以下方式获得相同的结果:
y <- c(0.7521, 0.683478429, 0.643337383, 0.614856858, 0.592765647, 0.574715813, 0.559454895, 0.546235287, 0.534574767, 0.524144076, 0.514708368)
t <- seq(along=y)
> summary(lm(y~log(t)))
Call:
lm(formula = y ~ log(t))
Residuals:
Min 1Q Median 3Q Max
-3.894e-10 -2.288e-10 -2.891e-11 1.620e-10 4.609e-10
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.521e-01 2.198e-10 3421942411 <2e-16 ***
log(t) -9.900e-02 1.261e-10 -784892428 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.972e-10 on 9 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 6.161e+17 on 1 and 9 DF, p-value: < 2.2e-16
对于大型项目,我建议将数据封装到数据框中,例如
df <- data.frame(y, t)
lm(formula = y ~ log(t), data=df)
我有一些数据 Excel 非常适合对数趋势。我想将相同的数据传递给 R,让它告诉我系数和截距。数据应该以什么形式存在?我应该调用什么函数来计算系数?最终,我想这样做数千次,这样我就可以预测未来。
传递 Excel 这些值生成此趋势线函数:y = -0.099ln(x) + 0.7521
数据:
y <- c(0.7521, 0.683478429, 0.643337383, 0.614856858, 0.592765647, 0.574715813,
0.559454895, 0.546235287, 0.534574767, 0.524144076, 0.514708368)
就上下文而言,数据点表示在给定日期保留的我们用户群的百分比。
该问题省略了 x
的值,但向后计算似乎您使用的是 1、2、3,...所以请尝试以下操作:
x <- 1:11
y <- c(0.7521, 0.683478429, 0.643337383, 0.614856858, 0.592765647,
0.574715813, 0.559454895, 0.546235287, 0.534574767, 0.524144076,
0.514708368)
fm <- lm(y ~ log(x))
给予:
> coef(fm)
(Intercept) log(x)
0.7521 -0.0990
和
plot(y ~ x, log = "x")
lines(fitted(fm) ~ x, col = "red")
您可以通过以下方式获得相同的结果:
y <- c(0.7521, 0.683478429, 0.643337383, 0.614856858, 0.592765647, 0.574715813, 0.559454895, 0.546235287, 0.534574767, 0.524144076, 0.514708368)
t <- seq(along=y)
> summary(lm(y~log(t)))
Call:
lm(formula = y ~ log(t))
Residuals:
Min 1Q Median 3Q Max
-3.894e-10 -2.288e-10 -2.891e-11 1.620e-10 4.609e-10
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.521e-01 2.198e-10 3421942411 <2e-16 ***
log(t) -9.900e-02 1.261e-10 -784892428 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.972e-10 on 9 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 6.161e+17 on 1 and 9 DF, p-value: < 2.2e-16
对于大型项目,我建议将数据封装到数据框中,例如
df <- data.frame(y, t)
lm(formula = y ~ log(t), data=df)