Advertisement
Guest User

SSC survey: oblivion SEM

a guest
Jul 1st, 2016
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.99 KB | None | 0 0
  1. http://slatestarcodex.com/2016/06/28/survey-results-suffering-vs-oblivion/
  2. https://docs.google.com/forms/d/1FTfQr3D8PMkgGztga9d_NuImyNxWEGD1BEjGKU1QVwc/edit
  3. http://slatestarcodex.com/blog_images/oblivionsurvey.csv
  4.  
  5. <blockquote>Second, answers to all questions would correlate along a general factor of oblivion-preference versus suffering-preference. That is, people who would prefer oblivion to working at McDonalds would also be more likely to prefer a short life of happiness to a long life of unhappiness, et cetera.
  6.  
  7. ...Third, this factor would predict whether somebody endorsed a form of population ethics which promotes creating new people (question 3 is sort of just asking this already, but I also included a more direct question along those lines). ["Question 5. Creating new sentient beings is:"]
  8.  
  9. ...Fourth, this factor would predict some real-world consequences like whether people believed in a right to euthanasia and whether they were signed up for cryonics.
  10.  
  11. ...Fifth, happier people would be more likely to prefer suffering over oblivion, because they view life as generally excellent and so oblivion represents more of a sacrifice for them.</blockquote>
  12.  
  13. Trying to combine these hypotheses into a statistical model, I get something like this:
  14.  
  15. <code>
  16. OBLIVION =~ 1+2+3+..+N
  17. Newpeople ~ OBLIVION
  18. Euthanasia ~ OBLIVION
  19. Cryonics ~ OBLIVION
  20. OBLIVION ~ Happiness
  21. </code>
  22.  
  23. I'll need to look closer at the survey to figure out which ones go into <tt>OBLIVION</tt> (obviously, not the new-people, euthanasia-rights, cryonics, or happiness variables!).
  24.  
  25. First, though, all the data needs to be downloaded and cleaned into ordered numbers we can feed into statistical models:
  26.  
  27. <code>
  28. ## $ wget http://slatestarcodex.com/blog_images/oblivionsurvey.csv
  29. ## $ dos2unix oblivionsurvey.csv
  30. ## $ cat oblivionsurvey.csv | iconv -c -tascii > foo.txt; mv foo.txt oblivionsurvey.csv # some joker put in Unicode crap
  31.  
  32. ## Data munging/cleanup:
  33. oblivion <- read.csv("oblivionsurvey.csv")
  34. colnames(oblivion)
  35. # [1] "Would.you.rather..."
  36. # [2] "How.strongly.do.you.feel.about.your.answer.to.the.above."
  37. # [3] "Would.you.rather....1"
  38. # [4] "How.strongly.do.you.feel.about.your.answer.to.the.above..1"
  39. # [5] "Would.you.prefer..."
  40. # [6] "How.strongly.do.you.feel.about.your.answer.to.the.above..2"
  41. # [7] "Creating.new..happy.sentient.beings.is..."
  42. # [8] "What.percent.certainty.of.going.to.Heaven.would.you.need.before.you.would.prefer.a.world.with.both.Heaven.and.Hell.to.a.world.where.death.ends.inevitably.in.oblivion."
  43. # [9] "What.are.your.views.on.some.sort.of..right.to.suicide..for.unhappy.people..without..terminal.diseases."
  44. # [10] "What.are.your.views.on.a.right.to.euthanasia.for.people.with.terminal.diseases."
  45. # [11] "Do.you.think.you.might.ever.sign.up.for.cryonics."
  46. # [12] "In.general..do.you.think.of.yourself.as.a.happy.person."
  47. # [13] "Would.you.describe.your.moral.views.as.utilitarian.co"
  48. # [14] "Are.you.religious."
  49. ## Give more memorable names to each variable:
  50. colnames(oblivion) <- c("McDonalds", "McDonalds.strength", "Longlife", "Longlife.strength", "Repugnantconclusion", "Repugnantconclusion.strength", "Newpeople", "Heavenhell.p", "Right.suicide", "Right.euthanasia", "Cryonics", "Happiness", "Utilitarian", "Religious")
  51.  
  52. ## convert preference variable into something meaningful
  53. ## goddammit Yvain how many times do I need to tell you that free response is the devil? Maybe then half the data wouldn't be useless.
  54. ## ah fuck it, if people want their answers to matter, they can *give real numbers and stop being such precious special snowflakes*
  55. heaven <- gsub(">", "", gsub("%", "", as.character(oblivion$Heavenhell.p)))
  56. oblivion$Heavenhell.p <- as.numeric(gsub("[a-z,A-Z, \' ']", "", heaven))
  57. oblivion[!is.na(oblivion$Heavenhell.p) & oblivion$Heavenhell.p>100,]$Heavenhell.p <- 100
  58. oblivion[!is.na(oblivion$Heavenhell.p) & oblivion$Heavenhell.p<0,]$Heavenhell.p <- 0
  59.  
  60. ## convert non-answers to NAs
  61. oblivion[oblivion==""] <- NA
  62. oblivion[!is.na(oblivion$Newpeople) & oblivion$Newpeople=="I am not a consequentialist or otherwise don't want to answer this question",]$Newpeople <- NA
  63.  
  64. ## encode orderings, then convert to integers 1-4
  65. oblivion$Newpeople <- as.integer(ordered(oblivion$Newpeople, levels=c("Bad", "Morally neutral", "Generally good, but less good than improving the lives of existing beings by the same amount", "Exactly comparable to improving the lives of existing beings. Creating a life that experiences 100 utils is exactly as good as improving existing lives 100 utils.")))
  66. oblivion$Right.suicide <- as.integer(ordered(oblivion$Right.suicide, levels=c("Strongly against", "Slightly against", "Neutral", "Slightly in favor" , "Strongly in favor")))
  67. oblivion$Right.euthanasia <- as.integer(ordered(oblivion$Right.euthanasia, levels=c("Strongly against", "Slightly against", "Neutral", "Slightly in favor" , "Strongly in favor")))
  68. oblivion$Cryonics <- as.integer(ordered(oblivion$Cryonics, levels=c("Not at all interested", "Somewhat interested", "Yes, already signed up or very interested")))
  69. oblivion$Happiness <- as.integer(ordered(oblivion$Happiness, levels=c("No, very unhappy", "No, somewhat unhappy", "Average", "Yes, somewhat happy", "Yes, very happy")))
  70. oblivion$Utilitarian <- as.integer(ordered(oblivion$Utilitarian, levels=c("No", "It's complicated", "Yes")))
  71. oblivion$Religious <- oblivion$Religious=="Yes"
  72.  
  73. ## OK, now how do we deal with the bizarre set of questions "McDonalds", "McDonalds.strength", "Longlife", "Longlife.strength", "Repugnantconclusion", "Repugnantconclusion.strength"?
  74. ## Even though they amount to just a scale 1-6, they're split across two questions each with reversals! ;_;
  75. ## what we do is we define one response to the first question as +1, the other response as -1, and then convert the second question to an ordered factor 1/2/3
  76. ## then we simply multiply and now we have a scale ranked -3/-2/-1/0/1/2/3! Then we can recenter by adding 4. Tada!
  77. oblivion$McDonalds.strength <- ordered(oblivion$McDonalds.strength, levels=c("Ambivalent", "Somewhat strongly", "Very strongly"))
  78. oblivion$McDonalds <- ifelse(oblivion$McDonalds=="Die painlessly right now.", 1, -1) * as.integer(oblivion$McDonalds.strength) + 4
  79. oblivion$McDonalds.strength <- NULL
  80.  
  81. oblivion$Longlife.strength <- ordered(oblivion$Longlife.strength, levels=c("Ambivalent", "Somewhat strongly", "Very strongly"))
  82. oblivion$Longlife <- ifelse(oblivion$Longlife=="Live a short but happy life. You die ten years from now, in 2026, after being hit by a car. Until then, you do fulfilling work, have happy relationships, and meet with success in most projects.", 1, -1) * as.integer(oblivion$Longlife.strength) + 4
  83. oblivion$Longlife.strength <- NULL
  84.  
  85. oblivion$Repugnantconclusion.strength <- ordered(oblivion$Repugnantconclusion.strength, levels=c("Ambivalent", "Somewhat strongly", "Very strongly"))
  86. oblivion$Repugnantconclusion <- ifelse(oblivion$Repugnantconclusion=="A world with 1 million sentient beings, all of whom are happy and consider their world a utopia.", 1, -1) * as.integer(oblivion$Repugnantconclusion.strength) + 4
  87. oblivion$Repugnantconclusion.strength <- NULL
  88.  
  89. summary(oblivion)
  90. # McDonalds Longlife Repugnantconclusion Newpeople Heavenhell.p Right.suicide Right.euthanasia Cryonics Happiness
  91. # Min. :1.0000 Min. :1.000000 Min. :1.000000 Min. :1.000000 Min. : 0.00000 Min. :1.000000 Min. :1.000000 Min. :1.00000 Min. :1.000000
  92. # 1st Qu.:2.0000 1st Qu.:3.000000 1st Qu.:6.000000 1st Qu.:3.000000 1st Qu.: 60.00000 1st Qu.:3.000000 1st Qu.:5.000000 1st Qu.:1.00000 1st Qu.:2.000000
  93. # Median :5.0000 Median :6.000000 Median :6.000000 Median :3.000000 Median : 98.00000 Median :4.000000 Median :5.000000 Median :2.00000 Median :4.000000
  94. # Mean :4.3663 Mean :4.959707 Mean :5.954128 Mean :2.912664 Mean : 77.37208 Mean :3.693859 Mean :4.589204 Mean :1.80831 Mean :3.382002
  95. # 3rd Qu.:6.0000 3rd Qu.:6.000000 3rd Qu.:7.000000 3rd Qu.:3.000000 3rd Qu.:100.00000 3rd Qu.:5.000000 3rd Qu.:5.000000 3rd Qu.:2.00000 3rd Qu.:4.000000
  96. # Max. :7.0000 Max. :7.000000 Max. :7.000000 Max. :4.000000 Max. :100.00000 Max. :5.000000 Max. :5.000000 Max. :3.00000 Max. :5.000000
  97. # NA's :2 NA's :2 NA's :4 NA's :178 NA's :223 NA's :3 NA's :1 NA's :35 NA's :5
  98. # Utilitarian Religious
  99. # Min. :1.000000 Mode :logical
  100. # 1st Qu.:2.000000 FALSE:848
  101. # Median :2.000000 TRUE :134
  102. # Mean :2.254596 NA's :112
  103. # 3rd Qu.:3.000000
  104. # Max. :3.000000
  105. # NA's :6
  106. cor.plot(lowerCor(oblivion, use="pairwise.complete.obs"),numbers=TRUE)
  107. # McDnl Lnglf Rpgnn Nwppl Hvnh. Rght.s Rght.t Crync Hppns Utltr Relgs
  108. # McDonalds 1.00
  109. # Longlife 0.34 1.00
  110. # Repugnantconclusion 0.22 0.21 1.00
  111. # Newpeople -0.05 0.01 -0.26 1.00
  112. # Heavenhell.p 0.23 0.15 0.05 0.01 1.00
  113. # Right.suicide 0.17 0.11 0.06 -0.05 0.19 1.00
  114. # Right.euthanasia 0.22 0.12 0.14 0.02 0.30 0.58 1.00
  115. # Cryonics -0.11 -0.23 -0.06 0.09 -0.04 0.19 0.17 1.00
  116. # Happiness -0.21 0.07 -0.07 0.09 -0.06 -0.07 -0.07 0.03 1.00
  117. # Utilitarian 0.04 0.00 -0.04 0.17 0.17 0.22 0.34 0.26 0.02 1.00
  118. # Religious -0.07 0.05 0.01 0.05 -0.25 -0.35 -0.51 -0.21 0.08 -0.27 1.00
  119. #
  120. # https://i.imgur.com/uEdMeIP.png
  121.  
  122. ## data munging & cleanup finished!
  123. write.csv(oblivion, file="2016-06-30-oblivionsurvey-clean.csv", row.names=FALSE)
  124. ## https://www.dropbox.com/s/xykunut6clb5f66/2016-06-30-oblivionsurvey-clean.csv
  125. </code>
  126.  
  127. <code>
  128. ## Analysis
  129. oblivion <- read.csv("2016-06-30-oblivionsurvey-clean.csv")
  130. library(lavaan)
  131. model1 <- '
  132. # second hypothesis: general factor of intrinsic life-preference
  133. OBLIVION =~ McDonalds + Longlife + Repugnantconclusion + Heavenhell.p + Right.suicide
  134.  
  135. # regressions:
  136. # third hypothesis:
  137. Newpeople ~ OBLIVION
  138. # fourth hypothesis:
  139. Right.euthanasia ~ OBLIVION
  140. Cryonics ~ OBLIVION
  141. # fifth hypothesis
  142. OBLIVION ~ Happiness
  143.  
  144. # I add this one because I am sure it is true:
  145. Right.euthanasia ~~ Right.suicide
  146. '
  147. s1 <- sem(model1, se="boot", missing="FIML", data=oblivion); summary(s1)
  148. # lavaan (0.5-20) converged normally after 57 iterations
  149. #
  150. # Used Total
  151. # Number of observations 1093 1094
  152. #
  153. # Number of missing patterns 17
  154. #
  155. # Estimator ML
  156. # Minimum Function Test Statistic 276.363
  157. # Degrees of freedom 23
  158. # P-value (Chi-square) 0.000
  159. #
  160. # Parameter Estimates:
  161. #
  162. # Information Observed
  163. # Standard Errors Bootstrap
  164. # Number of requested bootstrap draws 1000
  165. # Number of successful bootstrap draws 1000
  166. #
  167. # Latent Variables:
  168. # Estimate Std.Err Z-value P(>|z|)
  169. # OBLIVION =~
  170. # McDonalds 1.000
  171. # Longlife 0.658 0.089 7.360 0.000
  172. # Repugnntcnclsn 0.383 0.068 5.602 0.000
  173. # Heavenhell.p 8.838 1.560 5.665 0.000
  174. # Right.suicide 0.230 0.049 4.699 0.000
  175. #
  176. # Regressions:
  177. # Estimate Std.Err Z-value P(>|z|)
  178. # Newpeople
  179. # OBLIVION -0.065 0.031 -2.106 0.035
  180. # Right.euthanasia ~
  181. # OBLIVION 0.230 0.046 5.035 0.000
  182. # Cryonics ~
  183. # OBLIVION -0.086 0.027 -3.140 0.002
  184. # OBLIVION ~
  185. # Happiness -0.235 0.064 -3.685 0.000
  186. #
  187. # Covariances:
  188. # Estimate Std.Err Z-value P(>|z|)
  189. # Right.suicide ~~
  190. # Right.euthanas 0.539 0.050 10.725 0.000
  191. # Newpeople ~~
  192. # Right.euthanas 0.052 0.021 2.480 0.013
  193. # Cryonics 0.035 0.017 2.076 0.038
  194. # Right.euthanasia ~~
  195. # Cryonics 0.068 0.016 4.365 0.000
  196. #
  197. # Intercepts:
  198. # Estimate Std.Err Z-value P(>|z|)
  199. # McDonalds 5.160 0.225 22.890 0.000
  200. # Longlife 5.481 0.120 45.512 0.000
  201. # Repugnntcnclsn 6.257 0.083 75.543 0.000
  202. # Heavenhell.p 84.501 2.122 39.824 0.000
  203. # Right.suicide 3.876 0.064 60.115 0.000
  204. # Newpeople 2.857 0.036 79.462 0.000
  205. # Right.euthanas 4.772 0.050 95.928 0.000
  206. # Cryonics 1.740 0.030 57.462 0.000
  207. # OBLIVION 0.000
  208. #
  209. # Variances:
  210. # Estimate Std.Err Z-value P(>|z|)
  211. # McDonalds 2.153 0.253 8.519 0.000
  212. # Longlife 2.731 0.174 15.695 0.000
  213. # Repugnntcnclsn 1.893 0.122 15.561 0.000
  214. # Heavenhell.p 937.099 60.805 15.412 0.000
  215. # Right.suicide 1.587 0.064 24.815 0.000
  216. # Newpeople 0.529 0.024 21.617 0.000
  217. # Right.euthanas 0.655 0.055 11.959 0.000
  218. # Cryonics 0.408 0.015 26.611 0.000
  219. # OBLIVION 1.748 0.230 7.610 0.000
  220. fitMeasures(s1)
  221. # npar fmin chisq df pvalue baseline.chisq baseline.df baseline.pvalue cfi
  222. # 29.000 0.126 276.363 23.000 0.000 1154.690 36.000 0.000 0.774
  223. # tli nnfi rfi nfi pnfi ifi rni logl unrestricted.logl
  224. # 0.646 0.646 0.625 0.761 0.486 0.776 0.774 -17328.166 -17189.985
  225. # aic bic ntotal bic2 rmsea rmsea.ci.lower rmsea.ci.upper rmsea.pvalue rmr
  226. # 34714.332 34859.236 1093.000 34767.126 0.100 0.090 0.111 0.000 1.279
  227. # rmr_nomean srmr srmr_bentler srmr_bentler_nomean srmr_bollen srmr_bollen_nomean srmr_mplus srmr_mplus_nomean cn_05
  228. # 1.401 0.067 0.067 0.073 0.067 0.073 0.067 0.073 140.105
  229. # cn_01 gfi agfi pgfi mfi ecvi
  230. # 165.678 0.997 0.993 0.425 0.891 NA
  231. library(semPlot)
  232. semPaths(s1, "std", exoVar = FALSE, exoCov = FALSE, nCharNodes=15, layout="tree2", sizeMan=10, sizeMan2=10, residuals=FALSE, label.prop=1.5, edge.label.cex=0.9)
  233. ## https://i.imgur.com/pXbWrHL.png
  234. </code>
  235.  
  236. How do the predictions pan out?
  237.  
  238. 1. second hypothesis: As predicted, and we might've guessed from looking at the correlation table and noting the many moderate intercorrelations suggesting a few latent factors at work, the 5 questions seem to form a good 'oblivion' or 'quality of life' factor
  239. 2. third hypothesis: the OBLIVION factor does predict beliefs about how moral it is to create new people but it doesn't seem to explain <i>that</i> much of the variance: 1 higher unit of OBLIVION factor predicts less favorability by 0.065 units on the 1-4 scale which has a SD of 0.7.
  240. 3. fourth hypothesis: it definitely predicts euthanasia beliefs, almost 3x as much as creating-new-people; it also predicts cryonics but more along the lines of creating-new-people. Interestingly, the sign for that is the opposite of what I would've predicted.
  241. 4. fifth hypothesis: happy people definitely have lower OBLIVION scores.
  242.  
  243. (The means are generally fairly intermediate, so the first hypothesis could be considered correct as well.)
  244. Overall, all the hypotheses look vindicated by the SEM/confirmatory factor analysis.
  245.  
  246. I actually didn't read the rest of the post because I read the listed hypotheses and went 'a well-defined theoretical model relating survey responses to a latent factor which maps perfectly onto a SEM! <i>I've been training all my life for this moment!</i>' and I started work. (The data cleaning took... a long time.)
  247. So let's see. "The second hypothesis was weakly confirmed"; I disagree, I think it was stronger but I used a different set of variables to construct my OBLIVION factor. With Likert scales like this, with only a handful of questions per latent factor (at most), there is going to be a lot of random noise, there is going to be a lot of measurement error, there's going to be noise due to minor details like wording and people preferring more or less extreme responses, and even constructs which are strongly related will yield relatively small raw correlations. If you tried to measure IQ with less than 14 multiple-choice questions, you would not get a very good measurement of intelligence (maybe <i>r</i>=0.5 at best), and similarly here - you're not going to get a good measure of any ethical factor without asking many overlapping questions/hypotheticals to overcome those issues.
  248. "The third hypothesis was not supported." This one was a small effect and since Yvain only looked at first-order correlations, they were naturally unimpressive and not statistically-significant.
  249. "The fourth and fifth hypotheses were weakly supported." more than weakly, again, probably masked by not using a latent variable.
  250.  
  251. I think that some of it is a little off, though, and the OBLIVION factor is being underestimated. In particular, I would absolutely expected <tt>Right.euthanasia</tt> and <tt>Right.suicide</tt> to also load on OBLIVION. What does an exploratory factor analysis or clustering say?
  252.  
  253. One clustering algorithm:
  254.  
  255. <code>
  256. iclust(oblivion)
  257. # ...
  258. # Cluster size:
  259. # C6 C9
  260. # 6 5
  261. #
  262. # Item by Cluster Structure matrix:
  263. # O P C6 C9
  264. # McDonalds C9 C9 0.20 -0.56
  265. # Longlife C9 C9 0.03 -0.36
  266. # Repugnantconclusion C9 C9 0.04 -0.48
  267. # Newpeople C9 C9 0.06 0.27
  268. # Heavenhell.p C9 C6 0.33 -0.26
  269. # Right.suicide C6 C6 0.61 -0.24
  270. # Right.euthanasia C6 C6 0.78 -0.28
  271. # Cryonics C6 C6 0.31 0.28
  272. # Happiness C9 C9 -0.07 0.20
  273. # Utilitarian C6 C6 0.47 0.10
  274. # Religious C6 C6 -0.61 0.07
  275. #
  276. # With eigenvalues of:
  277. # C6 C9
  278. # 1.8 1.1
  279. #
  280. # Purified scale intercorrelations
  281. # reliabilities on diagonal
  282. # correlations corrected for attenuation above diagonal:
  283. # C6 C9
  284. # C6 0.68 -0.15
  285. # C9 -0.08 0.44
  286. #
  287. # Cluster fit = 0.48 Pattern fit = 0.97 RMSR = 0.06
  288. #
  289. # https://i.imgur.com/zrr6I9T.png
  290. </code>
  291.  
  292. Hm... Complicated, not particular interpretable. The suicide/euthanasia seems to be tapping into a religion-related variable of some sort. Moving onto factor analysis:
  293.  
  294. <code>
  295. library(psych)
  296. nfactors(oblivion)
  297. # VSS complexity 1 achieves a maximimum of 0.61 with 7 factors
  298. # VSS complexity 2 achieves a maximimum of 0.73 with 7 factors
  299. # The Velicer MAP achieves a minimum of 0.03 with 1 factors
  300. # Empirical BIC achieves a minimum of -29.25 with 4 factors
  301. # Sample Size adjusted BIC achieves a minimum of -0.57 with 6 factors
  302. #
  303. # Statistics by number of factors
  304. # vss1 vss2 map dof chisq prob sqresid fit RMSEA BIC SABIC complex eChisq SRMR eCRMS eBIC
  305. # 1 0.39 0.00 0.025 44 6.6e+02 1.6e-111 9.2 0.39 0.114 355.4 495.18 1.0 1.3e+03 1.0e-01 0.115 955.8
  306. # 2 0.48 0.56 0.030 34 2.9e+02 1.2e-42 6.6 0.56 0.083 53.5 161.48 1.3 3.7e+02 5.6e-02 0.071 136.2
  307. # 3 0.53 0.63 0.044 25 1.6e+02 4.3e-22 5.3 0.65 0.071 -12.6 66.80 1.5 1.7e+02 3.8e-02 0.056 -2.5
  308. # 4 0.55 0.67 0.069 17 9.4e+01 1.3e-12 4.6 0.70 0.065 -25.2 28.77 1.5 9.0e+01 2.7e-02 0.049 -29.2
  309. # 5 0.54 0.65 0.096 10 7.1e+01 2.3e-11 4.6 0.70 0.075 1.5 33.23 1.7 7.2e+01 2.4e-02 0.057 1.9
  310. # 6 0.50 0.69 0.132 4 1.5e+01 5.3e-03 3.5 0.77 0.050 -13.3 -0.57 1.7 1.2e+01 9.9e-03 0.037 -16.1
  311. # 7 0.61 0.73 0.202 -1 8.2e-01 NA 2.9 0.81 NA NA NA 1.6 4.5e-01 1.9e-03 NA NA
  312. # 8 0.48 0.63 0.297 -5 4.7e-06 NA 3.0 0.80 NA NA NA 1.6 4.8e-06 6.3e-06 NA NA
  313. # 9 0.47 0.60 0.474 -8 4.4e-10 NA 2.9 0.80 NA NA NA 1.7 3.4e-10 5.3e-08 NA NA
  314. # 10 0.48 0.62 1.000 -10 3.8e-12 NA 2.6 0.83 NA NA NA 1.8 3.3e-12 5.2e-09 NA NA
  315. # 11 0.52 0.66 NA -11 0.0e+00 NA 2.1 0.86 NA NA NA 1.5 1.2e-25 9.9e-16 NA NA
  316. #
  317. # https://imgur.com/NSyDnDj
  318. fa(oblivion, nfactors=4)
  319. # Factor Analysis using method = minres
  320. # Call: fa(r = oblivion, nfactors = 4)
  321. # Standardized loadings (pattern matrix) based upon correlation matrix
  322. # MR1 MR2 MR3 MR4 h2 u2 com
  323. # McDonalds 0.05 0.02 0.13 0.63 0.50 0.50 1.1
  324. # Longlife 0.02 0.00 0.78 0.03 0.64 0.36 1.0
  325. # Repugnantconclusion 0.05 -0.27 0.19 0.15 0.17 0.83 2.5
  326. # Newpeople 0.00 0.91 0.01 0.01 0.83 0.17 1.0
  327. # Heavenhell.p 0.28 0.03 0.07 0.19 0.16 0.84 1.9
  328. # Right.suicide 0.65 -0.06 0.05 0.00 0.43 0.57 1.0
  329. # Right.euthanasia 0.85 0.02 0.05 0.03 0.75 0.25 1.0
  330. # Cryonics 0.32 0.09 -0.26 -0.14 0.19 0.81 2.5
  331. # Happiness 0.02 0.03 0.29 -0.47 0.19 0.81 1.7
  332. # Utilitarian 0.43 0.18 -0.05 -0.06 0.21 0.79 1.4
  333. # Religious -0.61 0.06 0.14 0.01 0.38 0.62 1.1
  334. #
  335. # MR1 MR2 MR3 MR4
  336. # SS loadings 1.90 0.96 0.87 0.74
  337. # Proportion Var 0.17 0.09 0.08 0.07
  338. # Cumulative Var 0.17 0.26 0.34 0.41
  339. # Proportion Explained 0.43 0.21 0.19 0.17
  340. # Cumulative Proportion 0.43 0.64 0.83 1.00
  341. #
  342. # With factor correlations of
  343. # MR1 MR2 MR3 MR4
  344. # MR1 1.00 0.01 0.08 0.25
  345. # MR2 0.01 1.00 0.01 -0.14
  346. # MR3 0.08 0.01 1.00 0.40
  347. # MR4 0.25 -0.14 0.40 1.00
  348. #
  349. # Mean item complexity = 1.5
  350. # Test of the hypothesis that 4 factors are sufficient.
  351. #
  352. # The degrees of freedom for the null model are 55 and the objective function was 1.7 with Chi Square of 1845.26
  353. # The degrees of freedom for the model are 17 and the objective function was 0.09
  354. #
  355. # The root mean square of the residuals (RMSR) is 0.03
  356. # The df corrected root mean square of the residuals is 0.05
  357. #
  358. # The harmonic number of observations is 988 with the empirical chi square 79.58 with prob < 4.6e-10
  359. # The total number of observations was 1094 with MLE Chi Square = 93.74 with prob < 1.3e-12
  360. #
  361. # Tucker Lewis Index of factoring reliability = 0.861
  362. # RMSEA index = 0.065 and the 90 % confidence intervals are 0.052 0.077
  363. # BIC = -25.22
  364. # Fit based upon off diagonal values = 0.98
  365. # Measures of factor score adequacy
  366. # MR1 MR2 MR3 MR4
  367. # Correlation of scores with factors 0.91 0.91 0.83 0.77
  368. # Multiple R square of scores with factors 0.83 0.83 0.68 0.59
  369. # Minimum correlation of possible factor scores 0.65 0.66 0.37 0.17
  370. fa.diagram(fa(oblivion, nfactors=4))
  371. # https://imgur.com/9EtL2d2
  372. </code>
  373.  
  374. The factor analysis suggests 4 factors, which turn out to be:
  375.  
  376. 1. MR1 loads on <tt>Heavenhell.p</tt>, <tt>Right.suicide</tt>, <tt>Right.euthanasia</tt>, <tt>Cryonics</tt>, <tt>Utilitarian</tt>, anti-<tt>Religious</tt>
  377. 2. MR2 loads on anti-<tt>Repugnantconclusion</tt>, <tt>Newpeople</tt>, <tt>Utilitarian</tt>
  378. 3. MR3 loads on <tt>McDonalds</tt>, <tt>Longlife</tt>, <tt>Repugnantconclusion</tt>, anti-<tt>Cryonics</tt>, <tt>Happiness</tt>, <tt>Religious</tt>
  379. 4. MR4 loads on <tt>McDonalds</tt>, <tt>Repugnantconclusion</tt>, <tt>Heavenhell.p</tt>, anti-<tt>Cryonics</tt>, anti-<tt>Happiness</tt>
  380.  
  381. MR1 looks like utilitarians with high standards for life: hopeful for the future, not expecting an afterlife but if there is one they would only be happy about it if they had a really good chance for heaven.
  382. MR2 looks like utilitarians who bite the bullet on the Repugnant Conclusion and the general question of making more people: it's good to create lots of low-quality lives.
  383. MR3 looks like people in general who have high standards for life being worth living and don't feel the need to prolong it: they would prefer to die in the McDonalds, live a short but glorious life, are happy, don't feel any need for cryonics, and are a bit religious.
  384. MR4 is weird. It's mostly like MR3, except they really would prefer to the die in the McDonalds, and they are very unhappy.
  385.  
  386. Playing with <tt>omega()</tt> to visualize other factorizations, the factorization I find most preferable is a 2-factor solution, which yields an immediately interpretable OBLIVION and a sort of religion factor:
  387.  
  388. <code>
  389. fa(oblivion, nfactors=2)
  390. # Factor Analysis using method = minres
  391. # Call: fa(r = oblivion, nfactors = 2)
  392. # Standardized loadings (pattern matrix) based upon correlation matrix
  393. # MR1 MR2 h2 u2 com
  394. # McDonalds 0.16 0.54 0.340 0.66 1.2
  395. # Longlife 0.02 0.54 0.299 0.70 1.0
  396. # Repugnantconclusion 0.05 0.37 0.146 0.85 1.0
  397. # Newpeople 0.05 -0.17 0.030 0.97 1.1
  398. # Heavenhell.p 0.31 0.20 0.157 0.84 1.7
  399. # Right.suicide 0.64 0.05 0.426 0.57 1.0
  400. # Right.euthanasia 0.86 0.07 0.759 0.24 1.0
  401. # Cryonics 0.32 -0.41 0.232 0.77 1.9
  402. # Happiness -0.07 -0.13 0.024 0.98 1.5
  403. # Utilitarian 0.44 -0.18 0.204 0.80 1.3
  404. # Religious -0.61 0.14 0.369 0.63 1.1
  405. #
  406. # MR1 MR2
  407. # SS loadings 1.95 1.04
  408. # Proportion Var 0.18 0.09
  409. # Cumulative Var 0.18 0.27
  410. # Proportion Explained 0.65 0.35
  411. # Cumulative Proportion 0.65 1.00
  412. #
  413. # With factor correlations of
  414. # MR1 MR2
  415. # MR1 1.00 0.14
  416. # MR2 0.14 1.00
  417. #
  418. # Mean item complexity = 1.3
  419. # Test of the hypothesis that 2 factors are sufficient.
  420. #
  421. # The degrees of freedom for the null model are 55 and the objective function was 1.7 with Chi Square of 1845.26
  422. # The degrees of freedom for the model are 34 and the objective function was 0.27
  423. #
  424. # The root mean square of the residuals (RMSR) is 0.06
  425. # The df corrected root mean square of the residuals is 0.07
  426. #
  427. # The harmonic number of observations is 988 with the empirical chi square 329.03 with prob < 5.4e-50
  428. # The total number of observations was 1094 with MLE Chi Square = 291.41 with prob < 1.2e-42
  429. #
  430. # Tucker Lewis Index of factoring reliability = 0.767
  431. # RMSEA index = 0.083 and the 90 % confidence intervals are 0.075 0.092
  432. # BIC = 53.49
  433. # Fit based upon off diagonal values = 0.92
  434. # Measures of factor score adequacy
  435. # MR1 MR2
  436. # Correlation of scores with factors 0.91 0.77
  437. # Multiple R square of scores with factors 0.83 0.59
  438. # Minimum correlation of possible factor scores 0.66 0.19
  439. # fa.diagram(fa(oblivion, nfactors=2))
  440. # https://imgur.com/2iLgCbF
  441. </code>
  442.  
  443. You see what I mean:
  444.  
  445. 1. MR1 loads primarily on <tt>Heavenhell.p</tt>, <tt>Right.suicide</tt>, <tt>Right.euthanasia</tt>, <tt>Cryonics</tt>, <tt>Utilitarian</tt>, <tt>anti-Religious</tt>
  446. 2. MR2 loads primarily on <tt>McDonalds</tt>, <tt>Longlife</tt>, <tt>Repugnantconclusion</tt>, anti-<tt>Newpeople</tt>, <tt>Heavenhell.p</tt>, <tt>Right.suicide</tt>, <tt>Right.euthanasia</tt>, anti-<tt>Cryonics</tt>
  447.  
  448. One factor expresses general utilitarian/anti-Catholicism moral beliefs; the other looks like the OBLIVION factor.
  449.  
  450. When Yvain says
  451.  
  452. <blockquote>So it looks like people have very different opinions about when to choose death versus suffering, but that these opinions are inconsistent and only weakly driven by broad cross-situation intuitions.</blockquote>
  453.  
  454. I would interpret it more as there are two cross-cutting concerns people have: whether to be utilitarian, or whether to desire a high quality of life.
  455.  
  456. What if we take those MR1/MR2, add in the <tt>Happiness</tt> regression (since happiness turned out to generally be unrelated to most factors), and compare this bifactor model to Yvain's single-factor model w/regressions?
  457. Regular frequentist model fits aren't too helpful but we can switch to blavaan and get a Bayes factor to choose between the two competing models (although note that doesn't guarantee that either one is a <i>good</i> model, the BF just tells us which of the two is better than the other):
  458.  
  459. <code>
  460. model2 <- '
  461. # MR2
  462. OBLIVION =~ McDonalds + Longlife + Repugnantconclusion + Newpeople + Heavenhell.p + Right.suicide + Right.euthanasia + Cryonics
  463. # MR1
  464. RELIGION =~ Heavenhell.p + Right.suicide + Right.euthanasia + Cryonics + Utilitarian + Religious
  465. # regressions: only missing variable is Happiness now
  466. # fifth hypothesis
  467. OBLIVION ~ Happiness
  468.  
  469. # I add this one because I am sure it is true:
  470. Right.euthanasia ~~ Right.suicide
  471. '
  472. s2 <- sem(model2, se="boot", missing="FIML", data=oblivion); summary(s2)
  473. # lavaan (0.5-20) converged normally after 129 iterations
  474. #
  475. # Used Total
  476. # Number of observations 1093 1094
  477. #
  478. # Number of missing patterns 22
  479. #
  480. # Estimator ML
  481. # Minimum Function Test Statistic 254.476
  482. # Degrees of freedom 39
  483. # P-value (Chi-square) 0.000
  484. #
  485. # Parameter Estimates:
  486. #
  487. # Information Observed
  488. # Standard Errors Bootstrap
  489. # Number of requested bootstrap draws 1000
  490. # Number of successful bootstrap draws 1000
  491. #
  492. # Latent Variables:
  493. # Estimate Std.Err Z-value P(>|z|)
  494. # OBLIVION =~
  495. # McDonalds 1.000
  496. # Longlife 0.777 0.109 7.131 0.000
  497. # Repugnntcnclsn 0.431 0.070 6.128 0.000
  498. # Newpeople -0.080 0.032 -2.475 0.013
  499. # Heavenhell.p 7.913 1.349 5.866 0.000
  500. # Right.suicide 0.209 0.041 5.090 0.000
  501. # Right.euthanas 0.202 0.033 6.212 0.000
  502. # Cryonics -0.145 0.031 -4.692 0.000
  503. # RELIGION =~
  504. # Heavenhell.p 1.000
  505. # Right.suicide 0.065 0.012 5.309 0.000
  506. # Right.euthanas 0.061 0.011 5.756 0.000
  507. # Cryonics 0.023 0.004 5.177 0.000
  508. # Utilitarian 0.034 0.006 5.532 0.000
  509. # Religious -0.022 0.004 -6.112 0.000
  510. #
  511. # Regressions:
  512. # Estimate Std.Err Z-value P(>|z|)
  513. # OBLIVION ~
  514. # Happiness -0.191 0.065 -2.936 0.003
  515. #
  516. # Covariances:
  517. # Estimate Std.Err Z-value P(>|z|)
  518. # Right.suicide ~~
  519. # Right.euthanas 0.156 0.043 3.655 0.000
  520. #
  521. # Intercepts:
  522. # Estimate Std.Err Z-value P(>|z|)
  523. # McDonalds 5.013 0.235 21.371 0.000
  524. # Longlife 5.462 0.145 37.724 0.000
  525. # Repugnntcnclsn 6.232 0.093 67.081 0.000
  526. # Newpeople 2.864 0.037 77.396 0.000
  527. # Heavenhell.p 82.335 1.985 41.486 0.000
  528. # Right.suicide 3.829 0.062 61.548 0.000
  529. # Right.euthanas 4.720 0.045 103.968 0.000
  530. # Cryonics 1.713 0.034 50.646 0.000
  531. # Utilitarian 2.255 0.023 98.452 0.000
  532. # Religious 0.141 0.011 13.159 0.000
  533. # OBLIVION 0.000
  534. # RELIGION 0.000
  535. #
  536. # Variances:
  537. # Estimate Std.Err Z-value P(>|z|)
  538. # McDonalds 2.385 0.243 9.829 0.000
  539. # Longlife 2.560 0.178 14.410 0.000
  540. # Repugnntcnclsn 1.864 0.124 15.033 0.000
  541. # Newpeople 0.526 0.025 21.055 0.000
  542. # Heavenhell.p 873.774 58.484 14.940 0.000
  543. # Right.suicide 1.149 0.072 15.856 0.000
  544. # Right.euthanas 0.286 0.032 8.846 0.000
  545. # Cryonics 0.332 0.018 18.028 0.000
  546. # Utilitarian 0.432 0.020 21.729 0.000
  547. # Religious 0.065 0.007 9.978 0.000
  548. # OBLIVION 1.539 0.220 6.987 0.000
  549. # RELIGION 109.621 34.045 3.220 0.001
  550. library(semPlot)
  551. semPaths(s2, "std", exoVar = FALSE, exoCov = FALSE, nCharNodes=15, layout="tree2", sizeMan=10, sizeMan2=10, residuals=FALSE, label.prop=1.5, edge.label.cex=0.9)
  552. anova(s1, s2)
  553. # Chi Square Difference Test
  554. #
  555. # Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)
  556. # s1 23 34714.332 34859.236 276.36294
  557. # s2 39 254.47648 -21.886466 16 1
  558.  
  559. library(blavaan)
  560. ## need to standardize/rescale to avoid a blavaan bug: https://groups.google.com/d/msg/blavaan/sJxNA78VC0Y/4hdFUi3fAgAJ
  561. b1 <- bsem(model1, n.chains=6, jagcontrol=list(method="rjparallel"), fixed.x=FALSE, data=scale(oblivion))
  562. b2 <- bsem(model2, n.chains=6, jagcontrol=list(method="rjparallel"), fixed.x=FALSE, data=scale(oblivion))
  563. BF(b1, b2)
  564. # Laplace approximation to the log-Bayes factor (experimental):
  565. # 2231.391
  566. </code>
  567.  
  568. So the chi-squared looks better for the bi-factor model and the log BF indicates <i>much</i> stronger evidence for the second model.
  569.  
  570. If one were going to extend this line of inquiry further, I think it would be particularly valuable to ask about what <i>kind</i> of religion (Christian, especially Catholic), age, how many kids one has, and add in more variants of the existing population-dilemmas as well as some others existence-related questions like abortion or the morality of having more than 2 kids.
  571. And eliminate the free-response fields.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement