Zembower, Kevin wrote: > I'm trying to solve a homework problem using R. The problem gives a list > of cricket chirps per second and corresponding temperature, and asks to > give the equation for the linear model and then predict the temperature > to produce 18 chirps per second. So far, I have: > >> # Homework 11.2.1 and 11.3.3 >> chirps <- scan() > 1: 20 > 2: 16 > 3: 19.8 > 4: 18.4 > 5: 17.1 > 6: 15.5 > 7: 14.7 > 8: 17.1 > 9: 15.4 > 10: 16.2 > 11: 15 > 12: 17.2 > 13: 16 > 14: 17 > 15: 14.4 > 16: > Read 15 items >> temp <- scan() > 1: 88.6 > 2: 71.6 > 3: 93.3 > 4: 84.3 > 5: 80.6 > 6: 75.2 > 7: 69.7 > 8: 82 > 9: 69.4 > 10: 83.3 > 11: 79.6 > 12: 82.5 > 13: 80.6 > 14: 83.5 > 15: 76.3 > 16: > Read 15 items >> chirps > [1] 20.0 16.0 19.8 18.4 17.1 15.5 14.7 17.1 15.4 16.2 15.0 17.2 16.0 > 17.0 14.4 >> temp > [1] 88.6 71.6 93.3 84.3 80.6 75.2 69.7 82.0 69.4 83.3 79.6 82.5 80.6 > 83.5 76.3 >> chirps.res <- lm(chirps ~ temp) >> summary(chirps.res) > > Call: > lm(formula = chirps ~ temp) > > Residuals: > Min 1Q Median 3Q Max > -1.56146 -0.58088 0.02972 0.58807 1.53047 > > Coefficients: > Estimate Std. Error t value Pr(>|t|) > (Intercept) -0.31433 3.10963 -0.101 0.921028 > temp 0.21201 0.03873 5.474 0.000107 *** > --- > Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 > > Residual standard error: 0.9715 on 13 degrees of freedom > Multiple R-Squared: 0.6975, Adjusted R-squared: 0.6742 > F-statistic: 29.97 on 1 and 13 DF, p-value: 0.0001067 >> # From the linear model summary output above, the equation for the > least squares line is: >> # y = -0.3143 + 0.2120*x or chirps = -0.3143 + 0.2120*temp >> > > I can then determine the answer to the prediction, using algebra and R: >> pred_temp <- (18+0.3143)/0.2120 >> pred_temp > [1] 86.3882 > > However, I'd like to try to use the predict() function. Since 'chirps' > and 'temp' are just vectors of numbers, and not dataframes, these > failed: > predict(chirps.res, newdata=data.frame(chirp=18)) > predict(chirps.res, newdata="chirp=18") > predict(chirps.res, newdata=18) >
Well, "chirps" (not "chirp", BTW) was your *response* in the lm() call! Your new data has to be called "temp", otherwise either the regression did not make sense or you are confusing different things. Best, Uwe Ligges > I then tried to turn my two vectors into a dataframe. I would have bet > money that this would have worked, but it didn't: >> df <- data.frame(chirps, temp) >> chirps.res <- lm(chirps ~ temp, data=df) >> predict(chirps.res, newdata=data.frame(chirps=18)) > > Can anyone tell me how to use predict() in this circumstance? > > Thanks for your help and advice. > > -Kevin > > Kevin Zembower > Internet Services Group manager > Center for Communication Programs > Bloomberg School of Public Health > Johns Hopkins University > 111 Market Place, Suite 310 > Baltimore, Maryland 21202 > 410-659-6139 > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.