使用predict()函数将预测值线拟合到可视化模型上

时间:2018-02-16 17:51:46

标签: r graph predict lme4

我创建了一个线性混合效应模型,其中解释变量是母亲年龄,响应变量是伴侣年龄以及几个随机效应。 我创建模型没有问题,但现在我使用它生成预测值以适应图表我遇到了一些困难! 据我所知,代码是正确的,我不知道为什么这不起作用。

首先我尝试了以下

pred <- expand.grid(Mother.age=EPPs$Mother.age)
head(pred)
tail(pred) 
pred$fit <- predict(m6, newdata=EPPs, type='response', re.form=~0)
head(pred) #here i have predicted and fitted values but they are not in order so I tried the following

pred[order(pred$fit),] ##this said that it worked but changed nothing

plot(jitter(Genetic.father.age) ~ jitter(Mother.age), data=EPPs)

lines(fit ~ Mother.age, data=pred, col='red')

这基本上以一个巨大的来回红色涂鸦而不是一条线结束,所以我决定手动在excel中订购数据点并再试一次

pred1 <- read.csv("predictions1.csv", header=TRUE) ##These are the ordered point
head(pred1)
tail(pred1)
pred$fit <- predict(m6, newdata=EPPs, type='response', re.form=~0)

plot(jitter(Genetic.father.age) ~ jitter(Mother.age), data=EPPs)

lines(fit ~ Mother.age, data=pred1, col='red')

现在这让我非常接近直线,但是每年在x轴上仍然没有“升级”,我真正想要的是平滑的线条!

任何帮助都会受到赞赏 - 我不知道我还能做些什么。

哦,虽然我在这里 - 任何关于比较两个lme模型的事后测试的建议,看看是否有显着差异?在这种情况下,它将是完全相同的模型,除了第一个响应变量是遗传父亲年龄,第二个是社会父亲年龄(我想表明额外的配对男性平均比戴绿帽的社交男性平均年龄)< / p>

谢谢!

整个例子

EPPs <- read.csv("EPPs.csv", header=TRUE) #data i am using

将这些坏男孩变成可以用作随机效果的因素

EPPs$Mother <- as.factor(EPPs$Mother) 
EPPs$Mother.Cohort <- as.factor(EPPs$Mother.Cohort)
EPPs$Brood.year <- as.factor(EPPs$Brood.year)
EPPs$Social.Father <- as.factor(EPPs$Social.Father) 

在主题中心内

AveByInd <- function(x) mean(x)
d2 <- do.call("rbind", as.list(
  by(EPPs, EPPs["Mother"], transform, AveMAge=AveByInd(Mother.age))))
par(mfrow=c(1,1))
hist(d2$AveMAge, xlab="Average mother age", ylab="Frequency", main="")

WithinIndCentr <- function(x) x-mean(x)
d2 <- do.call("rbind", as.list(
  by(d2, d2["Mother"], transform, WithinMAge=WithinIndCentr(Mother.age))))
par(mfrow=c(1,1))
hist(d2$WithinMAge, xlab="Within-female centered age", ylab="Frequency", 
main
     ="")

m6<-lmer(d2$Genetic.father.age~d2$WithinMAge+d2$AveMAge+(1|Mother)+
(1|Mother.Cohort)+(1|Brood.year)+(1|Social.Father), data=d2)
summary(m6)

我选择的模型

在这一点之上一切正常 现在我想使用我的模型生成的预测来添加最适合我的图形的线

我应该提一下,我决定尝试使用Mother.age变量而不是内部主题居中变量,因为我认为它会更直接 本来我正在尝试这个

pred <- expand.grid(Mother.age=EPPs$Mother.age)
pred$fit <- predict(m6, newdata=EPPs, type='response', re.form=~0)
head(pred)
pred[order(pred$fit),]

我被告知我必须订购矩阵才能使其正常工作,但这似乎不起作用

plot(jitter(Genetic.father.age) ~ jitter(Mother.age), data=EPPs)
lines(fit ~ Mother.age, data=pred, col='red')

这导致了一条可怕的来回乱七八糟的红线 有朋友告诉我,我需要订购矩阵才能让它工作,所以我尝试在excel和reuploading中手动完成

pred1 <- read.csv("predictions1.csv", header=TRUE) ##almost works
head(pred1)##predictions are in order

dev.off()
plot(jitter(Genetic.father.age) ~ jitter(Mother.age), data=EPPs) 

使用抖动,因为离散数据点,我想知道具有大量重叠点的区域

lines(fit ~ Mother.age, data=pred1, col='red')

现在我得到了一条非常接近直线但它仍然没有“步骤”,我希望它完全光滑

0 个答案:

没有答案