0

It is tiff format imagery1 and Imagery2[![][1]]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()
Ronak Jain
  • 19
  • 1
  • Why are you not able? What does that code do, and what have you tried to make the remaining parts work? – Nico Haase Dec 18 '19 at 09:02
  • 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. – Ronak Jain Dec 18 '19 at 09:08
  • Code of goodness of fit is also written but giving an error "TypeError: can't convert type 'ndarray' to numerator/denominator" – Ronak Jain Dec 18 '19 at 09:11
  • The error is related with the "def coefficient of determination part". – Ronak Jain Dec 18 '19 at 09:12
  • Please add all such information, especially containing error messages and debugging attempts, to your question by editing it – Nico Haase Dec 18 '19 at 10:29

0 Answers0