geom_smooth生成线性拟合问题及声调曲线可视化优化咨询
问题1:调整tshaa词的平滑曲线拟合形态
解决GAM拟合线性化的问题
用geom_smooth(method = "gam")时默认的样条自由度(k值)可能太低,尤其是如果tshaa的position数据点少、覆盖区间窄,GAM会退化成线性拟合。你可以手动指定更大的k值来强制捕捉曲线形态,比如把k设为10-12(根据数据量调整,数据多可以再加大):
ggplot(subset(df, word == "tshaa"), aes(x = position, y = f0, color = tone)) + geom_point(alpha = 0.3) + geom_smooth(method = "gam", formula = y ~ s(x, k = 12), se = FALSE)
另外先检查tshaa的position数据:如果x轴范围比其他词小很多,先确认数据是否完整,比如是否漏采了部分位置的基频点——数据量不足的话,再怎么调参数也难拟合出自然曲线。
提升Loess的平滑度
Loess的平滑程度由span参数控制,默认0.75,数值越大曲线越平滑。你可以调大span值,比如0.85或0.9,直到曲线形态和其他词一致:
ggplot(subset(df, word == "tshaa"), aes(x = position, y = f0, color = tone)) + geom_point(alpha = 0.3) + geom_smooth(method = "loess", span = 0.85, se = FALSE)
注意不要把span设得过大,否则会过度平滑丢失声调的关键特征。
问题2:可视化优化与跨说话人平均拟合的合理性
替代subset的高效可视化方式
别再手动用subset逐个筛选tone了,用ggplot的分面功能更高效,还能统一对比所有声调的曲线:
- 按tone分开展示(每个声调一个子图):
ggplot(df, aes(x = position, y = f0)) + geom_point(alpha = 0.1, aes(color = tone)) + geom_smooth(aes(color = tone, group = tone), method = "gam", formula = y ~ s(x, k = 10), se = TRUE) + facet_wrap(~tone) + labs(x = "音节位置", y = "基频(F0)", color = "声调")
- 如果要同时对比不同词的同一声调,用
facet_grid(word ~ tone)把词和声调组合成分面。
另外也可以直接在同一图中用颜色区分不同声调的平均曲线,配合低透明度的原始点展示数据分布,比逐个subset绘图清晰得多。
跨说话人平均拟合的最优性
你现在直接对全部数据做平滑,相当于忽略了说话人、词的个体差异,可能会把不同说话人/词的曲线“拉平”,丢失真实的声调模式。更严谨的做法是用带随机效应的混合模型来拟合,比如用mgcv包的GAM加入说话人和词的随机效应,排除个体波动后再提取平均曲线:
library(mgcv) # 拟合带随机效应的GAM:控制说话人和词的差异,拟合不同声调的position-f0曲线 gam_model <- gam(f0 ~ s(position, k = 10, by = tone) + s(speaker, bs = "re") + s(word, bs = "re"), data = df) # 生成预测用的网格数据 pred_df <- expand.grid( position = seq(min(df$position), max(df$position), length.out = 100), tone = unique(df$tone), speaker = sample(unique(df$speaker), 1), # 取一个代表性说话人 word = sample(unique(df$word), 1) # 取一个代表性词 ) # 预测基频 pred_df$f0_pred <- predict(gam_model, newdata = pred_df) # 绘制平均曲线 ggplot(pred_df, aes(x = position, y = f0_pred, color = tone)) + geom_line(size = 1) + labs(x = "音节位置", y = "预测基频(F0)", color = "声调")
这种方法拟合出的曲线更接近声调的“典型形态”,比直接对全部数据做平滑更可靠。
内容的提问来源于stack exchange,提问作者SanguineEpitaph
相关产品推荐
相关产品推荐

