2012-07-19 26 views
5

ben, noktalar çizmek onlara bir çizgi sığacak şekilde aşağıdakileri yapabilirsiniz doğrusal Ar noktalarının kümesi varsa, o çizgiyi görüntüler: ŞimdiMontaj logaritmik eğri

x=c(61,610,1037,2074,3050,4087,5002,6100,7015) 
y=c(0.401244, 0.844381, 1.18922, 1.93864, 2.76673, 3.52449, 4.21855, 5.04368, 5.80071) 

plot(x,y)  
Estimate = lm(y ~ x)  
abline(Estimate) 

, logaritmik eğri uydurma daha uygundur gibi aşağıdaki gibi görünüyor noktaları kümesi varsa:

x=c(61,610,1037,2074,3050,4087,5002,6100,7015)   
y=c(0.974206,1.16716,1.19879,1.28192,1.30739,1.32019,1.35494,1.36941,1.37505) 

Ben şu x değerlerinin log karşı standart regresyon uyum alabilirsiniz biliyorum:

logEstimate = lm(y ~ log(x)) 

Fakat o zaman bu logEstimate'i normal ölçeklemeye nasıl dönüştürebilirim ve eğriyi önceki eğriden benim doğrusal eğrime göre nasıl çizebilirim?

cevap

10

Hmmm, "eğriyi önceki eğrime göre çiz" ile ne demek istediğinizden emin değilim.

(1) predict kullanın: (

coef(logEstimate) 
## (Intercept)  log(x) 
## 0.6183839 0.0856404 
curve(0.61838+0.08564*log(x),add=TRUE,col=2) 

:

plot(x,y) 
xvec <- seq(0,7000,length=101) 
logpred <- predict(logEstimate,newdata=data.frame(x=xvec)) 
lines(xvec,logpred) 

(2) sayısal katsayı değerleri Özü

d <- data.frame(x,y) ## need to use data in a data.frame for predict() 
logEstimate <- lm(y~log(x),data=d) 

İşte öngörülen değerleri elde etmek için üç yol vardır 3) with() sihrini kullanın (parametre tahmini adlarının etrafında geri tırnaklara ihtiyaç duyarsınız b Emin değilim, ancak ben ne demek istediğini tam olarak emin değilim neden ...

+0

Çok teşekkür ederim. İkinci yol, eğri fonksiyonu ile, tam olarak istediğim şey.Verileri çerçeveleme tam olarak ne yapar ve tahmin ne yapar? Yardım() işlevinin bana söylediği şeyden pek almadım. – user52291

+1

, verileri bir veri çerçevesine yerleştirmek, gelecek nesneyi takılı nesne (tahminler, vb.) Ile daha kolay çalışır hale getirir, çünkü R'nin giriş değişkenlerini bulmasını kolaylaştırır. 'predikts() 'tahminleri ... –

8

ecause onlar ...

with(as.list(coef(logEstimate)), 
     curve(`(Intercept)`+`log(x)`*log(x),add=TRUE,col=4)) 

Belki istediğini

est1 <- predict(lm(y~x,data=d),newdata=data.frame(x=xvec)) 
plot(est1,logpred) 

olan) parantez içeren ya da ... biraz farklı tahmin ettim. Sanırım iki modele bu noktalara, bir lineer ve bir günlüğe sığdırmak istiyorsunuz. Ardından, noktaları ve her iki modelin fonksiyonel formunu çizmek istiyorsunuz. İşte bunun için kod: yorumda, ikinci soruya yanıt olarak

x=c(61,610,1037,2074,3050,4087,5002,6100,7015) 
y=c(0.974206,1.16716,1.19879,1.28192,1.30739,1.32019,1.35494,1.36941,1.37505) 

Estimate = lm(y ~ x) 
logEstimate = lm(y ~ log(x)) 

plot(x,predict(Estimate),type='l',col='blue') 
lines(x,predict(logEstimate),col='red') 
points(x,y) 

enter image description here


, lineer regresyon her zaman belirleyicileri doğrusal kombinasyonu çıkmıyor, ama bu mutlaka değil bu düz bir çizgi olduğu anlamına gelir. x artar doğrusal ardından y hangi açıkça, katlanarak değişecek olarak bu demektir ki

exp(y) = x 

uydurma aynı olduğunu, sen uyuyorsanız

y = log(x) 

: En log dönüşüm gerçekten ne anlama geldiğini düşünün 'düz çizgi' değil. Ancak, x eksenini log ölçeğine dönüştürdüyseniz, görüntülenen çizgi düz olur.

+1

sadece basit bir logaritmik eğri istiyorsanız," newdata "şeklini kullanmanız gerektiğine dikkat edin ... ve verileriniz içeride olmazsa sonuçlar garip olur x' düzenini arttırmak ... (ama temel fikir ses) –

+0

Anlaştık. Doğruluğun doğruluğu için giderim diye düşündüm, ama sen tamamen haklısın. – nograpes

+0

Teşekkürler. Bu da bana istediğim şeyi verir (eğri fonksiyonu ile düzgün olmamasına rağmen). Biraz kafam karıştı çünkü her zaman bir satır döndürdüm. Bir eğri oluşturan ve satırın görünmediği kodunuz nedir? – user52291