import numpy as np import pandas as pd def calculate_ed(y, genotype): """ 计算ED值 :param y: 表现型数据,一维numpy数组 :param genotype: SNP基因型数据,Pandas DataFrame,行数为个体数量,列数为SNP位点数 :return: ED值 """ # 检查输入数据是否合法 if not isinstance(y, np.ndarray) or not isinstance(genotype, pd.DataFrame): raise TypeError("输入数据格式错误") # 计算每个个体的基因型得分 score = genotype.sum(axis=1) # 计算每个个体的方差 var_score = np.var(score) # 计算每个个体与平均表现型的差异的平方和 sum_delta_y_sq = np.sum((y - np.mean(y))**2) # 计算ED值 ed = sum_delta_y_sq / var_score return ed