2015-12-18 2 views
0

У меня есть некоторые данные о том, что Excel будет хорошо сочетаться с логарифмическим трендом. Я хочу передать те же данные в R, и скажите мне коэффициенты и перехват. Какая форма должна содержать данные и какую функцию я должен вызывать, чтобы определить коэффициенты? В конечном счете, я хочу сделать это тысячи раз, чтобы я мог проектировать в будущее.Нужна помощь в моделировании данных с помощью функции log()

Передача 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) 

Для контекста, точки данных представляют% нашей абонентской базы, которые удерживаются на данный день.

ответ

1

вопрос опущено значение из 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") 

screenshot

+0

Отлично! Спасибо. – MAlex

1

Вы можете получить те же результаты по:

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) 
+0

Отличный отклик. Спасибо. Мне действительно нужно делать это для сотен когорт каждый день. Каждая когорта будет иметь различное количество доступных точек данных (в зависимости от того, как долго они активны). Как бы вы приблизились к тому, чтобы собрать целую кучу когорт с различным количеством истории и моделирования каждого, чтобы получить coef()? – MAlex

+0

Я бы сделал простой цикл с 'lm()' внутри. Это зависит от того, как вы получаете данные для каждой когорты, и что вы будете делать с результатами. –