r - R - 具有 3 个解释变量的线性混合效应模型的回归平面
问题描述
我正在努力绘制具有 3 个解释变量的线性混合效应模型的回归平面。我在这里使用了az~x+y 模型的代码,并尝试将其调整为 az~x+y+c 模型:
library(nlme)
library(plot3D)
data <- read.table('data-plot-3D.csv', dec=',', sep=';', header=TRUE)
test <- lme(z~x+y+c,
data=data,
random=~1|s, method="ML")
grid.lines = nrow(data)
x.pred <- seq(min(data$x), max(data$x), length.out = grid.lines)
y.pred <- seq(min(data$y), max(data$y), length.out = grid.lines)
c.pred <- seq(min(data$c), max(data$c), length.out = grid.lines)
xyc <- expand.grid(x=x.pred,
y=y.pred,
c=c.pred)
z.pred <- matrix(predict(test, newdata=xyc, level=0),
nrow=grid.lines, ncol=grid.lines)
fitpoints <- as.vector(predict(test, data))
scatter3D(data$x, data$y, data$z,
pch=18, cex=2, theta=20, phi=20, ticktype="detailed",
xlab="x", ylab = "y", zlab="z",
surf=list(x=x.pred,
y=y.pred,
z=z.pred,
facets = NA,
fit = fitpoints),
main="Model 3D plot")
但这个数字是错误的:飞机根本不适合。我有几个假设可以解释这个结果,例如level=0
预测值的参数,或者我不知道的线性混合效应模型的一些属性。如果我理解正确,level=0
则需要该参数,因为 lme 模型包含一些噪音,而我的绘图数据不考虑它(也许我错了)。
当我将模型简化为简单的线性模型(lm
而不是lme
)时,删除了 3d 变量(z~x+y
),我有一个正确的回归平面:
library(nlme)
library(plot3D)
data <- read.table('data-plot-3D.csv', dec=',', sep=';', header=TRUE)
test <- lm(z~x+y, data=data)
grid.lines = nrow(data)
x.pred <- seq(min(data$x), max(data$x), length.out = grid.lines)
y.pred <- seq(min(data$y), max(data$y), length.out = grid.lines)
xy <- expand.grid(x=x.pred,
y=y.pred)
z.pred <- matrix(predict(test, newdata=xy),
nrow=grid.lines, ncol=grid.lines)
fitpoints <- predict(test)
scatter3D(data$x, data$y, data$z,
pch=18, cex=2, theta=20, phi=20, ticktype="detailed",
xlab="senescence", ylab = "cambium", zlab="budburst",
surf=list(x=x.pred,
y=y.pred,
z=z.pred,
facets = NA,
fit = fitpoints),
main="Good plane (lm z~x+y)")
我该如何解决这个问题?数据和图片如下。我还计划根据c
变量而不是沿 z
轴为点和平面着色,但我想它不太重要(我可能会问另一个问题)
s;z;x;y;c
B;103,5104;259,9426;250;0,289661996
F;100,6323;292,9711;250;0,522028213
F;105,2674;293,2956;257;0,429718346
F;103,2945;289,3861;257;0,499746521
B;100,3786;283,8451;271;0,210084525
B;100,392;284,7398;271;0,261014107
F;106,0284;295,9574;271;0,674816959
F;105,2831;280,6875;271;0,592056388
F;109,1873;284,9641;271;0,607971883
B;100,1647;253,8401;271;0,327859183
B;100,1124;259,4129;271;0,270563403
B;101,2346;261,3593;271;0,238732415
B;100,9574;285,814;277;0,261014107
F;105,1347;294,102;277;0,461549335
B;102,3565;302,9692;277;0,33422538
F;102,6884;297,6776;284;0,410619753
F;109,0465;288,4876;284;0,44881694
Q;110,0359;318,2187;284;0,630253575
Q;108,2855;285,7081;311;0,413802852
F;113,5328;308,7703;311;0,385154962
F;105,1965;266,3839;311;0,585690191
Q;112,9197;314,6168;311;0,604788784
Q;105,5601;284,8472;311;0,506112719
Q;109,5241;309,2628;319;0,36287327
Q;109,5802;315,2328;319;0,461549335
F;108,3161;285,0408;319;0,397887358
Q;110,3092;317,1796;328;0,423352149
Q;110,5984;297,9926;328;0,620704278
解决方案
推荐阅读
- python - Python从DOCX获取行位置(上、左、下、右)到HTML
- google-apps-script - 获取 gsheet 组合图表以通过电子邮件发送它们
- javascript - JS循环在javascript上条件为0
- powerbi - 如何使用增量刷新更新 Power BI 数据流中的维度?
- angular - 离子如何以编程方式知道是否应用了深色主题?
- javascript - Alpinejs 手风琴和点击切换
- reactjs - 在 Firebase 上部署 NextJS 但出现错误 403 Forbidden
- javascript - 在 github 中运行工作流时出现错误
- python-3.x - 如何使用 selenium / webdriver 从网页获取整个源代码?
- java - 如何从方法添加到列表