楼主: SUMMER20241
698 1

[SAS EM] 学术菜渣救助SAS大佬(线性回归模型;虚拟变量) [推广有奖]

  • 0关注
  • 0粉丝

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
1 小时
注册时间
2024-8-14
最后登录
2025-3-10

楼主
SUMMER20241 发表于 2024-8-14 09:30:47 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
SAS模型运行提示:

Model is not full rank. Least-squares solutions for the parameters are not unique. Some statistics will be misleading. A reported DF of 0 or B means that the estimate is biased.


注意:The following parameters have been set to 0, since the variables are a linear combination of other variables as shown



模型:
Proc Reg data=HFA.mockdata;
Model Mass Loss = CommA CommB EnvA EnvB  HFAA HFAB / HCC;
restrict CommA + CommB = 0;
restrict EnvA + EnvB  = 0;
run; quit;
注:Mass loss :质量损失(连续变量);剩余的因变量均为0或1的虚拟变量。
Mass loss 有4个水平,虚拟变量有6个。(因为Mass loss 为9个水平,虚拟变量9个时模型是没有问题的 屏幕截图 2024-08-14 092948.png
请问是虚拟变量数量的问题吗?

        Model ML = CommA CommB EnvA EnvB HFAA HFAB / HCC tol vif collin;
        restrict CommA + CommB = 0;
        restrict EnvA + EnvB = 0;  
run;
quit;        Model ML = CommA CommB EnvA EnvB HFAA HFAB / HCC tol vif collin;
        restrict CommA + CommB = 0;
        restrict EnvA + EnvB = 0;  
run;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:线性回归模型 虚拟变量 线性回归 回归模型 combination 线性回归模型 虚拟变量 共线性 统计分析

模型结果反馈.png (194.26 KB)

模型结果反馈.png

我的结果.png (140.94 KB)

我的结果.png

沙发
赵安豆 发表于 2024-8-14 10:27:14
在你的SAS代码中,你试图使用线性回归模型去预测`Mass Loss`这个响应变量,并且加入了限制条件以处理虚拟变量陷阱。但是,你遇到了一个“Model is not full rank”的警告信息,这意味着模型矩阵(包含所有自变量)不具有完全的列秩,这通常发生在自变量之间存在完全的多重共线性时。

在你的代码中,`CommA`, `CommB`, `EnvA`, 和 `EnvB` 看起来是分类变量。你已经通过使用`restrict`语句来处理潜在的多重共线性问题(虚拟变量陷阱),即当一个分类变量的多个水平同时出现时会导致模型矩阵列秩不全。

但是,警告信息仍然提示“Model is not full rank”,这可能意味着以下几种情况之一:
1. 数据中存在完全相关或缺失值导致的自变量不足。
2. `restrict`语句并没有正确地解决虚拟变量陷阱问题。
3. 模型设计矩阵中仍存在其他完全相关的变量。

要解决这个问题,你可以尝试以下几个步骤:
- **检查数据**:确保你的分类变量的所有水平都至少在数据集中出现一次。如果某些水平没有观测值,这可能会导致模型不完整秩的问题。
- **重新考虑`restrict`语句**:确认你是否正确地处理了所有相关联的虚拟变量组合。例如,如果你有三个类别A、B和C,则可能需要限制A + B + C = 0,或者排除其中一个分类水平作为基线,并不再对它使用任何限制。
- **使用`class`语句**:SAS中可以更直接地处理分类数据的另一个方法是使用PROC REG内的`class`语句。这将自动处理虚拟变量编码和相关的共线性问题。

修改后的代码可能如下所示:

```sas
Proc Reg data=HFA.mockdata;
   class Comm Env / param=glm;
   model MassLoss = Comm Env HFAA HFAB / HCC;
run; quit;
```

在这个版本中,`Comm` 和 `Env` 分别对应你的`CommA`, `CommB` 和 `EnvA`, `EnvB`。通过使用`class`语句和`param=glm`选项,SAS将自动为这些分类变量创建虚拟变量,并采用GLM编码(默认),这通常会避免列秩不足的问题。

请注意,在使用`class`语句时,不需要再添加`restrict`语句,因为SAS内部处理了必要的限制。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-7 06:52