7

Excel では、特定の一連のトレンド ラインの対数トレンド ラインに適合させるのは非常に簡単です。傾向線の追加をクリックして、「対数」を選択するだけです。より多くの電力を得るために切り替えRますが、これを生成するためにどの関数を使用すればよいかについて少し迷っています。

グラフを生成するためggplot2に、次のコードを使用しました。

ggplot(data, aes(horizon, success)) + geom_line() + geom_area(alpha=0.3)+
  stat_smooth(method='loess')

ただし、コードは、多数の小さな線形回帰の平均化に基づくローカル多項式回帰フィッティングを行います。R私の質問は、Excel で使用されている同様のログ トレンド ラインがあるかどうかです。

編集:私が探している別の方法は、対数方程式を y = (c*ln(x))+b; の形式で取得することです。「c」と「b」を取得する coef() 関数はありますか?

編集 2: 評判が良くなったので、苦労していることについてもう少し投稿できるようになりました。私のデータを次のようにします。

0.599885189,0.588404133,0.577784156,0.567164179,0.556257176,0.545350172,0.535112897,
0.52449292,0.51540375,0.507271336,0.499904325,0.498851894,0.498851894,0.497321087,
0.4964600,0.495885955,0.494068121,0.492154612,0.490145427,0.486892461,0.482395714,
0.477229238,0.471010333

上記のデータは y 点ですが、x 点は 1:length(y) から 1 ずつ増加する単純な整数です。

ここに画像の説明を入力

黒はログです。Rでは、上記のデータセットでこれをどのように行うでしょうか?

4

4 に答える 4

11

代わりにベースグラフィックスを使用することを好みますggplot2:

#some data with a linear model
x <- 1:20
set.seed(1)
y <- 3*log(x)+5+rnorm(20)

#plot data
plot(y~x)

#fit log model
fit <- lm(y~log(x))
#look at result and statistics
summary(fit)
#extract coefficients only
coef(fit)

#plot fit with confidence band
matlines(x=seq(from=1,to=20,length.out=1000),
         y=predict(fit,newdata=list(x=seq(from=1,to=20,length.out=1000)),
                   interval="confidence"))

ここに画像の説明を入力

#some data with a non-linear model
set.seed(1)
y <- log(0.1*x)+rnorm(20,sd=0.1)

#plot data
plot(y~x)

#fit log model
fit <- nls(y~log(a*x),start=list(a=0.2))
#look at result and statistics
summary(fit)

#plot fit
lines(seq(from=1,to=20,length.out=1000),
      predict(fit,newdata=list(x=seq(from=1,to=20,length.out=1000))))
于 2012-10-14T11:32:31.057 に答える
7

lm()別の平滑化方法 (線形最小二乗法など) と別の式を簡単に指定できます。

library(ggplot2)
g0 <- ggplot(dat, aes(horizon, success)) + geom_line() + geom_area(alpha=0.3)
g0 + stat_smooth(method="lm",formula=y~log(x),fill="red")

信頼帯は自動的に含まれます。幅が非常に狭いため、見やすいように色を変更しました。in を使用se=FALSEstat_smoothて、それらをオフにすることができます。

ここに画像の説明を入力

他の答えは、係数を取得する方法を示しています。

coef(lm(success~log(horizon),data=dat))

次にグラフに方程式を追加したいと思うかもしれません: グラフへの回帰直線方程式と R2 の追加を参照してください。

于 2012-10-14T23:12:40.757 に答える
1

単純な +scale_y_log10() があなたが望むものを手に入れると確信しています。GGPlot 統計は変換後に計算されるため、loess() はログ変換されたデータで計算されます。

于 2012-10-14T03:47:51.997 に答える
1

Excel の対数曲線フィッティングを正確に一致させる方法を説明するブログ投稿をここに書きました。lm()アプローチの要点は、関数を中心にしています。

# Set x and data.to.fit to the independent and dependent variables
data.to.fit <- c(0.5998,0.5884,0.5777,0.5671,0.5562,0.5453,0.5351,0.524,0.515,0.5072,0.4999,0.4988,0.4988,0.4973,0.49,0.4958,0.4940,0.4921,0.4901,0.4868,0.4823,0.4772,0.4710)
x <- c(seq(1, length(data.to.fit)))
data.set <- data.frame(x, data.to.fit)

# Perform a logarithmic fit to the data set
log.fit <- lm(data.to.fit~log(x), data=data.set)

# Print out the intercept, log(x) parameters, R-squared values, etc.
summary(log.fit)

# Plot the original data set
plot(data.set)

# Add the log.fit line with confidence intervals
matlines(predict(log.fit, data.frame(x=x), interval="confidence"))

それが役立つことを願っています。

于 2014-07-15T14:18:16.587 に答える