]2
I want to plot the regression line and calculate the regression coefficient. Along with that the R square/Goodness of fit.
I have determined the regression line on the curve and calculated the coefficient of that regression line but not be able to calculate the goodness of fit for those.
Kindly help me to solve that problem.
The code calculated the regression coefficient and draw the regression line on the plot. But i am not be able to calculate the R squared/Goodness of fit.
Code of goodness of fit is also written but giving an error "TypeError: can't convert type 'ndarray' to numerator/denominator"
The error is related with the "def coefficient of determination part"
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from statistics import mean
from matplotlib import style
style.use('ggplot')
#loading of imageries
im1 = Image.open('D:\\code\\test\\subset\\image1.tif')
im2 = Image.open('D:\\code\\test\\subset\\image2.tif')
#im.show()
#Conversion into array
img1 = np.array(im1)
img2 = np.array(im2)
def estimate_coef(x, y):
# number of observations/points
n = np.size(x)
# mean of x and y vector
m_x, m_y = np.mean(x), np.mean(y)
# calculating cross-deviation and deviation about x
SS_xy = np.sum(y*x) - n*m_y*m_x
SS_xx = np.sum(x*x) - n*m_x*m_x
# calculating regression coefficients
b_1 = SS_xy / SS_xx
b_0 = m_y - b_1*m_x
return(b_0, b_1)
def squared_error(ys_orig,ys_line):
return sum((ys_line - ys_orig) * (ys_line - ys_orig))
def coefficient_of_determination(ys_orig,ys_line):
y_mean_line = [mean(ys_orig) for y in ys_orig]
squared_error_regr = squared_error(ys_orig, ys_line)
squared_error_y_mean = squared_error(ys_orig, ys_mean_line)
return 1 - (squared_error_regr/squared_error_y_mean)
def plot_regression_line(x, y, b):
# plotting the actual points as scatter plot
plt.scatter(x, y, color = "m",
marker = "o", s = 30)
# predicted response vector
y_pred = b[0] + b[1]*x
# plotting the regression line
plt.plot(x, y_pred, color = "g")
# putting labels
plt.xlabel('x')
plt.ylabel('y')
# function to show plot
plt.show()
b_0, b_1 = estimate_coef(img1, img2)
regression_line = [(b_0*x)+b_1 for x in img1]
r_squared = coefficient_of_determination(img2,regression_line)
print(r_squared)
def main():
# observations
x = img1
y = img2
# estimating coefficients
b = estimate_coef(x, y)
print("Estimated coefficients:\nb_0 = {} \ \nb_1 = {}".format(b[0], b[1]))
# plotting regression line
plot_regression_line(x, y, b)
if __name__ == "__main__":
main()