मैं आर में कुछ डेटा के लिए नकारात्मक घातीय फिट करने की कोशिश कर रहा हूं, लेकिन फिट लाइन डेटा की तुलना में बहुत अधिक दिखती है, जबकि एक्सेल के अंतर्निर्मित पावर फिट दिखने के लिए उपयुक्त फिट अधिक विश्वासयोग्य क्या कोई मुझे बताएगा क्यों? मैंने nls()
फ़ंक्शन और optim()
का उपयोग करने का प्रयास किया है और उन दोनों तरीकों से समान पैरामीटर प्राप्त किए हैं, लेकिन दोनों के लिए फिट बैठता है।नकारात्मक घातीय फिट: वक्र बहुत अधिक दिखता है
x <- c(5.96, 12.86, 8.40, 2.03, 12.84, 21.44, 21.45, 19.97, 8.92, 25.00, 19.90, 20.00, 20.70, 16.68, 14.90, 26.00, 22.00, 22.00, 10.00, 5.70, 5.40, 3.20, 7.60, 0.59, 0.14, 0.85, 9.20, 0.79, 1.40, 2.68, 1.91)
y <- c(5.35, 2.38, 1.77, 1.87, 1.47, 3.27, 2.01, 0.52, 2.72, 0.85, 1.60, 1.37, 1.48, 0.39, 2.39, 1.83, 0.71, 1.24, 3.14, 2.16, 2.22, 11.50, 8.32, 38.98, 16.78, 32.66, 3.89, 1.89, 8.71, 9.74, 23.14)
xy.frame <- data.frame(x,y)
nl.fit <- nls(formula=(y ~ a * x^b), data=xy.frame, start = c(a=10, b=-0.7))
a.est <- coef(nl.fit)[1]
b.est <- coef(nl.fit)[2]
plot(x=xy.frame$x,y=xy.frame$y)
# curve looks too high
curve(a.est * x^b.est , add=T)
# these parameters from Excel seem to fit better
curve(10.495 * x^-0.655, add=T)
# alternatively use optim()
theta.init <- c(1000,-0.5, 50)
exp.nll <- function(theta, data){
a <- theta[1]
b <- theta[2]
sigma <- theta[3]
obs.y <- data$y
x <- data$x
pred.y <- a*x^b
nll <- -sum(dnorm(x=obs.y, mean=pred.y , sd=sigma, log=T))
nll
}
fit.optim <- optim(par=theta.init,fn=exp.nll,method="BFGS",data=xy.frame)
plot(x=xy.frame$x,y=xy.frame$y)
# still looks too high
curve(a.est * x^b.est, add=T)
, अगर एक्सेल SSE को कम से कम करने की कोशिश कर नहीं है, क्या कसौटी यह उपयोग कर रहा है? – eipi10
@ eipi10 हालांकि मैं सकारात्मक नहीं हूं, [ऐसा लगता है] (http://www.real-statistics.com/regression/power-regression/) यह लॉग-लॉग रूपांतरण का भी उपयोग कर रहा है। इसलिए, यह 'y' की भविष्यवाणी करते समय एसएसई को कम करने के बजाय 'लॉग (वाई)' की भविष्यवाणी करते समय एसएसई को कम कर रहा है। – josliber