{"id":4776,"date":"2015-02-22T18:13:13","date_gmt":"2015-02-22T17:13:13","guid":{"rendered":"http:\/\/emilkirkegaard.dk\/en\/?p=4776"},"modified":"2015-02-22T20:00:47","modified_gmt":"2015-02-22T19:00:47","slug":"understanding-restriction-of-range-with-shiny","status":"publish","type":"post","link":"https:\/\/emilkirkegaard.dk\/en\/2015\/02\/understanding-restriction-of-range-with-shiny\/","title":{"rendered":"Understanding restriction of range with Shiny!"},"content":{"rendered":"<p>I made this: https:\/\/emilkirkegaard.shinyapps.io\/Understanding_restriction_of_range\/<\/p>\n<p><iframe loading=\"lazy\" style=\"border: none; width: 800px; height: 500px;\" src=\"http:\/\/emilkirkegaard.shinyapps.io\/Understanding_restriction_of_range\/\" width=\"300\" height=\"150\"><\/iframe><\/p>\n<p>Source:<\/p>\n<pre># ui.R\r\nshinyUI(fluidPage(\r\n\u00a0 titlePanel(title, windowTitle = title),\r\n\u00a0 \r\n\u00a0 sidebarLayout(\r\n\u00a0\u00a0\u00a0 sidebarPanel(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 helpText(\"Get an intuitive understanding of restriction of range using this interactive plot. The slider below limits the dataset to those within the limits.\"),\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 sliderInput(\"limits\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 label = \"Restriction of range\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 min = -5, max = 5, value = c(-5, 5), step=.1),\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 helpText(\"Note that these are Z-values. A Z-value of +\/- 2 corresponds to the 98th or 2th centile, respectively.\")\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 ),\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 mainPanel(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 plotOutput(\"plot\"),width=8,\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 textOutput(\"text\")\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 )\r\n\u00a0 )\r\n))<\/pre>\n<pre># server.R\r\nshinyServer(\r\n\u00a0 function(input, output) {\r\n\u00a0\u00a0\u00a0 output$plot &lt;- renderPlot({\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 #limits\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 lower.limit = input$limits[1] #lower limit\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 upper.limit = input$limits[2]\u00a0 #upper limit\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 #adjust data object\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 data[\"X.restricted\"] = data[\"X\"] #copy X\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 data[data[,1]&lt;lower.limit | data[,1]&gt;upper.limit,\"X.restricted\"] = NA #remove values\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 group = data.frame(rep(\"Included\",nrow(data))) #create group var\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 colnames(group) = \"group\" #rename\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 levels(group$group) = c(\"Included\",\"Excluded\") #add second factor level\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 group[is.na(data[\"X.restricted\"])] = \"Excluded\" #is NA?\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 data[\"group\"] = group #add to data\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 #plot\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 xyplot(Y ~ X, data, type=c(\"p\",\"r\"), col.line = \"darkorange\", lwd = 1,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 group=group, auto.key = TRUE)\r\n\u00a0\u00a0\u00a0 })\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 output$text &lt;- renderPrint({\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 #limits\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 lower.limit = input$limits[1] #lower limit\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 upper.limit = input$limits[2]\u00a0 #upper limit\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 #adjust data object\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 data[\"X.restricted\"] = data[\"X\"] #copy X\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 data[data[,1]&lt;lower.limit | data[,1]&gt;upper.limit,\"X.restricted\"] = NA #remove values\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 group = data.frame(rep(\"Included\",nrow(data))) #create group var\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 colnames(group) = \"group\" #rename\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 levels(group$group) = c(\"Included\",\"Excluded\") #add second factor level\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 group[is.na(data[\"X.restricted\"])] = \"Excluded\" #is NA?\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 data[\"group\"] = group #add to data\r\n\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 #correlations\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 cors = cor(data[1:3], use=\"pairwise\")\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 r = round(cors[3,2],2)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 #print output\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 str = paste0(\"The correlation in the full dataset is .50, the correlation in the restricted dataset is \",r)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 print(str)\r\n\u00a0\u00a0\u00a0 })\r\n\u00a0\u00a0 \u00a0\r\n\u00a0 }\r\n)<\/pre>\n<pre>#global.R\r\nlibrary(\"lattice\")\r\ndata = read.csv(\"data.csv\",row.names = 1) #load data\r\ntitle = \"Understanding restriction of range\"<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>I made this: https:\/\/emilkirkegaard.shinyapps.io\/Understanding_restriction_of_range\/ Source: # ui.R shinyUI(fluidPage( \u00a0 titlePanel(title, windowTitle = title), \u00a0 \u00a0 sidebarLayout( \u00a0\u00a0\u00a0 sidebarPanel( \u00a0\u00a0\u00a0\u00a0\u00a0 helpText(&#8220;Get an intuitive understanding of restriction of range using this interactive plot. The slider below limits the dataset to those within the limits.&#8221;), \u00a0\u00a0\u00a0\u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 sliderInput(&#8220;limits&#8221;, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 label = &#8220;Restriction of range&#8221;, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 min = [&hellip;]<\/p>\n","protected":false},"author":17,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1839,1766,2089],"tags":[1979,2088,2095],"class_list":["post-4776","post","type-post","status-publish","format-standard","hentry","category-psychometics","category-math-science","category-programming","tag-r","tag-restriction-of-range","tag-shiny","entry"],"_links":{"self":[{"href":"https:\/\/emilkirkegaard.dk\/en\/wp-json\/wp\/v2\/posts\/4776","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/emilkirkegaard.dk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/emilkirkegaard.dk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/emilkirkegaard.dk\/en\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/emilkirkegaard.dk\/en\/wp-json\/wp\/v2\/comments?post=4776"}],"version-history":[{"count":4,"href":"https:\/\/emilkirkegaard.dk\/en\/wp-json\/wp\/v2\/posts\/4776\/revisions"}],"predecessor-version":[{"id":4781,"href":"https:\/\/emilkirkegaard.dk\/en\/wp-json\/wp\/v2\/posts\/4776\/revisions\/4781"}],"wp:attachment":[{"href":"https:\/\/emilkirkegaard.dk\/en\/wp-json\/wp\/v2\/media?parent=4776"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/emilkirkegaard.dk\/en\/wp-json\/wp\/v2\/categories?post=4776"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/emilkirkegaard.dk\/en\/wp-json\/wp\/v2\/tags?post=4776"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}