R语言含分类自变量多元线性回归subset筛选失效问题
解答
首先明确:可以只选取自变量的部分类别构建模型。你的分析目标是聚焦双音节开音节样本,检验元音位置对基频均值的影响,筛选对应子样本做回归是完全合理的分析思路。
你的代码无法正常运行、达不到预期,是两个写法错误导致的:
subset参数用法错误:lm()的subset参数直接传入行筛选的逻辑表达式即可,不需要嵌套subset()函数;同时你写的筛选值和变量实际水平不匹配:你提到SyllableCount的水平是disyllabic/trisyllabic,代码里却写匹配"2",另外变量名拼写不一致——你描述的音节类型变量名是SyllabicType,代码里写的是syllableType,R对大小写敏感,拼写偏差会直接触发对象不存在的报错。- 模型公式存在冗余项:你已经通过筛选把样本限定为双音节、开音节的子集,这两个变量在子集中所有样本取值完全一致,没有方差,加入回归公式会因为和常数项完全共线性被自动剔除,完全不需要作为自变量放入模型,只保留核心自变量
VowelPosition即可。
正确代码写法
你可以选择直接在lm()内完成筛选,写法如下:
# 运行前请核对你数据中变量名的准确拼写、因子水平的实际取值 model_F0_disyll <- lm( data = QP1_subset_norm, formula = meanf0_norm ~ VowelPosition, subset = SyllableCount == "disyllabic" & SyllabicType == "open" )
提示:如果你的数据里
SyllableCount的双音节水平确实是编码为"2"而非"disyllabic",把筛选条件里的对应值改成"2"即可,一定要和你数据里的实际存储值保持一致。
如果觉得直接在lm里写筛选逻辑容易出错,也可以先提取子数据集再建模,逻辑更清晰:
# 第一步:筛选符合条件的双音节开音节样本 disyll_open_data <- QP1_subset_norm[ QP1_subset_norm$SyllableCount == "disyllabic" & QP1_subset_norm$SyllabicType == "open", ] # 第二步:基于子样本构建回归模型 model_F0_disyll <- lm(meanf0_norm ~ VowelPosition, data = disyll_open_data)
模型构建完成后,运行summary(model_F0_disyll)即可查看回归结果,VowelPosition对应项的显著性p值就能判断不同元音位置的基频均值是否存在显著差异。
内容的提问来源于stack exchange,提问作者Dal Ga
相关产品推荐
相关产品推荐

