File size: 3,799 Bytes
c3c3a50
84f85ed
 
aae7214
4b55a84
 
3c44b25
84f85ed
8b39a1b
3886250
e0e0ee4
 
 
 
 
 
 
 
 
84f85ed
e0e0ee4
 
 
84f85ed
c71c387
84f85ed
c71c387
84f85ed
c71c387
84f85ed
c71c387
 
84f85ed
3c44b25
 
 
 
 
 
 
 
 
 
 
 
 
 
84f85ed
3c44b25
 
 
 
 
84f85ed
 
3c44b25
84f85ed
c3c3a50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84f85ed
c3c3a50
 
 
 
6d4537d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import gradio as gr
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import joblib
import numpy as np


# Define the model architecture
model = joblib.load('Keras.pkl')


manual_encoding = {
    "Gender": {"Male": 1, "Female": 0, "-99": -99},
    "Race (Reported)": {"White": 0, "Other Mixed Race": 1, "African-American": 2, "Black": 3, "Hispanic": 4, "Japanese": 5, "Han Chinese": 6, "other": 7, "Asian": 8, "Korean": 9, "Caucasian": 10, "Black or African American": 11, "Other": 12, "Intermediate": 13, "Malay": 14, "Chinese": 15, "Indian": 16, "Black Caribbean": 17, "Other (Hungarian)": 18, "Other (Black British)": 19, "Black African": 20, "Black other": 21},
    "Age": {"90+": 6, "80 - 89": 5, "70 - 79": 4, "60 - 69": 3, "50 - 59": 2, "40 - 49": 1, "30 - 39": 0, "20 - 29": 7, "10 - 19": 8},
    "Diabetes": {1: 1, 0: 0},
    "Simvastatin (Zocor)": {1: 1, 0: 0},
    "Amiodarone (Cordarone)": {1: 1, 0: 0},
    "Target INR": {3.5: 5, 3.25: 5, 3.0: 5, 2.8: 5, 2.7: 5, 2.6: 5, 2.5: 5, 2.3: 5, 2.2: 5, 2.0: 5, 1.75: 5, 1.3: 5},
    "Cyp2C9 genotypes": {"*1/*1": 0, "*1/*3": 1, "*1/*2": 2, "*2/*2": 3, "*2/*3": 4, "*3/*3": 5, "*1/*5": 6, "*1/*13": 7, "*1/*14": 8, "*1/*11": 9, "*1/*6": 10},
    "VKORC1 genotype: -1639 G>A (3673); chr16:31015190; rs9923231; C/T": {"A/A": 0, "A/G": 1, "G/G": 2}
}

def apply_encoding(input_data):
    encoded_data = {}
    for key, value in input_data.items():
        if key in manual_encoding:
            encoded_data[key] = manual_encoding[key][value]
        else:
            encoded_data[key] = value
    return encoded_data

def predict_warfarin_dose(gender, race, age_group, height, weight, diabetes, simvastatin, amiodarone, target_inr, inr_on_reported_dose, cyp2c9, vkorc1):
    # Encode input data
    encoded_data = apply_encoding({
        "Gender": gender,
        "Race (Reported)": race,
        "Age": age_group,
        "Height": height,
        "Weight": weight,
        "Diabetes": diabetes,
        "Simvastatin (Zocor)": simvastatin,
        "Amiodarone (Cordarone)": amiodarone,
        "Target INR": target_inr,
        "INR on Reported Therapeutic Dose of Warfarin": inr_on_reported_dose,
        "Cyp2C9 genotypes": cyp2c9,
        "VKORC1 genotype: -1639 G>A (3673); chr16:31015190; rs9923231; C/T": vkorc1
    })

    # Convert encoded data to a format compatible with the model
    input_data = [encoded_data[key] for key in encoded_data]
    input_data = np.array(input_data).reshape(1, -1)

    # Make prediction using the trained model
    predicted_dose = model.predict(input_data)[0][0]

    return str(-1*predicted_dose)

iface = gr.Interface(
    fn=predict_warfarin_dose,
    inputs=[
        gr.Dropdown(["Male", "Female", "-99"], label="Gender"),
        gr.Dropdown(list(manual_encoding["Race (Reported)"].keys()), label="Race"),
        gr.Dropdown(list(manual_encoding["Age"].keys()), label="Age Group"),
        gr.Number(label="Height (cm)"),
        gr.Number(label="Weight (kg)"),
        gr.Dropdown([1, 0], label="Diabetes"),
        gr.Dropdown([1, 0], label="Simvastatin"),
        gr.Dropdown([1, 0], label="Amiodarone"),
        gr.Dropdown(list(manual_encoding["Target INR"].keys()), label="Target INR"),
        gr.Number(label="INR on Reported Therapeutic Dose of Warfarin"),
        gr.Dropdown(list(manual_encoding["Cyp2C9 genotypes"].keys()), label="CYP2C9 Genotypes"),
        gr.Dropdown(list(manual_encoding["VKORC1 genotype: -1639 G>A (3673); chr16:31015190; rs9923231; C/T"].keys()), label="VKORC1 Genotype"),
    ],
    outputs=gr.Textbox(label="Predicted Therapeutic Dose of Warfarin (mg/week)"),
    title="Warfarin Dosing Prediction",
    description="Enter patient information to predict the therapeutic dose of warfarin.",
)

iface.launch('share=True')