2012-10-14 30 views
6

Excelでは、与えられたトレンドラインの対数トレンドラインに簡単にフィットします。トレンドラインの追加をクリックしてから、「ログ」を選択します。より多くの電力をRに切り替えると、私は少しこれを生成するために使用する必要があります機能として失われています。散布図に対数回帰直線を追加する(Excelとの比較)

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

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

編集:私が探しているのは、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.87, 
0.4964600,0.495885955,0.494068121,0.492154612,0.490145427,0.486892461,0.482395714, 
0.477229238,0.471010333 

、X点は単に1から整数でありながら上記のデータは、y点である:1. Excelでの増分の長さ(Y):私は単にこれをプロットし、追加することができ対数トレンドラインと結果がなります

enter image description here

黒がログされた状態で。 Rでは、上記のデータセットでどのようにこれを行いますか?

+1

'log()'関数を使用してデータのログを取得し、 'loess()'関数を使ってスムーザーを適合させることができます。 'plot()'を使ってデータのプロットを作成し、 'lines()'を使ってそれにラインを追加します。 –

+0

代わりに方程式を得ることは可能ですか? excelの方程式はy =(c * ln(x))+ b – user1234440

答えて

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") 

信頼帯は自動的に含まれます:色が非常に狭いので色を変更して見えるようにしました。 stat_smoothse=FALSEを使用して無効にすることができます。

enter image description here

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

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

私はあなたが次のグラフに数式を追加したい場合があります想像することができます:私は「Adding Regression Line Equation and R2 on graph

+0

です。あなたが 'geom_line'に加えて' geom_area'を使った理由はありますか?私はそれがプロットを分かりやすくすることを確信していません – mnel

+0

OPの例からそれを再現しました:私は彼らがそれを望んでいたのでそれを持っていると思っていましたが、 。 –

1

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

10

Iは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")) 

enter image description here

#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)))) 
1

を見ますちょうどblog post hereと書かれています。これは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")) 

希望するものがあります。

関連する問題