生成删失回归模拟数据时出现Length of values与index长度不匹配错误
报错根因
np.where用法错误
你仅传入了条件参数y_star > .5,未传入条件成立/不成立时的对应返回值,此时np.where的返回结果是满足条件的行索引组成的单元素元组,整体长度为1,赋值给长度为10000的data['y']列时,因长度不匹配触发报错。- 函数调用语法错误
gen_q2_data.head()的写法没有为函数添加执行括号,实际是尝试对函数对象本身调用head方法,而非对函数返回的DataFrame调用,即使第一个问题修复,该写法也会触发属性不存在的报错。
修复方案
删失回归的左删失阈值为0.5,因此np.where需要补充两个返回值:条件成立时返回实际值y_star,条件不成立时返回删失阈值0.5。同时修正函数调用语法,补充函数执行的括号。
修复后完整可运行代码如下:
import pandas as pd import numpy as np # 初始化随机数生成器,设置种子可复现结果 rng = np.random.default_rng(seed=2024) def gen_q2_data(n=10000): data = pd.DataFrame() data['X'] = rng.uniform(-1.5, 1.5, n) data['U'] = rng.normal(0, np.sqrt(2), n) y_star = 0.5 + 2 * data['X'] - data['U'] # 修正np.where用法,补充返回值 data['y'] = np.where(y_star > 0.5, y_star, 0.5) # 可选:新增删失标记列,1代表该样本被删失,0代表观测值真实 data['is_censored'] = np.where(y_star <= 0.5, 1, 0) return data # 修正函数调用,先执行函数再取前5行 data_q2 = gen_q2_data().head()
内容的提问来源于stack exchange,提问作者M T K
相关产品推荐
相关产品推荐

