Я пытаюсь построить доверительные интервалы на графике регрессии. - PullRequest
0 голосов
/ 12 ноября 2018

Я попробовал несколько методов, но все они дают мне ошибку, говоря, что значения x и y не совпадают.

Это то, что я сделал до сих пор.

head(new_data[,4:5])

 Humerus   Radius
 4.992607 4.921148
 5.170484 5.049856
 5.005623 4.936989
 5.065755 4.976734
 4.219508 4.174387
 4.262680 4.157319

plot(new_data$Radius, new_data$Humerus, main="Regression analysis of Humerus to radius", 
 xlab="Radius ", ylab=" Humerus", pch=19)
abline(lm(new_data$Humerus~ new_data$Radius))

Это график, который я получил

И чтобы сделать доверительные интервалы, я попробовал это

lm.out <- lm(new_data$Humerus ~ new_data$Radius)
newx = seq(min(new_data$Radius),max(new_data$Humerus),by = 0.05)
conf_interval <- predict(lm.out, newdata=data.frame(x=newx), interval="confidence",level = 0.95)
plot(new_data$Radius, new_data$Humerus, xlab="Radius", ylab="Humerus", main="Regression")
abline(lm.out, col="lightblue")
lines(newx, conf_interval[,2], col="blue", lty=2)
lines(newx, conf_interval[,3], col="blue", lty=2)

Когда я делаю это, появляется сообщение об ошибке, говорящее -

 Warning message:
'newdata' had 61 rows but variables found have 150 rows

Я действительно застрял здесь, любая помощь была бы очень признательна. Спасибо

1 Ответ

0 голосов
/ 12 ноября 2018

Когда вы используете predict(), newdata должен быть кадром данных, содержащим те же имена, что и пояснительные переменные в исходном наборе данных. В вашем исходном наборе данных переменная x называлась «new_data $ Radius». Вам нужно сделать два изменения:

  1. Когда вы делаете исходную регрессию, просто используйте имена переменных

    lm.out <- lm (Humerus ~ Radius, data = new_data) </p>

  2. Когда вы передаете свой параметр newdata, пусть имя будет «Радиус», а не «x»

    conf_interval <- предсказание (lm.out, newdata = data.frame (Radius = newx), интервал = "достоверность", уровень = 0,95) </p>

Таким образом, ваш код должен читать

lm.out <- lm(Humerus ~ $Radius,data=new_data)
newx = seq(min(new_data$Radius),max(new_data$Humerus),by = 0.05)
conf_interval <- predict(lm.out, newdata=data.frame(Radius=newx), interval="confidence",level = 0.95)
plot(new_data$Radius, new_data$Humerus, xlab="Radius", ylab="Humerus", main="Regression")
abline(lm.out, col="lightblue")
lines(newx, conf_interval[,2], col="blue", lty=2)
lines(newx, conf_interval[,3], col="blue", lty=2)
...