You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言predict函数无法生成失业者工资预测值的问题求助

解决方法

你遇到的问题是因为predict.selection()默认只返回就业样本的工资拟合值——毕竟模型的第二阶段(工资方程)是基于有工资数据的就业者估计的。要生成全数据集(包括失业者)的对数工资预测,有两种简单的实现方式:

方法一:指定newdata参数调用predict

直接在predict()中传入完整数据集作为newdata,函数会自动为所有样本计算预测值:

ml_restricted <- selection(employed ~ schooling + age + agesq + married, logwage ~ schooling + age + agesq, data)
summary(ml_restricted)

# 生成全样本预测
predML <- predict(ml_restricted, newdata = data, type = "response")

# 合并到原数据集
data$predML <- predML  # 用$赋值比cbind更稳妥,避免类型问题

employed2 <- ifelse(data$employed == 1, "employed", "unemployed")
data$employed2 <- employed2

这里type="response"会直接返回对数工资的预测值(对应模型的线性预测结果,因为工资方程是对数形式)。

方法二:手动用模型系数计算

如果想更直观地控制计算过程,可以提取工资方程的系数,手动对全样本计算预测:

ml_restricted <- selection(employed ~ schooling + age + agesq + married, logwage ~ schooling + age + agesq, data)
summary(ml_restricted)

# 提取工资方程的系数(包括截距项)
wage_coefficients <- coef(ml_restricted)[grepl("logwage", names(coef(ml_restricted)))]

# 构造全样本的自变量矩阵(自动包含截距项)
X_matrix <- model.matrix(~ schooling + age + agesq, data = data)

# 计算对数工资预测
predML <- as.vector(X_matrix %*% wage_coefficients)

# 合并到原数据集
data$predML <- predML

employed2 <- ifelse(data$employed == 1, "employed", "unemployed")
data$employed2 <- employed2

注意事项

  • 两种方法得到的结果是一致的,第一种更简洁,第二种适合需要自定义计算逻辑的场景。
  • 用data$colname的方式赋值比cbind更安全,能避免因数据类型不匹配导致的列格式问题。

内容的提问来源于stack exchange,提问作者Pete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:41:34