Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2014
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. # setting up some fake data
  2. set.seed(1)
  3. funct <- function(myState, myYear){
  4. rnorm(1, 100, 500) + myState + (100 * myYear)
  5. }
  6. state <- 50:60
  7. year <- 10:40
  8. myData <- expand.grid( year, state)
  9. names(myData) <- c("year","state")
  10. myData$value <- apply(myData, 1, function(x) funct(x[2], x[1]))
  11. ## ok, done with the fake data generation.
  12.  
  13. require(plyr)
  14.  
  15. modelList <- dlply(myData, "state", function(x) lm(value ~ year, data=x))
  16. ## if you want to see the summaries of the lm() do this:
  17. # lapply(modelList, summary)
  18.  
  19. state <- 50:60
  20. year <- 50:60
  21. newData <- expand.grid( year, state)
  22. names(newData) <- c("year","state")
  23. ## now how do I predict the values for newData$value
  24. # using the regressions in modelList?
  25.  
  26. predNaughty <- ddply(newData, "state", transform,
  27. value=predict(modelList[[paste(piece$state[1])]], newdata=piece))
  28. head(predNaughty)
  29. # year state value
  30. # 1 50 50 5176.326
  31. # 2 51 50 5274.907
  32. # 3 52 50 5373.487
  33. # 4 53 50 5472.068
  34. # 5 54 50 5570.649
  35. # 6 55 50 5669.229
  36. predDiggsApproved <- ddply(newData, "state", function(x)
  37. transform(x, value=predict(modelList[[paste(x$state[1])]], newdata=x)))
  38. head(predDiggsApproved)
  39. # year state value
  40. # 1 50 50 5176.326
  41. # 2 51 50 5274.907
  42. # 3 52 50 5373.487
  43. # 4 53 50 5472.068
  44. # 5 54 50 5570.649
  45. # 6 55 50 5669.229
  46.  
  47. pred3 <- adply(newData, 1, function(x)
  48. predict(modelList[[paste(x$state)]], newdata=x))
  49. head(pred3)
  50. # year state 1
  51. # 1 50 50 5176.326
  52. # 2 51 50 5274.907
  53. # 3 52 50 5373.487
  54. # 4 53 50 5472.068
  55. # 5 54 50 5570.649
  56. # 6 55 50 5669.229
  57.  
  58. models <- lapply(split(myData, myData$state), 'lm', formula = value ~ year)
  59. pred4 <- mapply('predict', models, split(newData, newData$state))
  60.  
  61. dataList <- dlply(newData, "state")
  62.  
  63. preds <- mdply(cbind(mod = modelList, df = dataList), function(mod, df) {
  64. mutate(df, pred = predict(mod, newdata = df))
  65. })
  66.  
  67. lapply(modelList, predict, newData)
  68.  
  69. newData <- data.frame(year)
  70. ldply(modelList, function(model) {
  71. data.frame(newData, predict=predict(model, newData))
  72. })
  73.  
  74. ldply(state, function(s) {
  75. nd <- newData[newData$state==s,]
  76. data.frame(nd, predict=predict(modelList[[as.character(s)]], nd))
  77. })
  78.  
  79. year state predict
  80. 1 50 50 5176.326
  81. 2 51 50 5274.907
  82. 3 52 50 5373.487
  83. 4 53 50 5472.068
  84. 5 54 50 5570.649
  85. 6 55 50 5669.229
  86. 7 56 50 5767.810
  87. 8 57 50 5866.390
  88. 9 58 50 5964.971
  89. 10 59 50 6063.551
  90. 11 60 50 6162.132
  91. 12 50 51 5514.825
  92. 13 51 51 5626.160
  93. 14 52 51 5737.496
  94. 15 53 51 5848.832
  95.  
  96. predList <- dlply(newData, "state", function(x) {
  97. predict(modelList[[as.character(min(x$state))]], x)
  98. })
  99.  
  100. > predList[1:2]
  101. $`50`
  102. 1 2 3 4 5 6 7 8 9 10 11
  103. 5176.326 5274.907 5373.487 5472.068 5570.649 5669.229 5767.810 5866.390 5964.971 6063.551 6162.132
  104.  
  105. $`51`
  106. 12 13 14 15 16 17 18 19 20 21 22
  107. 5514.825 5626.160 5737.496 5848.832 5960.167 6071.503 6182.838 6294.174 6405.510 6516.845 6628.181
  108.  
  109. predData <- ddply(newData, "state", function(x) {
  110. y <-predict(modelList[[as.character(min(x$state))]], x)
  111. data.frame(id=names(y), value=c(y))
  112. })
  113.  
  114. head(predData)
  115. state id value
  116. 1 50 1 5176.326
  117. 2 50 2 5274.907
  118. 3 50 3 5373.487
  119. 4 50 4 5472.068
  120. 5 50 5 5570.649
  121. 6 50 6 5669.229
  122.  
  123. library(nlme)
  124. ll = lmList(value ~ year | state, data=myData)
  125. predict(ll, newData)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement