Least Squares regression doesn't fit properly

Question:

My goal is to fit a decent regression and exclude data that does not fit within a criteria. I need to take data that can correlate well for my project. There is sample data below.

I have an issue with my code for least squares regression. The picture below is one of the plots to display the accepted and unaccepted values in my regression (with an error range). As you can see, the regression doesn’t fit it very well, even though it shouldn’t be a difficult fit. In some scenarios, only a straight line is drawn.

How can I modify my code to fix this?

enter image description here

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit

# Read the Excel file
df = pd.read_excel('Book3.xlsx', header=None)

# Set column names
df.columns = ['col{}'.format(i+1) for i in range(len(df.columns))]

# Extract the unique codes and their corresponding temperature and viscosity values
unique_codes = df['col6'].unique()

# Define a function for the nonlinear regression equation
def viscosity_equation(temp, a, b, c):
    temp = np.array(temp)
    return (a / np.sqrt(temp)) * np.exp((b) / (temp - c))

# Initialize a list to hold the accepted values
accepted_values = []

# Loop through each unique code and perform regression and plot
for code in unique_codes:
    code_data = df[df['col6'] == code]
    if len(code_data) <= 3:
        continue
    temps = code_data['col11']
    viscosities = code_data['col13']

    # Perform the nonlinear regression
    try:
        popt, pcov = curve_fit(viscosity_equation, temps, viscosities, maxfev=2000000)
    except RuntimeError:
        print("Error: Unable to perform regression for code {}".format(code))
        continue

    # Calculate the accepted values within the error range of the regression line
    error_range_percentage = 100  # 10%
    for temp, viscosity in zip(temps, viscosities):
        equation_value = viscosity_equation(temp, *popt)
        if abs((viscosity - equation_value) / viscosity) <= (error_range_percentage / 100):
            accepted_values.append([code, temp, viscosity])

    # Plot the temperature and viscosity values, with the accepted and unaccepted values in different colors
    accepted_temps = []
    accepted_viscosities = []
    unaccepted_temps = []
    unaccepted_viscosities = []
    for temp, viscosity in zip(temps, viscosities):
        equation_value = viscosity_equation(temp, *popt)
        if abs((viscosity - equation_value) / viscosity) <= (error_range_percentage / 100):
            accepted_temps.append(temp)
            accepted_viscosities.append(viscosity)
        else:
            unaccepted_temps.append(temp)
            unaccepted_viscosities.append(viscosity)

    plt.scatter(accepted_temps, accepted_viscosities, color='blue')
    plt.scatter(unaccepted_temps, unaccepted_viscosities, color='red')
    plt.plot(temps, viscosity_equation(temps, *popt), color='black')
    plt.title('Viscosity vs Temperature for Code {}'.format(code))
    plt.xlabel('Temperature')
    plt.ylabel('Viscosity')
    plt.show()

# Create a DataFrame of the accepted values and export to Excel
df_accepted = pd.DataFrame(accepted_values, columns=['cmp1', 'temperature', 'viscosity'])
df_accepted.to_excel('accepted_datasqrtVer.xlsx', index=False)

| cmp1   | temp    | visc     |
| ------ | ------- | -------- |
| AAaJqR | 293.15  | 0.1113   |
| AAaJqR | 298     | 0.1085   |
| AAaJqR | 298.15  | 0.09     |
| AAaJqR | 303.15  | 0.073    |
| AAaJqR | 308.15  | 0.0602   |
| AAaJqR | 313.15  | 0.0501   |
| AAaJqR | 318.15  | 0.0482   |
| AAaJqR | 323.15  | 0.0407   |
| AAaJqR | 328.15  | 0.0347   |
| AAaJqR | 333.15  | 0.0305   |
| AAaJqR | 338.15  | 0.026    |
| AAaJqR | 343.15  | 0.0227   |
| AAaJqR | 348.15  | 0.0202   |
| AAaJqR | 353.15  | 0.0178   |
| AAbbQy | 298.1   | 0.128    |
| AAbLhO | 303     | 0.07179  |
| AAbLhO | 308     | 0.06003  |
| AAbLhO | 313     | 0.05028  |
| AAbLhO | 318     | 0.04569  |
| AAbLhO | 323     | 0.04074  |
| AAbLhO | 328     | 0.03576  |
| AAbLhO | 333     | 0.03163  |
| AAbRPP | 293.15  | 0.008196 |
| AAbRPP | 298.15  | 0.006926 |
| AAbRPP | 298.15  | 0.00622  |
| AAbRPP | 303.15  | 0.005913 |
| AAbRPP | 308.15  | 0.005069 |
| AAbRPP | 313.15  | 0.004395 |
| AAbvFJ | 293.15  | 0.002451 |
| AAbvFJ | 298.15  | 0.002217 |
| AAbvFJ | 303.15  | 0.00202  |
| AAbvFJ | 308.15  | 0.00185  |
| AAbvFJ | 313.15  | 0.001705 |
| AAbvFJ | 318.15  | 0.00158  |
| AAbvFJ | 323.15  | 0.001472 |
| AAbvFJ | 328.15  | 0.001377 |
| AAbvFJ | 333.15  | 0.001295 |
| AAbvFJ | 338.15  | 0.001223 |
| AAbvFJ | 343.15  | 0.001159 |
| AAcgUH | 303.15  | 0.0594   |
| AAcgUH | 313.15  | 0.0487   |
| AAcgUH | 323.15  | 0.034    |
| AAcgUH | 333.15  | 0.0328   |
| AAcgUH | 343.15  | 0.0278   |
| AAcjwE | 288.15  | 0.432    |
| AAcjwE | 290.65  | 0.359    |
| AAcjwE | 293.15  | 0.302    |
| AAcjwE | 295.65  | 0.256    |
| AAcjwE | 298.15  | 0.215    |
| AAcjwE | 300.65  | 0.183    |
| AAcjwE | 303.15  | 0.158    |
| AAcjwE | 305.15  | 0.141    |
| AAcjwE | 308.15  | 0.118    |
| AAcjwE | 310.15  | 0.1058   |
| AAcjwE | 313.15  | 0.0934   |
| AAcjwE | 315.65  | 0.0812   |
| AAcjwE | 318.15  | 0.0703   |
| AAcjwE | 319.65  | 0.0642   |
| AAcjwE | 323.15  | 0.0551   |
| AAcKcU | 323.15  | 0.34     |
| AAcKcU | 333.15  | 0.173    |
| AAcKcU | 343.15  | 0.1      |
| AAcKcU | 353.15  | 0.065    |
| AAcKcU | 353.15  | 0.0612   |
| AAcKcU | 363.15  | 0.0391   |
| AAcKcU | 373.1   | 0.027    |
| AAcKcU | 393.1   | 0.013    |
| AAdDEf | 293.15  | 0.808    |
| AAdDEf | 293.15  | 0.471    |
| AAdDEf | 298.15  | 0.533    |
| AAdDEf | 298.15  | 0.95     |
| AAdDEf | 303.15  | 0.37     |
| AAdDEf | 303.15  | 0.242    |
| AAdDEf | 308.15  | 0.52     |
| AAdDEf | 313.15  | 0.135    |
| AAdDEf | 318.15  | 0.269    |
| AAdDEf | 323.15  | 0.1062   |
| AAdDEf | 323.15  | 0.082    |
| AAdDEf | 328.15  | 0.152    |
| AAdDEf | 333.15  | 0.053    |
| AAdDEf | 338.15  | 0.092    |
| AAdDEf | 343.15  | 0.04109  |
| AAdDEf | 343.15  | 0.0359   |
| AAdDEf | 348.15  | 0.058    |
| AAdDtp | 298.1   | 1.324    |
| AAdDtp | 298.2   | 1.2      |
| AAdDtp | 298.2   | 0.254    |
| AAdDtp | 303.2   | 0.181    |
| AAdDtp | 308.2   | 0.133    |
| AAdDtp | 313.2   | 0.1      |
| AAdDtp | 318.2   | 0.077    |
| AAdDtp | 323.2   | 0.06     |
| AAdDtp | 328.2   | 0.0481   |
| AAdDtp | 333.2   | 0.0381   |
| AAdDtp | 338.2   | 0.031    |
| AAdDtp | 343.2   | 0.025    |
| AAdDtp | 348.2   | 0.0213   |
| AAdwKx | 303.15  | 0.512    |
| AAdwKx | 313.15  | 0.278    |
| AAdwKx | 323.15  | 0.164    |
| AAdwKx | 333.15  | 0.1041   |
| AAdwKx | 343.15  | 0.0704   |
| AAdXKY | 299.25  | 0.002444 |
| AAdXKY | 308.15  | 0.002039 |
| AAdXKY | 323.65  | 0.001532 |
| AAdXKY | 340.25  | 0.001211 |
| AAdXKY | 352.85  | 0.001009 |
| AAeamZ | 298.15  | 0.255    |
| AAeamZ | 298.15  | 0.82     |
| AAeamZ | 307     | 0.79     |
| AAeamZ | 311.7   | 0.53     |
| AAeamZ | 319.9   | 0.28     |
| AAeamZ | 330     | 0.15     |
| AAeamZ | 337.1   | 0.1      |
| AAeamZ | 347.3   | 0.061    |
| AAeamZ | 361.1   | 0.035    |
| AAeamZ | 373.2   | 0.024    |
| AAeBoH | 283.15  | 0.0079   |
| AAeBoH | 288.15  | 0.0067   |
| AAeBoH | 293.15  | 0.0053   |
| AAeBoH | 298.15  | 0.005    |
| AAeBoH | 303.15  | 0.0043   |
| AAeBoH | 308.15  | 0.0038   |
| AAeBoH | 313.15  | 0.0032   |
| AAeBoH | 318.15  | 0.0031   |
| AAeBoH | 323.15  | 0.0027   |
| AAeBoH | 328.15  | 0.0025   |
| AAeBoH | 333.15  | 0.0022   |
| AAeBoH | 338.15  | 0.0021   |
| AAeBoH | 343.15  | 0.00191  |
| AAeBoH | 348.15  | 0.00176  |
| AAeBoH | 353.15  | 0.00155  |
| AAeBoH | 358.15  | 0.00152  |
| AAeBoH | 363.15  | 0.00141  |
| AAeBWF | 293.15  | 0.0906   |
| AAeBWF | 295.16  | 0.0893   |
| AAeBWF | 298.15  | 0.087    |
| AAeBWF | 303.09  | 0.0849   |
| AAeBWF | 308.13  | 0.0815   |
| AAeBWF | 313.17  | 0.0783   |
| AAeBWF | 318.16  | 0.0754   |
| AAeBWF | 323.11  | 0.0729   |
| AAeBWF | 328.14  | 0.0708   |
| AAeBWF | 330.09  | 0.0703   |
| AAeBWF | 333.16  | 0.0692   |
| AAeBWF | 335.05  | 0.0685   |
| AAeBWF | 338.14  | 0.0673   |
| AAefWH | 293.15  | 0.002933 |
| AAefWH | 298.15  | 0.002622 |
| AAefWH | 303.15  | 0.002364 |
| AAefWH | 308.15  | 0.002144 |
| AAefWH | 313.15  | 0.001959 |
| AAefWH | 318.15  | 0.001799 |
| AAefWH | 323.15  | 0.00166  |
| AAefWH | 328.15  | 0.00154  |
| AAefWH | 333.15  | 0.001435 |
| AAefWH | 338.15  | 0.001344 |
| AAefWH | 343.15  | 0.001264 |
| AAeLiY | 298.15  | 0.0051   |
| AAeLiY | 298.15  | 0.0051   |
| AAeLiY | 298.15  | 0.0051   |
| AAeLiY | 303.15  | 0.00448  |
| AAeLiY | 303.15  | 0.00448  |
| AAeLiY | 308.15  | 0.00394  |
| AAeLiY | 308.15  | 0.00394  |
| AAeLiY | 313.15  | 0.00316  |
| AAeLiY | 313.15  | 0.00316  |
| AAeLOP | 298.15  | 0.00764  |
| AAeLOP | 298.15  | 0.00764  |
| AAeLOP | 303.15  | 0.00646  |
| AAeLOP | 303.15  | 0.00646  |
| AAeLOP | 308.15  | 0.00561  |
| AAeLOP | 308.15  | 0.00561  |
| AAeLOP | 313.15  | 0.00507  |
| AAeLOP | 313.15  | 0.00507  |
| AAfAom | 298     | 0.0153   |
| AAfAom | 298.15  | 0.02414  |
| AAfAom | 298.15  | 0.0241   |
| AAfAom | 298.15  | 0.02412  |
| AAfAom | 298.2   | 0.0142   |
| AAfAom | 303.15  | 0.01964  |
| AAfAom | 308     | 0.0115   |
| AAfAom | 308.15  | 0.01613  |
| AAfAom | 308.2   | 0.0101   |
| AAfAom | 318     | 0.0089   |
| AAfAom | 318.2   | 0.0076   |
| AAfAom | 328     | 0.0069   |
| AAfAom | 328.2   | 0.0059   |
| AAfAom | 338     | 0.0055   |
| AAfAom | 338.2   | 0.0051   |
| AAfTUy | 293     | 0.0155   |
| AAfUHx | 288.15  | 0.61     |
| AAfUHx | 290.15  | 0.516    |
| AAfUHx | 293.1   | 0.323    |
| AAfUHx | 293.15  | 0.434    |
| AAfUHx | 295.65  | 0.352    |
| AAfUHx | 298.15  | 0.299    |
| AAfUHx | 300.65  | 0.257    |
| AAfUHx | 303.1   | 0.1807   |
| AAfUHx | 303.15  | 0.219    |
| AAfUHx | 305.45  | 0.186    |
| AAfUHx | 308.15  | 0.163    |
| AAfUHx | 310.65  | 0.141    |
| AAfUHx | 312.65  | 0.1271   |
| AAfUHx | 313.1   | 0.11     |
| AAfUHx | 315.15  | 0.1078   |
| AAfUHx | 318.15  | 0.0933   |
| AAfUHx | 320.15  | 0.0796   |
| AAfUHx | 323.1   | 0.071    |
| AAfUHx | 323.15  | 0.0715   |
| AAfUHx | 333.1   | 0.0459   |
| AAfUHx | 343.1   | 0.0328   |
| AAfUHx | 353.1   | 0.0229   |
| AAfUHx | 363.1   | 0.0181   |
| AAfUHx | 373.1   | 0.0143   |
| AAfUpd | 288.15  | 0.301    |
| AAfUpd | 293.15  | 0.221    |
| AAfUpd | 298.15  | 0.163    |
| AAfUpd | 303.15  | 0.1247   |
| AAfUpd | 308.15  | 0.0983   |
| AAfUpd | 313.15  | 0.0758   |
| AAfUpd | 318.15  | 0.0601   |
| AAfUpd | 323.15  | 0.048    |
| AAgcxF | 278.15  | 0.05457  |
| AAgcxF | 283     | 0.039    |
| AAgcxF | 283.15  | 0.04351  |
| AAgcxF | 283.15  | 0.03841  |
| AAgcxF | 288.1   | 0.0319   |
| AAgcxF | 288.15  | 0.03424  |
| AAgcxF | 288.15  | 0.03536  |
| AAgcxF | 288.15  | 0.03458  |
| AAgcxF | 293.1   | 0.0263   |
| AAgcxF | 293.15  | 0.0279   |
| AAgcxF | 293.15  | 0.02921  |
| AAgcxF | 293.15  | 0.02827  |
| AAgcxF | 293.15  | 0.02973  |
| AAgcxF | 293.15  | 0.02631  |
| AAgcxF | 293.15  | 0.02676  |
| AAgcxF | 293.15  | 0.02856  |
| AAgcxF | 298     | 0.0222   |
| AAgcxF | 298.15  | 0.02268  |
| AAgcxF | 298.15  | 0.0245   |
| AAgcxF | 298.15  | 0.0236   |
| AAgcxF | 298.15  | 0.02379  |
| AAgcxF | 298.15  | 0.02504  |
| AAgcxF | 298.15  | 0.024    |
| AAgcxF | 298.15  | 0.02311  |
| AAgcxF | 298.15  | 0.02393  |
| AAgcxF | 303     | 0.019    |
| AAgcxF | 303.15  | 0.01909  |
| AAgcxF | 303.15  | 0.02079  |
| AAgcxF | 303.15  | 0.02025  |
| AAgcxF | 303.15  | 0.02133  |
| AAgcxF | 303.15  | 0.01903  |
| AAgcxF | 303.15  | 0.0176   |
| AAgcxF | 303.15  | 0.02012  |
| AAgcxF | 303.15  | 0.02032  |
| AAgcxF | 308     | 0.0164   |
| AAgcxF | 308.15  | 0.01639  |
| AAgcxF | 308.15  | 0.01786  |
| AAgcxF | 308.15  | 0.01841  |
| AAgcxF | 308.15  | 0.0138   |
| AAgcxF | 308.15  | 0.0175   |
| AAgcxF | 308.15  | 0.01746  |
| AAgcxF | 313     | 0.0142   |
| AAgcxF | 313.15  | 0.01418  |
| AAgcxF | 313.15  | 0.01549  |
| AAgcxF | 313.15  | 0.01513  |
| AAgcxF | 313.15  | 0.01602  |
| AAgcxF | 313.15  | 0.0143   |
| AAgcxF | 313.15  | 0.0112   |
| AAgcxF | 313.15  | 0.01532  |
| AAgcxF | 313.15  | 0.01514  |
| AAgcxF | 318.1   | 0.0125   |
| AAgcxF | 318.15  | 0.01243  |
| AAgcxF | 318.15  | 0.01356  |
| AAgcxF | 318.15  | 0.01408  |
| AAgcxF | 318.15  | 0.0097   |
| AAgcxF | 318.15  | 0.01345  |
| AAgcxF | 318.15  | 0.01325  |
| AAgcxF | 323     | 0.0112   |
| AAgcxF | 323.15  | 0.01197  |
| AAgcxF | 323.15  | 0.01173  |
| AAgcxF | 323.15  | 0.01252  |
| AAgcxF | 323.15  | 0.0111   |
| AAgcxF | 323.15  | 0.0086   |
| AAgcxF | 323.15  | 0.01178  |
| AAgcxF | 323.15  | 0.0117   |
| AAgcxF | 328     | 0.01     |
| AAgcxF | 328.15  | 0.01064  |
| AAgcxF | 328.15  | 0.01116  |
| AAgcxF | 328.15  | 0.01037  |
| AAgcxF | 328.15  | 0.0104   |
| AAgcxF | 333.1   | 0.009    |
| AAgcxF | 333.15  | 0.00953  |
| AAgcxF | 333.15  | 0.00936  |
| AAgcxF | 333.15  | 0.01005  |
| AAgcxF | 333.15  | 0.0071   |
| AAgcxF | 333.15  | 0.00921  |
| AAgcxF | 333.15  | 0.0093   |
| AAgcxF | 338     | 0.008    |
| AAgcxF | 338.15  | 0.008582 |
| AAgcxF | 338.15  | 0.0091   |
| AAgcxF | 338.18  | 0.0081   |
| AAgcxF | 343     | 0.0073   |
| AAgcxF | 343.15  | 0.007773 |
| AAgcxF | 343.15  | 0.00765  |
| AAgcxF | 343.15  | 0.008318 |
| AAgcxF | 343.15  | 0.007236 |
| AAgcxF | 347.9   | 0.0066   |
| AAgcxF | 348.15  | 0.007076 |
| AAgcxF | 353     | 0.0058   |
| AAgcxF | 353.15  | 0.006472 |
| AAgcxF | 353.15  | 0.00638  |
| AAgcxF | 358.15  | 0.005945 |
| AAgcxF | 363.15  | 0.005485 |
| AAgHkg | 293.15  | 0.09032  |
| AAgHkg | 303.15  | 0.05283  |
| AAgHkg | 313.15  | 0.03366  |
| AAgHkg | 323.15  | 0.02265  |
| AAgHkg | 333.15  | 0.01499  |
| AAgHkg | 343.15  | 0.010466 |
| AAgHkg | 353.15  | 0.007478 |
| AAgHkg | 363.15  | 0.005425 |
| AAgmgm | 273     | 1.0245   |
| AAgmgm | 278.1   | 0.599    |
| AAgmgm | 278.15  | 0.724    |
| AAgmgm | 278.15  | 0.7      |
| AAgmgm | 278.15  | 0.69     |
| AAgmgm | 282.5   | 0.354    |
| AAgmgm | 283     | 0.377    |
| AAgmgm | 283.15  | 0.451    |
| AAgmgm | 283.15  | 0.389    |
| AAgmgm | 288.1   | 0.2485   |
| AAgmgm | 288.15  | 0.296    |
| AAgmgm | 288.15  | 0.258    |
| AAgmgm | 288.15  | 0.353    |
| AAgmgm | 288.15  | 0.288    |
| AAgmgm | 288.15  | 0.29     |
| AAgmgm | 288.15  | 0.2838   |
| AAgmgm | 288.15  | 0.284    |
| AAgmgm | 288.15  | 0.228    |
| AAgmgm | 292.4   | 0.156    |
| AAgmgm | 293     | 0.1841   |
| AAgmgm | 293.1   | 0.1686   |
| AAgmgm | 293.15  | 0.202    |
| AAgmgm | 293.15  | 0.1791   |
| AAgmgm | 293.15  | 0.238    |
| AAgmgm | 293.15  | 0.197    |
| AAgmgm | 293.15  | 0.203    |
| AAgmgm | 293.15  | 0.1111   |
| AAgmgm | 296.15  | 0.155    |
| AAgmgm | 298     | 0.1215   |
| AAgmgm | 298.1   | 0.16     |
| AAgmgm | 298.15  | 0.162    |
| AAgmgm | 298.15  | 0.1436   |
| AAgmgm | 298.15  | 0.1285   |
| AAgmgm | 298.15  | 0.1329   |
| AAgmgm | 298.15  | 0.167    |
| AAgmgm | 298.15  | 0.1284   |
| AAgmgm | 298.15  | 0.14     |
| AAgmgm | 298.15  | 0.141    |
| AAgmgm | 298.15  | 0.1263   |
| AAgmgm | 298.15  | 0.1339   |
| AAgmgm | 298.15  | 0.139    |
| AAgmgm | 298.15  | 0.139    |
| AAgmgm | 298.15  | 0.124    |
| AAgmgm | 298.15  | 0.092    |
| AAgmgm | 298.15  | 0.1384   |
| AAgmgm | 302.1   | 0.085    |
| AAgmgm | 303     | 0.0991   |
| AAgmgm | 303.1   | 0.0875   |
| AAgmgm | 303.15  | 0.1053   |
| AAgmgm | 303.15  | 0.0952   |
| AAgmgm | 303.15  | 0.098    |
| AAgmgm | 303.15  | 0.1209   |
| AAgmgm | 303.15  | 0.0951   |
| AAgmgm | 303.15  | 0.1024   |
| AAgmgm | 303.15  | 0.0936   |
| AAgmgm | 303.15  | 0.1048   |
| AAgmgm | 303.15  | 0.05912  |
| AAgmgm | 308     | 0.0659   |
| AAgmgm | 308.15  | 0.0793   |
| AAgmgm | 308.15  | 0.0724   |
| AAgmgm | 308.15  | 0.0743   |
| AAgmgm | 308.15  | 0.0901   |
| AAgmgm | 308.15  | 0.0724   |
| AAgmgm | 308.15  | 0.0783   |
| AAgmgm | 308.15  | 0.0783   |
| AAgmgm | 308.15  | 0.0713   |
| AAgmgm | 308.15  | 0.0773   |
| AAgmgm | 308.15  | 0.0773   |
| AAgmgm | 308.15  | 0.069    |
| AAgmgm | 308.15  | 0.04379  |
| AAgmgm | 308.15  | 0.0761   |
| AAgmgm | 312.5   | 0.051    |
| AAgmgm | 313.1   | 0.0519   |
| AAgmgm | 313.15  | 0.06133  |
| AAgmgm | 313.15  | 0.0564   |
| AAgmgm | 313.15  | 0.0577   |
| AAgmgm | 313.15  | 0.0688   |
| AAgmgm | 313.15  | 0.0564   |
| AAgmgm | 313.15  | 0.0604   |
| AAgmgm | 313.15  | 0.0555   |
| AAgmgm | 313.15  | 0.0611   |
| AAgmgm | 313.15  | 0.03246  |
| AAgmgm | 318     | 0.0415   |
| AAgmgm | 318.15  | 0.04841  |
| AAgmgm | 318.15  | 0.0448   |
| AAgmgm | 318.15  | 0.0458   |
| AAgmgm | 318.15  | 0.0537   |
| AAgmgm | 318.15  | 0.0448   |
| AAgmgm | 318.15  | 0.0477   |
| AAgmgm | 318.15  | 0.0477   |
| AAgmgm | 318.15  | 0.0442   |
| AAgmgm | 318.15  | 0.04737  |
| AAgmgm | 318.15  | 0.0474   |
| AAgmgm | 318.15  | 0.0414   |
| AAgmgm | 318.15  | 0.02795  |
| AAgmgm | 318.15  | 0.0459   |
| AAgmgm | 322.6   | 0.032    |
| AAgmgm | 323     | 0.0383   |
| AAgmgm | 323.1   | 0.0337   |
| AAgmgm | 323.15  | 0.03895  |
| AAgmgm | 323.15  | 0.0362   |
| AAgmgm | 323.15  | 0.0369   |
| AAgmgm | 323.15  | 0.0427   |
| AAgmgm | 323.15  | 0.03627  |
| AAgmgm | 323.15  | 0.039    |
| AAgmgm | 323.15  | 0.0357   |
| AAgmgm | 323.15  | 0.0389   |
| AAgmgm | 323.15  | 0.02098  |
| AAgmgm | 328.1   | 0.0278   |
| AAgmgm | 328.15  | 0.03187  |
| AAgmgm | 328.15  | 0.0298   |
| AAgmgm | 328.15  | 0.0303   |
| AAgmgm | 328.15  | 0.0346   |
| AAgmgm | 328.15  | 0.02981  |
| AAgmgm | 328.15  | 0.0312   |
| AAgmgm | 328.15  | 0.0313   |
| AAgmgm | 328.15  | 0.03129  |
| AAgmgm | 328.15  | 0.0313   |
| AAgmgm | 328.15  | 0.0265   |
| AAgmgm | 328.15  | 0.01699  |
| AAgmgm | 328.15  | 0.0301   |
| AAgmgm | 332.2   | 0.023    |
| AAgmgm | 333     | 0.0268   |
| AAgmgm | 333     | 0.0236   |
| AAgmgm | 333.15  | 0.02647  |
| AAgmgm | 333.15  | 0.0248   |
| AAgmgm | 333.15  | 0.0252   |
| AAgmgm | 333.15  | 0.0285   |
| AAgmgm | 333.15  | 0.02486  |
| AAgmgm | 333.15  | 0.0267   |
| AAgmgm | 333.15  | 0.02656  |
| AAgmgm | 333.15  | 0.01411  |
| AAgmgm | 338     | 0.02     |
| AAgmgm | 338.15  | 0.02227  |
| AAgmgm | 338.15  | 0.02095  |
| AAgmgm | 338.15  | 0.02124  |
| AAgmgm | 338.15  | 0.0237   |
| AAgmgm | 338.15  | 0.0218   |
| AAgmgm | 338.15  | 0.0218   |
| AAgmgm | 338.15  | 0.02185  |
| AAgmgm | 338.15  | 0.02185  |
| AAgmgm | 338.15  | 0.0183   |
| AAgmgm | 338.15  | 0.01201  |
| AAgmgm | 338.15  | 0.0208   |
| AAgmgm | 341.3   | 0.016    |
| AAgmgm | 343     | 0.0194   |
| AAgmgm | 343     | 0.0172   |
| AAgmgm | 343.15  | 0.01896  |
| AAgmgm | 343.15  | 0.01788  |
| AAgmgm | 343.15  | 0.0181   |
| AAgmgm | 343.15  | 0.02     |
| AAgmgm | 343.15  | 0.0188   |
| AAgmgm | 343.15  | 0.01901  |
| AAgmgm | 343.15  | 0.0099   |
| AAgmgm | 348.15  | 0.01631  |
| AAgmgm | 348.15  | 0.01601  |
| AAgmgm | 348.15  | 0.016    |
| AAgmgm | 348.15  | 0.01601  |
| AAgmgm | 348.15  | 0.0133   |
| AAgmgm | 348.15  | 0.008458 |
| AAgmgm | 348.15  | 0.01428  |
| AAgmgm | 348.4   | 0.0153   |
| AAgmgm | 352.1   | 0.013    |
| AAgmgm | 353     | 0.0151   |
| AAgmgm | 353     | 0.0136   |
| AAgmgm | 353.15  | 0.017    |
| AAgmgm | 353.15  | 0.01416  |
| AAgmgm | 353.15  | 0.01407  |
| AAgmgm | 353.15  | 0.01424  |
| AAgmgm | 353.15  | 0.00745  |
| AAgmgm | 358.15  | 0.01241  |
| AAgmgm | 358.15  | 0.01219  |
| AAgmgm | 358.15  | 0.0101   |
| AAgmgm | 358.15  | 0.00687  |
| AAgmgm | 358.15  | 0.01153  |
| AAgmgm | 358.2   | 0.0122   |
| AAgmgm | 362.3   | 0.01     |
| AAgmgm | 363     | 0.0118   |
| AAgmgm | 363.1   | 0.011    |
| AAgmgm | 363.15  | 0.01095  |
| AAgmgm | 363.15  | 0.006113 |
| AAgmgm | 368     | 0.0102   |
| AAgmgm | 368.15  | 0.00956  |
| AAgmgm | 368.15  | 0.005543 |
| AAgmgm | 371.7   | 0.0091   |
| AAgmgm | 373.1   | 0.009    |
| AAgmgm | 373.15  | 0.004876 |
| AAgmgm | 373.4   | 0.0095   |
| AAgmgm | 378.15  | 0.00771  |
| AAgmgm | 388.15  | 0.00636  |
| AAgmgm | 393.1   | 0.005    |
| AAgmgm | 398.15  | 0.00536  |
| AAgmgm | 408.15  | 0.00459  |
| AAgwiX | 293     | 0.0909   |
| AAgwiX | 303     | 0.0593   |
| AAgwiX | 313     | 0.0393   |
| AAgwiX | 323     | 0.0277   |
| AAgwiX | 333     | 0.0203   |
| AAgwiX | 343     | 0.0153   |
| AAgwiX | 353     | 0.0116   |
| AAgwiX | 363     | 0.0091   |
| AAgwJR | 293     | 0.1732   |
| AAgwJR | 303     | 0.0966   |
| AAgwJR | 313     | 0.0593   |
| AAgwJR | 323     | 0.0397   |
| AAgwJR | 333     | 0.027    |
| AAgwJR | 343     | 0.0203   |
| AAgwJR | 353     | 0.0148   |
| AAgwJR | 363     | 0.0115   |
| AAgwVg | 298.15  | 0.0341   |
| AAgwVg | 298.15  | 0.0341   |
| AAhalr | 298.15  | 0.01892  |
| AAhalr | 303.15  | 0.01644  |
| AAhalr | 308.15  | 0.01431  |
| AAhalr | 313.15  | 0.01248  |
| AAhalr | 318.15  | 0.01098  |
| AAhalr | 323.15  | 0.00948  |
| AAhalr | 328.15  | 0.00852  |
| AAhalr | 333.15  | 0.00769  |
| AAhalr | 338.15  | 0.00691  |
| AAhAvC | 413.1   | 0.0218   |
| AAhAvC | 418.1   | 0.019    |
| AAhAvC | 423.1   | 0.01671  |
| AAhAvC | 428.1   | 0.01477  |
| AAhAvC | 433.1   | 0.01314  |
| AAhAvC | 438.1   | 0.01175  |
| AAhAvC | 443.1   | 0.01056  |
| AAhAvC | 448.1   | 0.00955  |
| AAhAvC | 453.1   | 0.00867  |
| AAhAvC | 458.1   | 0.00883  |
| AAhevu | 283.15  | 140      |
| AAhevu | 293.15  | 41       |
| AAhevu | 303.15  | 11       |
| AAhevu | 313.15  | 3.8      |
| AAhevu | 323.15  | 1.5      |
| AAhevu | 333.15  | 0.7      |
| AAhevu | 343     | 0.1987   |
| AAhevu | 343.15  | 0.33     |
| AAhevu | 343.15  | 0.257    |
| AAhevu | 348.15  | 0.217    |
| AAhevu | 348.15  | 0.189    |
| AAhevu | 353     | 0.1197   |
| AAhevu | 353.15  | 0.142    |
| AAhevu | 353.15  | 0.1621   |
| AAhevu | 353.15  | 0.182    |
| AAhevu | 353.15  | 0.143    |
| AAhevu | 358.15  | 0.1233   |
| AAhevu | 358.15  | 0.11     |
| AAhevu | 363.1   | 0.0732   |
| AAhevu | 363.15  | 0.0956   |
| AAhevu | 363.15  | 0.105    |
| AAhevu | 363.15  | 0.0857   |
| AAhevu | 368.15  | 0.0754   |
| AAhevu | 373.1   | 0.068    |
| AAhevu | 373.1   | 0.0482   |
| AAhevu | 373.15  | 0.0603   |
| AAhevu | 382.9   | 0.0313   |
| AAhevu | 393     | 0.0239   |
| AAhevu | 393.1   | 0.031    |
| AAhkDu | 298.15  | 0.018    |
| AAhNhy | 305     | 0.0277   |
| AAhNhy | 309     | 0.0247   |
| AAhNhy | 313     | 0.0222   |
| AAhNhy | 316.9   | 0.0202   |
| AAhNhy | 322.1   | 0.0177   |
| AAhNhy | 328     | 0.0154   |
| AAhNhy | 332.9   | 0.0137   |
| AAhNhy | 338.5   | 0.0123   |
| AAhNhy | 344     | 0.0111   |
| AAhNhy | 349     | 0.01     |
| AAhNhy | 354     | 0.0092   |
| AAhPAl | 313.15  | 0.0338   |
| AAhPAl | 323.15  | 0.0262   |
| AAhPAl | 333.15  | 0.0187   |
| AAhPAl | 343.15  | 0.0147   |
| AAhPAl | 353.15  | 0.0113   |
| AAhPAl | 363.15  | 0.00887  |
| AAhQPf | 293.15  | 0.003136 |
| AAhQPf | 298.15  | 0.002801 |
| AAhQPf | 303.15  | 0.002518 |
| AAhQPf | 308.15  | 0.00228  |
| AAhQPf | 313.15  | 0.002075 |
| AAhQPf | 318.15  | 0.0019   |
| AAhQPf | 323.15  | 0.00175  |
| AAhQPf | 328.15  | 0.001619 |
| AAhQPf | 333.15  | 0.001506 |
| AAhQPf | 338.15  | 0.001407 |
| AAhQPf | 343.15  | 0.00132  |
| AAhQZr | 298.15  | 0.24     |
| AAhQZr | 303.15  | 0.184    |
| AAhQZr | 308.15  | 0.145    |
| AAhQZr | 313.15  | 0.117    |
| AAhQZr | 318.15  | 0.0934   |
| AAhQZr | 323.15  | 0.074    |
| AAhQZr | 328.15  | 0.06     |
| AAhQZr | 333.15  | 0.0492   |
| AAhQZr | 338.15  | 0.0394   |
| AAhQZr | 343.15  | 0.0324   |
| AAhQZr | 348.15  | 0.026    |
| AAiEls | 293.01  | 5.4      |
| AAiEls | 293.15  | 4.6      |
| AAiEls | 298.11  | 3.4      |
| AAiEls | 298.15  | 2.919    |
| AAiEls | 303.14  | 2.2      |
| AAiEls | 303.15  | 1.91     |
| AAiEls | 308.08  | 1.511    |
| AAiEls | 308.15  | 1.285    |
| AAiEls | 313.05  | 1.021    |
| AAiEls | 313.15  | 0.89     |
| AAiEls | 318.08  | 0.72     |
| AAiEls | 318.15  | 0.63     |
| AAiEls | 323.1   | 0.51     |
| AAiEls | 323.15  | 0.455    |
| AAiEls | 328.15  | 0.337    |
| AAiEls | 328.59  | 0.372    |
| AAiEls | 332.96  | 0.283    |
| AAiEls | 333.15  | 0.254    |
| AAiEls | 338.1   | 0.217    |
| AAiEls | 338.15  | 0.195    |
| AAiEls | 343     | 0.166    |
| AAiEls | 343.15  | 0.152    |
| AAiEls | 348     | 0.131    |
| AAiEls | 352.89  | 0.104    |
| AAiEls | 358.03  | 0.0834   |
| AAiEls | 363.22  | 0.0653   |
| AAiEls | 368.66  | 0.0533   |
Asked By: YZman

||

Answers:

Have you considered doing a linear transformation using the formulaic relationship that you propose, or are you required/inclined to do non-linear regression? I took a stab at a transform + linear, which is cleaner. Maybe useful as a basis for comparison.

It is "pretty solid" when I tested on most of your liquid types in the data. You could argue against the fit a bit because the residuals are clearly non-linear, but their distribution is quite tight and the range of temperatures is enormous, so a more localized model might be slightly more convincing.

Anyhow…

If you want to fit to the underlying formula in your code that

V ~ a * exp(b/(t - c))    # from Wikipedia on V-F-T formula

This formulation suggests a double transform on V & t might work to arrive at:

V' ~   +  t'

Where

V' = ln(viscosity)
t' = 1/temp

So, tried that out w/ some success below… Some fits better than others.

Code

from matplotlib import pyplot as plt
from collections import defaultdict
from math import log
from scipy.stats import linregress


data = 
...  # just a cut & paste of your data above as a big string... omitted for clarity here


temps = defaultdict(list)
viscs = defaultdict(list)
observations = {}
for line in data.split('n'):
    tokens = line.strip().split('|')
    fluid = tokens[1].replace(' ','')
    temp = float(tokens[2])
    visc = float(tokens[3])

    temps[fluid].append(temp)
    viscs[fluid].append(visc)

# let's look at one fluid that has reasonable data count...

fluid = 'AAgmgm'
plt.scatter(temps[fluid], viscs[fluid])
plt.title(f'Original Data: {fluid}')
plt.show()


v_prime = [log(v) for v in viscs[fluid]]
t_prime = [1/t for t in temps[fluid]]

plt.scatter(t_prime, v_prime)

res = linregress(t_prime, v_prime)

print(res)

def predict(x):
    return res.intercept + res.slope*x

plt_range = [min(t_prime), max(t_prime)]
pred_vals = [predict(x) for x in plt_range]
plt.plot(plt_range, pred_vals, color='r')
plt.title(f'linear transformation.  P-value: {res.pvalue : 0.3e}')
plt.show()

predicted = [predict(t) for t in t_prime]
residuals = [p - v_p for (p, v_p) in zip(predicted, v_prime)]

plt.scatter(t_prime, residuals)
plt.title('Residuals')
plt.show()

enter image description here

enter image description here

enter image description here

Answered By: AirSquid
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.